Unity笔记-07

Unity笔记-07

了解虚拟轴及其属性

首先通过Unity栏目:Edit->Project Setting->搜索Input Manager可以查看Unity已经设置好的虚拟轴

在这里插入图片描述

Horizontal为例,首先Horizontal表示水平的意思,这只是这个虚拟轴名称,可以随意更改但是要记住因为在代码里会用到。Descriptive NameDescriptive Negative Name分别是正负操作的语言描述。说到这里必须要知道,每一个虚拟轴设置都是有正向和负向之分。在界面里可以看到,Negative表示负向,Positive表示正向。那么就很好理解了,Negative ButtonAlt Negative Button对应的就是负向的实际键盘对应键,二者都是设定具体按键的属性。以下都以负向为例子,正向同理。在上述栏目中,Alt Negative Button的值被设定为a,那么键盘上的a就是这个虚拟轴的负向按键,为了区别正向和负向,按钮有一个值。在按钮不按的时候它为0,按下负向按键,它会逐渐变为-1,变化速度由Sensitivity值决定,值越大,变化速度越快;当你松开此按键,它又会从-1逐渐变灰0,复原速度由Gravity值决定,值越大,变化速度越快。Type值表示你的虚拟轴来源于什么,当前选项为Key or Mouse Button意思是,这个虚拟轴绑定的具体按键可以来源于鼠标按键或者键盘按键,而Axis则表示轴向,当前选项为X axis,意思是水平轴向。
Snap正反按键都作用时,虚拟轴的值视为0 Invert正反按钮发送的值取反
Type输入设备类型

为了解释Axis,这里讲一下Mouse X这个虚拟轴

在这里插入图片描述

这里的Type选项为Mouse Movement,意思是虚拟轴来源为鼠标移动,那么此时的Axis选项为X axis表示水平方向,这里所有的Button都没有设定,因为鼠标移动不需要具体按键。当鼠标向右移动,值就会变为正值,最大为1,鼠标移动越快,数值越大,最大为1,向左同理。以此来表示鼠标的移动变化。

获取具体虚拟轴

代码:Input.GetButton("虚拟轴名称")

代码:Input.GetButtonDown("虚拟轴名称")

代码:Input.GetButtonUp("虚拟轴名称")

上述三种方法都可以通过虚拟轴名称来获取虚拟轴,但是他们只能判断虚拟轴绑定的按键是否被按下,无法判断正向和负向,这并不是我们想要的。这三种方法之间的区别请看《Unity笔记-06》,这里不再赘述。

代码:Input.GetAxis("虚拟轴名称")

代码:Input.GetAxisRaw("虚拟轴名称")

这两种方法获取虚拟轴,当你按下虚拟轴绑定的正向按键,他们会返回正值(最大为1,负值最大为0),按下负向按键会返回负值,区别在于:

第一种方法,在你按下正向按键的时候,它返回的值会从0变化到1,而非瞬间变成1

第二种方法,则是瞬间变化,按下正向按键则瞬间返回1

根据不同场景选择合适的方法

虚拟轴的应用

应用一:鼠标控制镜头朝向

 private void move()
    {
        x = Input.GetAxis("Mouse X");
        y = Input.GetAxis("Mouse Y");
        x *= speed;
        y *= speed;
        transform.Rotate(-y, 0, 0);//上下应该是自身坐标系
        transform.Rotate(0, x, 0, Space.World);//左右必须是世界坐标系,因为当你抬头或者低头时,自身的Y轴就以及变了
    }
    private void Update()
    {
        Cursor.lockState=CursorLockMode.Locked;
        move();
    }

鼠标控制镜头旋转:

通过Input.GetAxis("Mouse X")Input.GetAxis("Mouse Y")获得鼠标水平和垂直移动的变化值,通过乘以speed来控制灵敏度。

鼠标水平移动应该是的摄像头水平旋转,水平旋转应当绕Y轴旋转,而垂直移动是沿着X轴方向旋转,因此可以用以下代码

transform.Rotate(-y,x,0),由于GetAxis的正向值为向上移动,但是绕着X轴向上旋转需要负值,所以这里要用-y

但是在调试过程中很快发现这种代码会有问题,视角会随着鼠标移动导致不断颠倒。原因也很明显:这里的旋转都是以自身坐标系为基准的。分析可知,上下旋转应当以自身坐标系旋转,但是左右旋转应当以世界坐标系旋转,因为当你已经向上或者向下旋转后,Y轴的方向就不再是垂直了,而会变成斜向的,但是左右旋转应当是水平的。

因此拆分代码:

transform.Rotate(-y, 0, 0);
transform.Rotate(0, x, 0, Space.World);

另外:在调试中还会发现,鼠标会移除屏幕外,导致体验很差。

这里加入代码:

Cursor.lockState=CursorLockMode.Locked;

此代码可以将鼠标锁在窗口中央,另外: Cursor.lockState=CursorLockMode.Confined;可以将鼠标约束在窗口内部

如果需要隐藏鼠标,可以使用代码:Cursor.visible = false;

应用二:WASD控制物体上下左右移动

  private void MoveTest()
    {
        x = Input.GetAxis("Horizontal");//记录键盘的水平位移
        y = Input.GetAxis("Vertical");//记录键盘的垂直位移
        x *= speed*Time.deltaTime;
        y *= speed*Time.deltaTime;
        transform.Translate(x,0,y);
    }
    private void Update()
    {
        MoveTest();
    }

这个相对简单,这里不再多说。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当学习Unity3D时,以下是一些重要的笔记: 1. Unity3D基础知识: - 游戏对象(Game Objects)和组件(Components):了解游戏对象的层次结构和组件的作用。 - 场景(Scenes)和摄像机(Cameras):学会如何创建场景并设置摄像机视角。 - 材质(Materials)和纹理(Textures):掌握如何创建和应用材质和纹理。 - 动画(Animations):学习如何创建和控制游戏对象的动画。 2. 脚本编程: - C#语言基础:了解C#语言的基本语法和面向对象编程概念。 - Unity脚本编写:学习如何编写脚本来控制游戏对象的行为和交互。 - 常见组件和功能:掌握常见的Unity组件和功能,如碰撞器(Colliders)、刚体(Rigidbodies)、触发器(Triggers)等。 3. 游戏开发流程: - 设计游戏关卡:了解如何设计游戏场景和关卡,包括布局、道具、敌人等。 - 游戏逻辑实现:将游戏规则和玩家交互转化为代码实现。 - UI界面设计:学习如何设计游戏中的用户界面,包括菜单、计分板等。 - 游戏优化和调试:优化游戏性能,解决常见的错误和问题。 4. 学习资源: - Unity官方文档和教程:官方提供了大量的文档和教程,逐步引导你学习Unity3D。 - 在线教程和视频教程:网上有很多免费和付费的Unity教程和视频教程,可根据自己的需求选择学习。 - 社区论坛和博客:加入Unity开发者社区,与其他开发者交流并获取帮助。 通过系统地学习这些内容,你将能够掌握Unity3D的基础知识并开始开发自己的游戏项目。记得不断实践和尝试,不断提升自己的技能!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值