我遇到各种不同情况下的碰撞问题。我会提到他们每个人并等待你的帮助。
案例1:
我有一个移动的对象,附加了characterController并在此插件中移动:http://u3d.as/content/hedgehog-team/...ck-buttons/2Uo
characterController碰撞的对象是附有框架碰撞器的刚体。大多数时候,碰撞与天然碰撞效果完美地结合,例如板条箱的掉落等,并且具有刚体和箱式对撞机的物体的OnCollisionEnter被称为没有任何问题。但有时,这会停止。没有掉落的物体没有碰撞,也没有调用OnCollisionEnter。
我尝试在谷歌上进行调试和搜索但没有任何帮助发现。
案例2:
我有一个移动的对象,附加了characterController并使用“SimpleMove”函数移动。
在这种情况下,没有任何碰撞发生,没有掉落,没有自然效果,也没有在附有刚体和箱式对撞机的物体上调用OnCollisionEnter。
请帮助解决这个错误,我一直试图解决这些问题4天但没有运气,最后我发布在这里。会等你的回复。
感谢。祝你有美好的一天!
答案 0 :(得分:1)
CharacterController是否有一个附加了'isKinematic'的RigidBody?
答案 1 :(得分:0)
将此脚本添加到您的对象:
#pragma strict
var layerMask : LayerMask; //make sure we aren't in this layer
var skinWidth : float = 0.1; //probably doesn't need to be changed
private var minimumExtent : float;
private var partialExtent : float;
private var sqrMinimumExtent : float;
private var previousPosition : Vector3;
private var myRigidbody : Rigidbody;
//initialize values
function Awake() {
myRigidbody = rigidbody;
previousPosition = myRigidbody.position;
minimumExtent = Mathf.Min(Mathf.Min(collider.bounds.extents.x, collider.bounds.extents.y), collider.bounds.extents.z);
partialExtent = minimumExtent*(1.0 - skinWidth);
sqrMinimumExtent = minimumExtent*minimumExtent;
}
function FixedUpdate() {
//have we moved more than our minimum extent?
var movementThisStep : Vector3 = myRigidbody.position - previousPosition;
var movementSqrMagnitude : float = movementThisStep.sqrMagnitude;
if (movementSqrMagnitude > sqrMinimumExtent) {
var movementMagnitude : float = Mathf.Sqrt(movementSqrMagnitude);
var hitInfo : RaycastHit;
//check for obstructions we might have missed
if (Physics.Raycast(previousPosition, movementThisStep, hitInfo, movementMagnitude, layerMask.value))
myRigidbody.position = hitInfo.point - (movementThisStep/movementMagnitude)*partialExtent;
}
previousPosition = myRigidbody.position;
}
不要忘记指定要检测的图层。
祝你好运!