2015-11-04 51 views
0

如下面的視頻鏈接所示,玩家正在相對於全局座標軸移動,因此它有一些惱人的效果。使用剛體統一移動角色相對於他們的位置

我想讓角色在本地軸上移動,這樣當他向後走,側身等時應用動畫會更容易。我該怎麼做?

這裏的鏈接到發生了什麼事的視頻: Link

而且,這裏是我的遊戲人物動作腳本代碼:

using UnityEngine; 

public class PlayerMovement : MonoBehaviour 
{ 
    public float speed = 6f;   // The speed that the player will move at. 
    Vector3 movement;     // The vector to store the direction of the player's movement. 
    Animator anim;      // Reference to the animator component. 
    Rigidbody playerRigidbody;   // Reference to the player's rigidbody. 
    int floorMask;      // A layer mask so that a ray can be cast just at gameobjects on the floor layer. 
    float camRayLength = 100f;   // The length of the ray from the camera into the scene. 

void Awake() 
{ 
    // Create a layer mask for the floor layer. 
    floorMask = LayerMask.GetMask ("Floor"); 

    // Set up references. 
    anim = GetComponent <Animator>(); 
    playerRigidbody = GetComponent <Rigidbody>(); 
} 


void FixedUpdate() 
{ 
    // Store the input axes. 
    float h = Input.GetAxisRaw ("Horizontal"); 
    float v = Input.GetAxisRaw ("Vertical"); 

    // Move the player around the scene. 
    Move (h, v); 

    // Turn the player to face the mouse cursor. 
    Turning(); 

    // Animate the player. 
    Animating (h, v); 
} 

void Move (float h, float v) 
{ 
    // Set the movement vector based on the axis input. 
    movement.Set (h, 0f, v); 

    // Normalise the movement vector and make it proportional to the speed per second. 
    movement = movement.normalized * speed * Time.deltaTime; 

    // Move the player to it's current position plus the movement. 
    playerRigidbody.MovePosition (transform.position + movement); 
} 

讓我知道你需要什麼。

回答

0

無論何時使用變換成員:position,rotation和lossyScale,您都在使用世界空間。

如果您希望使用本地空間/模型空間:您應改爲使用localPosition,localRotation和localScale。

不幸的是剛體沒有移動本地位置功能。 請嘗試以下行來手動更新位置:

transform.localPosition+=movement;