2015-02-11 75 views
-1

嗨,大家好,我有與該代碼的問題:團結3D的跳高運動員,

using UnityEngine; 
using UnitySampleAssets.CrossPlatformInput; 

namespace CompleteProject 
{ 
    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. 
#if !MOBILE_INPUT 
     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. 
#endif 

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

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


     void FixedUpdate() 
     { 
      // Store the input axes. 
      float h = CrossPlatformInputManager.GetAxisRaw("Horizontal"); 
      float v = CrossPlatformInputManager.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); 
     } 


     void Turning() 
     { 
#if !MOBILE_INPUT 
      // Create a ray from the mouse cursor on screen in the direction of the camera. 
      Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition); 

      // Create a RaycastHit variable to store information about what was hit by the ray. 
      RaycastHit floorHit; 

      // Perform the raycast and if it hits something on the floor layer... 
      if(Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)) 
      { 
       // Create a vector from the player to the point on the floor the raycast from the mouse hit. 
       Vector3 playerToMouse = floorHit.point - transform.position; 

       // Ensure the vector is entirely along the floor plane. 
       playerToMouse.y = 0f; 

       // Create a quaternion (rotation) based on looking down the vector from the player to the mouse. 
       Quaternion newRotatation = Quaternion.LookRotation (playerToMouse); 

       // Set the player's rotation to this new rotation. 
       playerRigidbody.MoveRotation (newRotatation); 
      } 
#else 

      Vector3 turnDir = new Vector3(CrossPlatformInputManager.GetAxisRaw("Mouse X") , 0f , CrossPlatformInputManager.GetAxisRaw("Mouse Y")); 

      if (turnDir != Vector3.zero) 
      { 
       // Create a vector from the player to the point on the floor the raycast from the mouse hit. 
       Vector3 playerToMouse = (transform.position + turnDir) - transform.position; 

       // Ensure the vector is entirely along the floor plane. 
       playerToMouse.y = 0f; 

       // Create a quaternion (rotation) based on looking down the vector from the player to the mouse. 
       Quaternion newRotatation = Quaternion.LookRotation(playerToMouse); 

       // Set the player's rotation to this new rotation. 
       playerRigidbody.MoveRotation(newRotatation); 
      } 
#endif 
     } 


     void Animating (float h, float v) 
     { 
      // Create a boolean that is true if either of the input axes is non-zero. 
      bool walking = h != 0f || v != 0f; 

      // Tell the animator whether or not the player is walking. 
      anim.SetBool ("IsWalking", walking); 
     } 
    } 
} 

我已經嘗試了很多方法,但不幸的是他們沒有工作,我需要我的球員能跳了,甚至做雙跳。我無法弄清楚如何炸掉它。 我要感謝那些會幫助我的人。

+0

我認爲需要更多背景。這是一個自上而下的觀點3D遊戲?控件是否沿着X和Y軸移動播放器,並且您希望該字符在Z軸上跳躍? – Leo 2015-02-11 11:49:24

+0

是的男人,不是一個非常3D的遊戲,而是一個3D視圖。我需要玩家qhen我按Z軸上的空間跳躍,你能幫我做到這一點嗎? @ user2215331 – 2015-02-11 11:57:45

回答

0

您需要使用剛體的AddForce功能:http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

如例子中,使用Vector3.Up乘以你的跳躍的力量。

您可以將此代碼包含在FidexUpdate函數中。如果跳轉鍵已關閉(http://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html),則將AddForce添加到播放器。

+0

是的,但我可以添加代碼?你可以幫助我?謝謝 – 2015-02-11 12:17:46

+0

我現在已經看到,玩家只能在x軸和z上移動,例如,如果在y 10時寫入,玩家就在空中。 Bui我需要這樣做,我按下跳y軸 – 2015-02-11 12:21:53

+0

我已經嘗試的代碼,但與vector3.up玩家不做任何事情。我試圖寫Rigidbody.AddForce(Vector3.up * 10);和playerRigidbody.AddForce(Vector3.up * 10);但不再工作,但是當我按下空格按鈕時,如果工作正確,因爲打印「空格鍵被按下」。 @ user2215331 – 2015-02-11 23:04:05