2015-02-11 5 views
-1

Привет, ребята у меня есть проблемы с этим кодом:Unity 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

+0

Да, человек, это не очень 3D-игра, но вид в 3d. Мне нужен игрок qhen, я нажимаю пробел на оси Z, может ли помочь мне это сделать? @ user2215331 –

ответ

0

Вы должны использовать функцию AddForce Rigidbody в: http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

Как и в примере, используйте Vector3.Up умноженной силой прыжка.

Этот код можно включить в функции FidexUpdate. Если клавиша перехода отключена (http://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html), то AddForce на плеер.

+0

да, но где я могу добавить код? Вы можете мне помочь? Спасибо –

+0

Теперь я вижу, что игрок перемещается только по оси x и z, если, например, писать на y 10, игрок находится в воздухе. Bui мне нужно это сделать, я нажимаю прыжок оси y –

+0

Я попробовал код, но с vector3.up игрок ничего не делает. Я пытаюсь написать Rigidbody.AddForce (Vector3.up * 10); и playerRigidbody.AddForce (Vector3.up * 10); но не работают снова, но когда я нажимаю кнопку пробела, if работает правильно, потому что была нажата клавиша «пробел» печати. @ user2215331 –

Смежные вопросы