如何通过进入和退出触发器使程序使对象出现和消失?

时间:2019-03-31 06:55:40

标签: c# unity3d

我需要一个代码来使对象在进入触发对象时出现,并在退出触发对象时消失。

GameObject GhostApparition;
    // Use this for initialization
    void OnTriggerEnter (Collider other)
    {
        if (other.CompareTag("Player")) ;
        {
            //????
        }
    }

我希望对象在输入触发对象时出现,而在退出对象时消失。实际的网格也应该消失。

4 个答案:

答案 0 :(得分:0)

您可以像这样激活/停用游戏对象:

gameObjext.SetActive(true); //or false

通过激活/停用所有附加的组件,doc也将被启用/禁用。

答案 1 :(得分:0)

您可以使用以下方式操纵游戏对象的状态

 gameObject.SetActive(true);
 gameObject.SetActive(false);

您只需要在TriggerEnter和TriggerExit中调用它即可。我不知道您是否要使“ ghostapparition”处于非活动状态,但是它是:

GhostApparition.SetActive(true);
GhostApparition.SetActive(false);

答案 2 :(得分:0)

要解决此问题,只需执行以下操作:

GameObject GhostApparition;
    // Use this for initialization
    void OnTriggerEnter (Collider other)
    {
        if (other.tag == "Player") ;
        {
             GhostApparition.SetActive(true);
        }
    }

    void OnTriggerExit (Collider other)
    {
        if (other.tag == "Player") ;
        {
             GhostApparition.SetActive(false);
        }
    }

但是在使用包含行为的GameObjects进行操作时要注意。如果您停用它,然后再次激活,它将再次运行void重新启动并重置变量。有时候你不想要它。

因此,我建议在这种情况下,仅停用GameObject MeshRenderer组件。

答案 3 :(得分:0)

….monobehavior:

public GameObject object;

void Start()
{
    object.SetActive(false);
    object2.SetActive(false);
}

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Player")
    {
        {
           object.SetActive(true);
           object2.SetActive(false);
        }
    }
}

/// void OnTriggerStay and 'object2' are extras (for if u want a keycode to show an additional text)
void OnTriggerStay(Collider other)
{
    if (object.activeInHierarchy && Input.GetKeyUp(KeyCode.E))
    {
        object.SetActive(false);
        object2.SetActive(true);
    }
}

void OnTriggerExit(Collider other)
{
    object.SetActive(false);
    object2.SetActive(false);
}
...