我目前正在学习Unity的基础知识,像往常一样,当人们在学习新东西时,我有点受阻。
有一个下降的多维数据集与某物体碰撞时被设置为不活动状态。我打算制作一个父脚本,以检查多维数据集是否处于活动状态。当它处于非活动状态时,它将在控制台中输出布尔值eActive
的状态。
但是,只要下降的多维数据集与某些东西发生碰撞,它就会消失,但是布尔值的输出仍然为真。
两个脚本:
Enemy.cs
using UnityEngine;
public class Enemy : MonoBehaviour {
GameObject enemy;
// Use this for initialization
void Start ()
{
enemy = GameObject.Find("Enemy");
enemy.SetActive(true);
}
public void OnCollisionEnter(Collision collision)
{
enemy.SetActive(false);
}
}
EnemySpawn.cs
using UnityEngine;
public class EnemySpawn : MonoBehaviour {
GameObject enemy;
public bool eActive ;
// Use this for initialization
void Start ()
{
enemy = GameObject.FindWithTag("Enemy");
eActive = enemy.activeInHierarchy;
Debug.Log(eActive);
}
// Update is called once per frame
void Update ()
{
Destroyed();
}
void Destroyed()
{
if (!eActive)
{
Debug.Log(eActive);
}
}
}
很想听听我做错了什么,如果有更好的方法可以在Unity中做这些事情!
非常感谢:)
答案 0 :(得分:0)
您的代码中有两个问题
1-)您为size()
中的eActive
分配了一个值,并且在禁用对象时从不更新它。因此永远都是正确的,因为它永远不会更新。
2-)使用Start
代替GameObject.activeSelf
,因为您只是启用和禁用了该对象,并且该对象没有父母!。另外,您不需要布尔变量来保存activeInHierarchy
或关心更新它。 Unity只需使用它即可为您完成。
因此您的activeSelf
方法应如下所示:
Destroy
祝你好运!