Assets/Resources フォルダを開き、 NPC.prefab の右端にある「>」のマークをクリックします。
すると、NPC.prefab の中身が展開されます。
展開されたデータのうち、「Bear」と書かれたオブジェクトを選択します。
Assets/Resources フォルダを開き、 NPC.prefab の右端にある「>」のマークをクリックします。
すると、NPC.prefab の中身が展開されます。
展開されたデータのうち、「Bear」と書かれたオブジェクトを選択します。
まず Assets/Resources フォルダーをクリックして選択し、その中にある NPC.prefab を選択します。
NPC の Inspector にある「Open Prefab」のボタンを押します。
すると Hierarchy の表示箇所に NPC.prefab がリスト化されて表示されますので、
親オブジェクト「NPC」の左隣にある三角マークをクリックし、子オブジェクトの「Bear」を選択します。
transform.parent.parent = GameObject.Find("NPC_Spawner").transform.GetChild(0).transform; gameObject.SetActive(true);
実行タイミングが異なりますが、これで処理内容が合致します。
// ホスト以外は処理をしない if( !MonobitEngine.MonobitNetwork.isHost ) { return; }
「ホスト権限を持たないクライアントでは、Update() を処理させない」というロジックを適用させます。
// ホスト以外は処理をしない if( !MonobitEngine.MonobitNetwork.isHost ) { return; }
「ホスト権限を持たないクライアントでは、Update() を処理させない」というロジックを適用させます。
// ホスト以外は処理をしない if( !MonobitEngine.MonobitNetwork.isHost ) { return; }
「ホスト権限を持たないクライアントでは、Update() を処理させない」というロジックを適用させます。
public class NPC_DamageReceiver : MonobitEngine.MonoBehaviour {
RPCメッセージを受信するためには、最低限 MonobitEngine.MonoBehaviour を継承している必要があります。
// MonobitView コンポーネント MonobitEngine.MonobitView m_MonobitView = null;
前述までと同様、MonobitView コンポーネント本体の参照のための変数を用意します。
void Awake() { // すべての親オブジェクトに対して MonobitView コンポーネントを検索する if (GetComponentInParent<MonobitEngine.MonobitView>() != null) { m_MonobitView = GetComponentInParent<MonobitEngine.MonobitView>(); } // 親オブジェクトに存在しない場合、すべての子オブジェクトに対して MonobitView コンポーネントを検索する else if (GetComponentInChildren<MonobitEngine.MonobitView>() != null) { m_MonobitView = GetComponentInChildren<MonobitEngine.MonobitView>(); } // 親子オブジェクトに存在しない場合、自身のオブジェクトに対して MonobitView コンポーネントを検索して設定する else { m_MonobitView = GetComponent<MonobitEngine.MonobitView>(); } }
ここも前述までにも説明した通り、親オブジェクトに存在する MonobitView を検索し、
// GetComponent<CharacterController>().enabled = false; // disable collision when dead. m_MonobitView.RPC("CharacterControllerOff", MonobitEngine.MonobitTargets.All, null);
敵が死亡した後に「キャラクタコントローラを無効化する」処理が入っている箇所について、
[MunRPC] void CharacterControllerOff() { GetComponent<CharacterController>().enabled = false; // disable collision when dead. }
これも前章のチャットの際にも説明しましたが、MonobitView.RPC() メソッドを使ったRPCメッセージの送信に対し、
先ほど送信側の関数名に「CharaterControllerOff」と名付けましたので、ここでは同名のメソッド名で記述します。・メソッド名の接頭に[MunRPC]のアトリビュートを付記すること。 ・MonobitView.RPC() の第一引数と同じ名前のメソッド名で定義すること。 ・MonobitView.RPC() の第三引数以降に対応するデータ型の引数値を定義すること。 (今回は引数にnullを指定しているので、引数は無し)