我还是团结的新人,所以如果我浪费你的时间,请原谅我。但是,如果你帮我解决这个问题,我感激不尽:
我正在创建一个使用统一的多人游戏我希望获得已注册的spawnablable Prefabs列表我搜索了Scipting API并找到了这个方法:NetworkManager.spawnPreabs
这是我的剧本:
library(blogdown)
new_site()
在运行控制台之前显示没有问题,但在运行游戏时控制台显示此错误:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class CardSpawner : NetworkBehaviour
{
public override void OnStartServer(){
distributeCards ();
Debug.Log ("THE METHOD WORKED!!!!");
}
IEnumerator Mycoroutine (bool cardDistribution){
yield return new WaitForSeconds(10f);
if (ClientScene.ready) {
RpcdistributeCards (true);
}
}
[Server]
public bool distributeCards(){
bool cardDistribution = false;
//int playersNumber;
//NetworkManager netM = new NetworkManager ();
//netM = GetComponent<NetworkManager> ();
//playersNumber = netM.numPlayers;
cardDistribution = true;
StartCoroutine ("Mycoroutine",cardDistribution);
return cardDistribution;
}
[ClientRpc]
public void RpcdistributeCards (bool Permission){
Debug.Log ("The Client RPC Worked ");
Transform startPositionTransform;
Vector2 position, finalPosition;
NetworkManager NetM;
List<Transform> startPositionsList;
Vector2 Increment = new Vector2 (1.41f, 0f);
NetM = GetComponent<NetworkManager> ();
List<GameObject> Cards;
Cards = NetM.spawnPrefabs;
if (Permission) {
Debug.Log ("The If statement worked ");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 8; j++) {
GameObject CurrentGameObject = Cards [Random.Range (0, Cards.Count)];
Cards.Remove (CurrentGameObject);
Debug.Log (CurrentGameObject);
startPositionsList = NetM.startPositions;
switch (i) {
case 1:
startPositionTransform = startPositionsList [0];
position = startPositionTransform.position;
finalPosition = position + Increment;
var cardFirstPosition = (GameObject)Instantiate (CurrentGameObject, finalPosition, Quaternion.identity);
break;
case 2:
startPositionTransform = startPositionsList [1];
position = startPositionTransform.position;
finalPosition = position + Increment;
var cardSecondPosition = (GameObject)Instantiate (CurrentGameObject, finalPosition, Quaternion.identity);
break;
case 3:
startPositionTransform = startPositionsList [2];
position = startPositionTransform.position;
finalPosition = position + Increment;
var cardThirdPosition = (GameObject)Instantiate (CurrentGameObject, finalPosition, Quaternion.identity);
break;
case 4:
startPositionTransform = startPositionsList [3];
position = startPositionTransform.position;
finalPosition = position + Increment;
var cardFourthPosition = (GameObject)Instantiate (CurrentGameObject, finalPosition, Quaternion.identity);
break;
}
}
}
}
}
}
这行代码是什么:
NullReferenceException: Object reference not set to an instance of an
object
CardSpawner.RpcdistributeCards (Boolean Permission) (at
Assets/Scripts/CardSpawner.cs:59)
我不明白为什么它返回null。 我感谢任何帮助。谢谢你的阅读。
答案 0 :(得分:0)
不要抱歉寻求帮助!
List<GameObject> Cards;
Cards = NetM.spawnPrefabs;
尝试制作NetM&amp;卡片列表公开
public NetworkManager NetM;
public List<GameObject> Cards;
这将在检查器中显示List,以便您可以分配变量
当未分配正由脚本访问的内容时,会发生NullReferenceException。 因此,将这些变量和类公开,并将它们分配到检查器
中NullReferenceException: Object reference not set to an instance of an
object