Unity3D中另一个脚本的布尔值
本文关键字:布尔值 脚本 另一个 Unity3D | 更新日期: 2023-09-27 18:25:17
所以我有两个脚本,一个叫EndCollider.cs,它在地图上的某个地方,它有一个OnTriggerEnter函数,它将布尔值设置为true。
using UnityEngine;
using System.Collections;
public class EndCollider : MonoBehaviour {
public bool isShow = false;
void OnTriggerEnter ()
{
isShow = true;
}
}
另一个脚本是SlowDownRun.cs,它在一个怪物对象上,在这个脚本中,我试图检测另一个剧本中的布尔值是否为真,如果为真,则移动怪物。
using UnityEngine;
using System.Collections;
public class SlowDownRun : MonoBehaviour {
GameObject TrollScript;
EndCollider MonsterShow;
// Use this for initialization
void Start ()
{
TrollScript = GameObject.Find("Troll");
MonsterShow = TrollScript.GetComponent<EndCollider>();
}
void Update()
{
if (MonsterShow.isShow == true)
{
float movementSpeed = 10f;
transform.position += transform.forward * Time.deltaTime * movementSpeed;
}
}
}
现在代码不起作用了,如果我去掉if语句,那么移动怪物的代码就起作用了。我还不断收到这个错误NullReferenceException:如果(MonsterShow.isShow==true)
请帮助我,我是Unity的初学者,这个问题困扰了我很多小时,我在谷歌上搜索了很多次,一次又一次地修改了我的代码,但就是无法解决这个问题,我感到焦虑,不知道该怎么办。
Start()方法中的find troll调用找不到troll,或者找不到它上面的EndCollider组件,导致它为null。由于您在启动时只搜索一次,所以它将始终为空。
这可能是因为你的巨魔还没有在场景开始时创建。
如果你的意图实际上是让怪物在玩家撞上对撞机时出现,你应该看看前言实例化。
http://docs.unity3d.com/Manual/InstantiatingPrefabs.html
因此,在你的OnTriggerEnter中,你可以简单地实例化一个全新的怪物:
public class EndCollider : MonoBehaviour {
public GameObject MonsterPrefab;
void OnTriggerEnter ()
{
Instantiate(MonsterPrefab);
}
}
在两个场景之间进行数据通信的一种更好的方法可能是使用PlayerPrefs:
//EndCollider.cs
public bool isShown
{
get { return PlayerPrefs.GetInt("IS_SHOWN")==1? true:false; }
set { PlayerPrefs.SetInt("IS_SHOWN", Convert.ToInt32(value));}
}
//SlowDownRun.cs
if(PlayerPrefs.GetInt("IS_SHOWN")==1) // isShown = true
{
...
}
- 将masterShow endcollider公开
- 清理你的启动方法
-
只需将巨魔对象从层次结构拖放到脚本即可。
公共类SlowDownRun:MonoBehavior{
公共EndCollider MonsterShow;
//将其用于初始化void开始(){
}
void Update(){if(MonsterShow.isShow==true){浮子移动速度=10f;transform.position+=transform.forward*Time.deltaTime*movementSpeed;}}
}