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的初学者,这个问题困扰了我很多小时,我在谷歌上搜索了很多次,一次又一次地修改了我的代码,但就是无法解决这个问题,我感到焦虑,不知道该怎么办。

Unity3D中另一个脚本的布尔值

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;}}

    }