前書き
Steamの実績を実装しているときにちょっとしたお悩みポイントがあったため原因や対応した方法について残しておこうと思います。
何ができるようになるのか
Event Triggerで表示されなかったメソッドが表示できるようになります。
どういった事象か?
Steamの実績を自分のゲームに実装するときのサンプルとして以下のソースがあります。その中の一部を今回は抜粋します。
# 詳細は省きますが、Steamの実績を実装するときはこんなサンプルソースがあるんだな~ぐらいに思っていただけると助かります。
SteamStatsAndAchievements.cs
public void OnGameStateChange(EClientGameState eNewState) {
// 処理省略
}
今回、OnGameStateChangeをEvent Triggerで呼び出そうとしたのですが、以下の画像で分かるようにOnGameStateChangeがEvent Triggerの選択肢に現れませんでした。
原因
いろいろなサイトを見てみるとEvent Triggerに表示されない原因として
- メソッドがpublicになっていない
- 対象のオブジェクトに指定のスクリプトがアタッチしてない
などありましたが、いずれも設定しているため上記以外が原因だと判断しました。
メソッドの作りをよくよく見てみると、
public void OnGameStateChange(EClientGameState eNewState)
EClientGameState eNewStateという引数を設定する必要があることが分かります。試しにこの引数をなくしたOnGameStateChangeTestを作成してみたところ、Event Triggerに表示されるようになりました。
public void OnGameStateChangeTest() {
// 処理省略
}
そのため、Event Triggerに表示されない原因は引数にあることが分かりました。また、引数のEClientGameState eNewStateを調べてみたところ別ファイルを参照した引数であることが分かりました。(SpaceWarClient.csもSteamで実績を実装するためのサンプルファイルになります。)
解決策
Event Triggerに表示されないメソッドを表示する方法として、
メソッドの引数は別ファイルを参照しない形式にする必要がある。
ということが必要でした。
まとめ
今回はEvent Triggerに表示されないメソッドを表示する方法について紹介しました。
いろいろ原因はあると思いますが、もしもEvent Triggerに指定のメソッドが表示されない!っといったことが起こった場合は以下の3つをまずは確認してみるのがいいかなと思います。
- メソッドをpublicにする
- 対象のオブジェクトに指定のスクリプトをアタッチする
- callするメソッドの引数は別ファイルを参照しない形にする ←今回はこれ
コメント