私のゲームのクライアントがアイテムを購入し、それらのアイテムをネットワークから作り出すことを許可しようとしています。これを行うために、私は2つのスクリプト、プレーヤー上のスクリプトとアイテム購入ボタン上のスクリプトを使用しています。 NetworkServer.Spawn()はサーバー上でしか呼び出せないことを知っていますので、アイテムスクリプトを購入する代わりにアイテムを生成するためにプレーヤースクリプトにコマンド関数を作成しました。しかし、この回避策を使用すると、NullReferenceExceptionエラーが渡された引数がnullであると表示されます。なぜ引数がnullですか?クライアントからサーバーに送信されたときに引数がnullになりました
購入アイテムのスクリプトコード:
void BuyItemAndSubtractGold(){
GameObject item = SearchForItem();
int cost = item.GetComponent<ItemManager_ItemStats>().item.buyValue;
if (item.GetComponent<ItemManager_ItemStats>() != null && storeMaster.gold >= cost) {
GameObject newItem = (GameObject)Instantiate (item);
playerMaster.CmdSpawnOnServer (newItem);
newItem.transform.parent = playerInventory.transform;
newItem.SetActive (false);
Vector3 gunPosition = newItem.GetComponent<ItemManager_ItemPickup>().gunPositions [0];
newItem.transform.localPosition = gunPosition;
newItem.transform.rotation = Quaternion.Euler(itemThrow.originalRotation);
storeMaster.gold -= cost;
audioSource.clip = boughtItem;
audioSource.Play();
storeMaster.CallEventUpdateUI();
sellInventory.LoadInventory();
playerMaster.CmdCallEventInventoryChanged();
} else {
noGold.SetActive (true);
StartCoroutine (wait5sec());
}
}
あなたは、システムが 'NetworkIdentity'コンポーネントを探して行くとき' NullReferenceException'が発生気づくことがあります。あなたがクライアント/サーバーアーキテクチャを回避しようとしているように私には見えますが、それは良いアプローチではないかもしれません。チュートリアルをチェックすることをお勧めします。 – rutter
@rutter良いチュートリアルをお勧めしますか? –