C# 对象设置为活动,但提示为非活动
我想解决一个问题。我正在做一个虚拟现实游戏。我将一个隐形对撞机设置为一个触发器,用于从控制器上的手化身切换到游戏中的其他角色。问题是触发器正在被识别,但将其设置为活动状态并不起作用。如果有任何提示,我将不胜感激 我尝试在update方法和on-trigger方法中切换对象。以前在update方法中,它没有在触发器上传递来自的数据。但是如果我在触发器中有它,bool会被识别,但不会将对象设置为活动状态C# 对象设置为活动,但提示为非活动,c#,unity3d,C#,Unity3d,我想解决一个问题。我正在做一个虚拟现实游戏。我将一个隐形对撞机设置为一个触发器,用于从控制器上的手化身切换到游戏中的其他角色。问题是触发器正在被识别,但将其设置为活动状态并不起作用。如果有任何提示,我将不胜感激 我尝试在update方法和on-trigger方法中切换对象。以前在update方法中,它没有在触发器上传递来自的数据。但是如果我在触发器中有它,bool会被识别,但不会将对象设置为活动状态 public GameObject leftHand; public GameObjec
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。我只依赖于进入和退出。胡乱猜测:当你在进入/停留中停用对象时,它将导致触发器退出(当它被停用时)。但是,退出将重新激活对象。