• 使用Unity的Input.GetAxis(““)控制物体移动、旋转


    ​Input.GetAxis("") 是 Unity 引擎中的一个方法,用于获取游戏玩家在键盘或游戏手柄上输入的某个轴(Axis)的值。这里的 "" 是一个字符串参数,表示要获取的轴的名称。只要游戏运行Unity在后台就实时通过GetAxis这些定义好的方法帮你检测用户键盘、手柄、鼠标,你只需要用这个方法nput.GetAxis("") 调用就可以获取到用户输入​了那个键盘、点了那个键!

    为了区分是鼠标还是键盘、手柄等等,需要在这个方法里面天上​你要获取的交互键名字。

    在 Unity 中,有多种轴类型,如 "Horizontal"(水平轴)、"Vertical"(垂直轴)、"Mouse X"(鼠标水平滚轮轴)和 "Mouse Y"(鼠标垂直滚轮轴)等。这些轴的值可以用来控制游戏角色的移动、缩放或旋转等动作。这些数值都处于-1 到1 之间,你可以用代码:
     

    1. float INPUTaXIS = Input.GetAxis("Horizontal");
    2. Debug.Log(INPUTaXIS);

    来输出检测这个数值! 

    01 "Horizontal"

    以 "Horizontal" 为例,Input.GetAxis("Horizontal") 方法会返回一个值,表示玩家在水平方向上输入的值。如果玩家向左移动键盘或游戏手柄,该值将为负;如果玩家向右移动,该值将为正。

    该轴默认是由A、D以及方向键左右箭头来触发!

    02 "Vertical" 轴

    类似地,对于 "Vertical" 轴

    该轴默认是由W、S以及方向键上下箭头来触发!

    03 "Mouse X" 轴和 "Mouse Y" 轴

    返回的值分别表示玩家在垂直方向、鼠标水平滚轮和鼠标垂直滚轮上的输入。

    在代码中,我们可以将这些轴的值用于控制游戏角色的移动、旋转等动作。例如,在您提供的代码中,MoveHorizontalMoveVertical 变量分别存储了水平轴和垂直轴的值,用于控制角色在水平方向和垂直方向上的移动。

    示例代码:下面这个代码实现控制物体 移动和左右、上下旋转

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class ConRole : MonoBehaviour
    5. {
    6. // yong鼠标控制方向,用方向键控制移动
    7. // 设置角色的移动速度和旋转速度
    8. public float Movespeed = 15f;
    9. public float Rotatespeed = 10f;
    10. float RotationY;//用来累积存储用户每次移动鼠标得出的值
    11. float RotationX;//用来累积存储用户每次移动鼠标得出的值
    12. void Update()
    13. {
    14. // 【控制物体移动】获取水平方向和垂直方向的输入值
    15. float MoveHorizontal = Input.GetAxis("Horizontal");
    16. float MoveVertical = Input.GetAxis("Vertical");
    17. //全部存到一个向量里面
    18. Vector3 MoveDir = new Vector3(MoveHorizontal,0, MoveVertical);
    19. //上面这句不能保持物体朝自己的Z正方移动,因此用下面的语句
    20. transform.Translate(MoveDir * Movespeed * Time.deltaTime, Space.Self);
    21. //【控制物体旋转】
    22. // 获取鼠标的旋转输入值 ,Mouse X\ MouseY 是来源鼠标在水平方向的移动数值转换返回为-1 - 1 之间的数值
    23. float RotaY = Input.GetAxis("Mouse X");//鼠标水平移动返回-1 - + 1,这个数值将来用来给物体绕Y轴旋转
    24. float RotaX = Input.GetAxis("Mouse Y");//鼠标水平移动返回-1 - + 1,这个数值将来用来给物体绕X轴旋转
    25. //这是使用欧拉角的旋转方式,这种旋转有个缺陷就是,旋转一个轴没有问题!不能同时旋转2个及以上的轴。
    26. //transform.Rotate(new Vector3(RotaX * Rotatespeed,RotaY * Rotatespeed,0),Space.Self);
    27. //旋转2个及以上的轴,需要用四元数赋值给Retation
    28. RotationY += RotaY * Rotatespeed*Time.deltaTime;
    29. RotationX+= RotaX * Rotatespeed * Time.deltaTime;
    30. this.transform.rotation = Quaternion.Euler(RotationX, RotationY, 0);
    31. LimtRotatX();
    32. }
    33. void LimtRotatX()
    34. {//限制了上下旋转也就是围绕X轴旋转的最小角度和最大角度 !注意 -50 代表后仰旋转!60 度代表了!往前旋转!
    35. RotationX = Mathf.Clamp(RotationX,-50,60);
    36. }
    37. }

  • 相关阅读:
    C# list<T>去重
    TCP的三次握手与四次挥手
    RocketMQ源码阅读(六)CommitLog
    Flutter——最详细(Scaffold)使用教程
    LaneNet 论文阅读
    HashMap线程不安全问题以及解决方法
    ElasticSearch(一)【简介】
    第七节——Vue中定义组件状态驱动视图
    创新案例 | 本地生活服务数字化,高德品牌升级的增长战略
    聊聊 MQTT 和 WebSocket
  • 原文地址:https://blog.csdn.net/leoysq/article/details/132799736