我在场景中有一个刚体GameObject,它通过枚举标记来改变它的物理状态
public enum ObjState
{
IgnorePC,
DontIgnorePC
}
public ObjState m_objState;通过这个标志和switch语句,我试图让这个gameObject在需要的时候发生冲突或不冲突。
private void FixedUpdate()
{
switch (m_objState)
{
case ObjState.IgnorePC:
IgnorePC();
break;
case ObjState.DontIgnorePC:
StopIgnoringPC();
break;
}
}
public void IgnorePC()
{
Collider IO = GetComponent<Collider>();
CharacterController PC = m_PC.GetComponent<CharacterController>();
Physics.IgnoreCollision(IO, PC, true);
}
public void StopIgnoringPC()
{
Collider IO = GetComponent<Collider>();
CharacterController PC = m_PC.GetComponent<CharacterController>();
Physics.IgnoreCollision(IO, PC, false);
}然而,我遇到了不一致的情况。特别是,当我手动关闭isKinematic并尝试使用IgnoreCollision()通过PC时,我认为我误解了这个函数的用法。
我试图保持这个刚体非运动学的同时忽略碰撞的原因是,有时当我想要移动这个物体时,我仍然希望它通过PC。这里我的方法出了什么问题?
发布于 2018-02-23 20:59:26
您正在尝试将CharacterController类型参数传递给Physics.IgnoreCollision方法的Collider类型参数。
要解决问题,请执行以下操作:
Collider,并将您的代码保存到CharacterController中:public enum ObjState { IgnorePC, DontIgnorePC }
public ObjState m_objState;
public GameObject m_PC;
Collider IO, PC;
private void Awake() {
IO = GetComponent<Collider>();
}
private void Start() {
PC = m_PC.GetComponent<Collider>();
}
private void FixedUpdate() {
switch (m_objState) {
case ObjState.IgnorePC:
IgnorePC();
break;
case ObjState.DontIgnorePC:
StopIgnoringPC();
break;
}
}
public void IgnorePC() {
Physics.IgnoreCollision(IO, PC, true);
}
public void StopIgnoringPC() {
Physics.IgnoreCollision(IO, PC, false);
}发布于 2018-02-24 09:02:14
我认为在Unity 5.6上刚体之间的IgnoreCollisions被破坏了。
https://stackoverflow.com/questions/48947856
复制相似问题