0

我遇到一个问题,当使用带有 Playmaker 的角色控制器时,我的播放器掉到了地面以下。当使用胶囊碰撞器和刚体时,我的玩家移动良好,但当它的位置和旋转被冻结时,我没有与墙壁发生任何碰撞。当我取消选中 x 和 z 冻结位置时,我的玩家正在向其 z 方向滑动(意味着空间设置为自身)但与墙壁发生碰撞。

在 Playmaker 中,我使用 translate 进行移动,并使用我自己的 Vector3 变量命名为 forward 和 backward ,其中 x 和 y 为零,z 为 10 和 -10。

4

1 回答 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;
}
于 2014-10-12T22:29:09.687 回答