嗨我有一个附加到主摄像头的脚本,在这个脚本中我想选择0到5之间的数字。根据我得到的数字,我想要一个脚本运行。她的脚本是附在主摄像头上的。我一直收到这个错误
NullReferenceException:对象引用未设置为对象的实例RandomFunction.Start()(在Assets / Resources / Scripts / RandomFunction.cs:22)
using UnityEngine;
using System.Collections;
public class RandomFunction : MonoBehaviour {
int n;
void Awake()
{
GetComponent<RandomFunction> ().enabled = true;
}
void Start ()
{
n=Random.Range(0,5);
if(n==0)
{
GetComponent<BlueGoUp> ().enabled = true;
}
else if(n==1)
{
GetComponent<RedGoUp> ().enabled = true;
}
else if(n==2)
{
GetComponent<GreenGoUp> ().enabled = true;
}
else if(n==3)
{
GetComponent<OrangeGoUp> ().enabled = true;
}
else if(n==4)
{
GetComponent<YellowGoUp> ().enabled = true;
}
else if(n==5)
{
GetComponent<PurpleGoUp> ().enabled = true;
}
}
}
答案 0 :(得分:0)
首先,你不需要做你在Awake功能中所做的事情,因为:
RandomFunction
附加到CameraObj。现在,RandomFunction
(脚本中的this
指针)的实例与CameraObj.GetComponent<RandomFunction>()
相同或相同,因为您无法将相同的组件添加到一个游戏对象。Awake()
方法不会被执行直到对象实际启用。因此您不需要重新启用脚本中的对象,因为如果它正在执行,则该对象已经启用。删除Awake
方法,它也应删除NullReferenceException
。如果仍然没有,请确保相同的对象(具有RandomFunction
组件)也包含组件BlueGoUp
,RedGoUp
,{ {1}},YellowGoUp
,GreenGoUp
和OrangeGoUp
。
哦,你的PurpleGoUp
条件永远不会成立,因为if (n==5)
永远不会返回5。 Random.Range()
参数始终对max
函数中的整数是唯一的,因此返回的值始终为Random.Range()
。
答案 1 :(得分:0)
Awake()
方法,因为从此处激活RandomFunction
脚本实际上是不必要的。在检查员中激活。gameObject.GetComponent
if(n==5)
永远不会成为现实,因为Random.Range(0,5)
会返回0,1,2,3 or 4
。
来自文件:
范围( int min, int max),返回min [包含]和max [exclusive]之间的随机整数(只读)。
switch case
语句代替If else
您的最终代码应如下所示:
using UnityEngine;
using System.Collections;
public class RandomFunction : MonoBehaviour {
int n;
void Start ()
{
n=Random.Range(0,6);
switch (n)
{
case 0:
gameobject.GetComponent<BlueGoUp> ().enabled = true;
break;
case 1:
gameObject.GetComponent<RedGoUp> ().enabled = true;
break;
case 2:
gameObject.GetComponent<GreenGoUp> ().enabled = true;
break;
case 3:
gameObject.GetComponent<OrangeGoUp> ().enabled = true;
break;
case 4:
gameObject.GetComponent<YellowGoUp> ().enabled = true;
break;
case 5:
gameObject.GetComponent<PurpleGoUp> ().enabled = true;
break;
default:
break;
}
}
}
答案 2 :(得分:0)
最有可能的是,我希望所有的GoUp脚本都不会附加到相机上。所以以另一种方式查找脚本。尝试用此替换你的代码,
using UnityEngine;
using System.Collections;
public class RandomFunction : MonoBehaviour {
int n;
void Awake()
{
GetComponent<RandomFunction> ().enabled = true;
}
void Start ()
{
n=Random.Range(0,6);
switch(n){
case 0:
FindObjectOfType<BlueGoUp>().enabled = true;
break;
case 1:
FindObjectOfType<RedGoUp>().enabled = true;
break;
case 2:
FindObjectOfType<GreenGoUp>().enabled = true;
break;
case 3:
FindObjectOfType<OrangeGoUp>().enabled = true;
break;
case 4:
FindObjectOfType<YellowGoUp>().enabled = true;
break;
case 5:
FindObjectOfType<PurpleGoUp>().enabled = true;
break;
}
}
}
如果这段代码不起作用,那么除了你的脚本不会放在任何游戏对象上之外别无他法。