首页 > 解决方案 > 对象设置为活动但提醒未活动

问题描述

我试图解决一个问题。我正在做一个VR游戏。我设置了一个不可见的对撞机作为从控制器上的手部虚拟形象切换到游戏中其他东西的触发器。问题是触发器正在被识别,但将其设置为活动状态是行不通的。我会很感激任何提示

我试图在更新方法和触发方法中切换对象。以前在更新方法中,它没有从触发器传递数据。但是,如果我在触发器中有它,则可以识别布尔值,但不会将对象设置为活动状态。

public GameObject leftHand;
    public GameObject leftHandOnChest;
    public bool cprColliderLeft = false;

    void Start()
    {
        leftHandOnChest.SetActive(false);
        leftHand.SetActive(true);
    }
    void Update()
    {

    }

    private void OnTriggerEnter(Collider collider)
    {
        if (collider.tag == "CPRStart")
        {

            cprColliderLeft = true;

            if(cprColliderLeft == true)
            {
                leftHandOnChest.SetActive(true);
                leftHand.SetActive(false);
            }
        }
    }

    private void OnTriggerStay(Collider collider)
    {
        if (collider.tag == "CPRStart")
        {
            cprColliderLeft = true;

            if (cprColliderLeft == true)
            {
                leftHandOnChest.SetActive(true);
                leftHand.SetActive(false);
            }

        }
    }

    private void OnTriggerExit(Collider collider)
    {
        cprColliderLeft = false;
        if(cprColliderLeft == false)
        {
            leftHandOnChest.SetActive(false);
            leftHand.SetActive(true);
        }
    }

我的目标是将一个对象从活动状态切换到另一个对象。所以一个会从现场消失,另一个会出现。谢谢你的帮助

标签: c#unity3d

解决方案


我建议这个简化的代码:

public GameObject leftHand;
public GameObject leftHandOnChest;

void Start()
{
    leftHandOnChest.SetActive(false);
    leftHand.SetActive(true);
}

private void OnTriggerEnter(Collider collider)
{
    if (collider.compareTag ("CPRStart"))
    {
        leftHandOnChest.SetActive(true);
        leftHand.SetActive(false); 
    }
}

private void OnTriggerExit(Collider collider)
{
    if (collider.compareTag ("CPRStart"))
    {
        leftHandOnChest.SetActive(false);
        leftHand.SetActive(true);
    }
}

但我想你的问题可能是一些进入/退出连锁反应。我猜标签“CPRStart”在 leftHand - 所以当你输入时,你禁用它 - 这会导致exit被调用。

因此我建议只禁用渲染器:

public GameObject leftHand;
public GameObject leftHandOnChest;
private MeshRenderer hand_renderer;

void Start()
{
    leftHandOnChest.SetActive(false);
    leftHand.SetActive(true);
    hand_renderer = leftHand.getComponent <MeshRenderer> ();
}

private void OnTriggerEnter(Collider collider)
{
    if (collider.compareTag ("CPRStart"))
    {
        leftHandOnChest.SetActive(true);
        hand_renderer.enabled = false;
    }
}

private void OnTriggerExit(Collider collider)
{
    if (collider.compareTag ("CPRStart"))
    {
        leftHandOnChest.SetActive(false);
        hand_renderer.enabled = true;
    }
}

推荐阅读