2015-02-11 74 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