0

Playmaker で Character Controller を使用すると、プレイヤーが地面の下に落ちるという問題があります。カプセル コライダーとリジッド ボディを使用すると、プレーヤーの動きは良好ですが、位置と回転が固定されていると、壁との衝突は発生しません。x と z のフリーズ位置のチェックを外すと、プレーヤーは z 方向にスライドしますが (空間が自己に設定されていることを意味します)、壁に衝突します。

Playmaker では移動に変換を使用し、x と y を 0、z を 10 と -10 として forward と Backward という名前の独自の Vector3 変数を使用しています。

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 に答える