【问题标题】:Need helping getting a character controller to jump需要帮助让角色控制器跳跃
【发布时间】:2019-05-13 05:41:51
【问题描述】:

到目前为止,我有一个角色控制器,可以让我四处移动、冲刺和蹲下(无动画),但我无法让控制器跳跃。我知道 100% 的角色正在获得跳跃的输入,并且运动矢量在 Y 轴上约为 40,因此玩家应该在移动。问题是,什么也没有发生。玩家仍然可以四处移动,并且可以掉落壁架,但是当我按下空格键时什么也没有发生 这是我的代码:

 using UnityEngine;

 public class KeyboardMovement : MonoBehaviour
 {
     private CharacterController controller;
     public float walkSpeed;
     public float sprintSpeed;
     public float crouchSpeed;
     public float jumpHeight;
     Vector3 up = Vector3.zero;
     Vector3 movement = Vector3.zero;
     Vector3 forward = Vector3.zero;
     Vector3 sideways = Vector3.zero;
     void Start()
     {
         controller = GetComponent<CharacterController>();
     }


     void Update()
     {
         float speed = walkSpeed;
         //If crouching, set speed to crouch speed. This ovverides sprinting
         if (SingletonSettings.GetKey(SingletonSettings.Keybindings.crouch))
             speed = crouchSpeed;
         //Else if sprinting, set speed to sprint speed
         else if (SingletonSettings.GetKey(SingletonSettings.Keybindings.sprint))
             speed = sprintSpeed;

         //Create vectors for movement
         forward = transform.TransformDirection(Vector3.forward) * Input.GetAxis("Vertical");
         sideways = transform.TransformDirection(Vector3.right) * Input.GetAxis("Horizontal");
         //up = SingletonSettings.GetKey(SingletonSettings.Keybindings.jump) && controller.isGrounded ? Vector3.up * jumpHeight : Vector3.zero;
         movement = (up * 100) + ((forward + sideways) * 10 * Time.deltaTime * speed);

         //Combine vectors and Multiply by DeltaTime to ensure smooth movement at different framerates.
         //Also multiply by 10*speed to ensure correct speed in different states
          if (controller.isGrounded && Input.GetKey(KeyCode.Space))
         {
             movement.y = jumpHeight*50 * Time.deltaTime;
         }
         controller.SimpleMove(movement);
     }
     void OnGUI()
     {
         GUILayout.Label('\n' + Newtonsoft.Json.JsonConvert.SerializeObject(movement.y, Newtonsoft.Json.Formatting.Indented, new Newtonsoft.Json.JsonSerializerSettings
         {
             ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
         }));
     }
 }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    CharacterController.SimpleMove 来自文档

    快速移动角色。

    忽略沿 y 轴的速度

    重力是自动应用的。

    https://docs.unity3d.com/ScriptReference/CharacterController.SimpleMove.html


    你应该使用CharacterController.Move

    采用绝对移动增量的更复杂的移动函数。

    尝试通过运动来移动控制器,运动只会受到碰撞的约束。它会沿着对撞机滑动

    ...

    此功能不应用任何重力。

    https://docs.unity3d.com/ScriptReference/CharacterController.Move.html

    使用此方法,您需要自己应用重力

    movement.y -= gravity * Time.deltaTime;
    
    controller.Move(movement * Time.deltaTime);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多