前提・実現したいこと
UnityのMirrorというアセットを使ってオンラインゲームでのHPの個別管理をしたいと思っています。
SyncVarのhook機能を使う際にフック関数が記載されているのに見つからないというエラーが発生しました。
私の理解が浅く、使い方そのものが間違っている可能性もございます。
発生している問題・エラーメッセージ
原文
Could not find hook for 'HP', hook name 'HookHP'. Method signature should be void HookHP(System.Int32 oldValue, System.Int32 newValue) (at System.Int32 PlayerHP::HP) UnityEngine.Debug:LogError (object) 以下それにより併発するMirrorのエラー
日本語訳(関数はあるはずだが...?)
「HP」のフック、フック名「HookHP」が見つかりませんでした。 メソッドシグネチャはvoidHookHP(System.Int32 oldValue、System.Int32 newValue)(System.Int32 PlayerHP :: HP) である必要があります
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using Mirror; 6public class PlayerHP : NetworkBehaviour 7{ 8 [SyncVar(hook = nameof(HookHP))] 9 public int HP = 100; 10 void Start() 11 { 12 GetComponentInChildren<Text>().text = HP.ToString(); 13 } 14 void OnCollisionEnter(Collision other) 15 { 16 Damage(); 17 //ここを消してhook関数側に持っていきたい 18 //GetComponentInChildren<Text>().text = HP.ToString(); 19 } 20 [Command] 21 void Damage() 22 { 23 HP -= 10; 24 } 25 void HookHP(int newValue) 26 { 27 HP = newValue; 28 GetComponentInChildren<Text>().text = HP.ToString(); 29 } 30}
試したこと
SyncVarオンリーにしてhookされた関数外で実装する俗にいう無駄のあるパターンと言う方法では実行出来ました。
補足情報(FW/ツールのバージョンなど)
Unity:2020.3.16f1
Mirror:46.0.4
主に下記記事を参考にしています。
https://motoyama.hateblo.jp/entry/unet-09
https://mirror-networking.gitbook.io/docs/guides/synchronization/syncvar-hooks
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/08 02:43