Unity获取在不同脚本

时间:2017-01-08 00:02:17

标签: c# unity3d unity5

我的玩家对象有4个子对象,称为Pawn 1到4.当我点击其中一个时,它变为 selected 。当选择Pawn时,它应该发光。现在,麻烦的是,为了使发光正常发生,每个Pawn必须知道它是否在此刻被选中。我通过附上

来做到这一点
public class PlayerController : MonoBehaviour {
    public GameObject selectedObject;
}

到Player对象,以及每个Pawn对象的脚本,其中包括这个

void Update()
{
    if (transform.parent.gameObject.GetComponent<PlayerController>().selectedObject == 
        gameObject)
    {
        Glow();
    }
}

我不得不认为必须有更好的方法来做到这一点,因为在每个Pawn上对每个玩家执行一个GetComponent,对于每个玩家来说似乎都非常浪费。

有没有办法在Start()中获得对 selectedObject 的引用,所以它会不断更新,而不是一直手动获取它?

2 个答案:

答案 0 :(得分:2)

  

有没有办法在Start()中获取对selectedObject的引用,所以   它不断得到更新,而不是一直手动获取它?

在“开始”功能中缓存PlayerController

private PlayerController playerController;

void Start()
{
    playerController = transform.parent.gameObject.GetComponent<PlayerController>();
}

void Update()
{
    if (playerController.selectedObject ==
        gameObject)
    {
        Glow();
    }
}

答案 1 :(得分:0)

为什么不让Pawn处理点击互动并存储它是否被选中?然后你会有类似的东西:

if(IsSelected)
    Glow();