C# 对象设置为活动,但提示为非活动

C# 对象设置为活动,但提示为非活动,c#,unity3d,C#,Unity3d,我想解决一个问题。我正在做一个虚拟现实游戏。我将一个隐形对撞机设置为一个触发器,用于从控制器上的手化身切换到游戏中的其他角色。问题是触发器正在被识别,但将其设置为活动状态并不起作用。如果有任何提示,我将不胜感激 我尝试在update方法和on-trigger方法中切换对象。以前在update方法中,它没有在触发器上传递来自的数据。但是如果我在触发器中有它,bool会被识别,但不会将对象设置为活动状态 public GameObject leftHand; public GameObjec

我想解决一个问题。我正在做一个虚拟现实游戏。我将一个隐形对撞机设置为一个触发器,用于从控制器上的手化身切换到游戏中的其他角色。问题是触发器正在被识别,但将其设置为活动状态并不起作用。如果有任何提示,我将不胜感激

我尝试在update方法和on-trigger方法中切换对象。以前在update方法中,它没有在触发器上传递来自的数据。但是如果我在触发器中有它,bool会被识别,但不会将对象设置为活动状态

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

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

我建议您使用以下简化代码:

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”在左手边-因此当您进入时,您将停用它-这将导致退出被调用

因此,我建议仅禁用渲染器:

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;
    }
}
公共游戏对象左手;
公共游戏对象leftHandOnChest;
私有网格渲染器;
void Start()
{
lefthandanchest.SetActive(false);
leftHand.SetActive(true);
hand_renderer=leftHand.getComponent();
}
专用无效对撞机(对撞机)
{
if(collider.compareTag(“CPRStart”))
{
lefthandanchest.SetActive(true);
hand_renderer.enabled=false;
}
}
私有void OnTriggerExit(碰撞器-碰撞器)
{
if(collider.compareTag(“CPRStart”))
{
lefthandanchest.SetActive(false);
hand_renderer.enabled=true;
}
}

您也应该在OnTriggerExit中使用相同的标记比较,您可能正在退出一些随机触发器,它会重置您的活动状态。我还可以推荐compareTag:)@KYL3R,尽管它应该被
OnTriggerStay
覆盖,但是设置bools和检查其状态后(
cprColliderLeft=false;if(cprColliderLeft==false)
)有什么意义?你不应该在阿拉斯需要这面旗帜,因为这是一个公共场所,他可以在检查员那里看到它的状态。但是支票当然没用。文档中说“OnTiggerStay被称为几乎所有的帧”(),所以我通常不使用OnTiggerStay。我只依赖于进入和退出。胡乱猜测:当你在进入/停留中停用对象时,它将导致触发器退出(当它被停用时)。但是,退出将重新激活对象。