Unity之C#学习笔记(2):键盘操控物体进行简单的移动 Simple Movement |
您所在的位置:网站首页 › unity3d车的移动代码 › Unity之C#学习笔记(2):键盘操控物体进行简单的移动 Simple Movement |
前篇链接:Unity之C#学习笔记(1):三种方式让你的脚本控制物体 在这一节,我们将实现用键盘操控一个物体进行上下左右的简单移动。 续接上节,我们创建了一个Player,一个PlayerController脚本。键盘操控物体移动,也就是当我们按下了特定的按键时,物体的position属性发生改变。我们先看如何让物体动起来。 最直接的方法是直接修改position的值。position是一个Vector3变量,我们就用上一帧的position在xyz三方向均+1作为新一帧的position。在Update函数中写 this.transform.position = new Vector3(transform.position.x + 1, transform.position.y + 1 , transform.position.z + 1);运行游戏,你会发现自己的小方块已经能以很快的速度上天了。这是因为Update函数在每一帧都会被调用一次,而你的游戏帧数可能是几百上千FPS。 Unity还为我们提供了一个函数transform.translate(): 和上例效果一模一样。 但是我们实际上不想让Player移动得那么快,我们希望的是每秒移动一个距离,而不是每秒移动帧数*距离。解决方法是利用Unity提供的一个只读变量:Time.deltaTime,每帧的完成时间(单位为秒)。如果你用控制台打印一下这个变量,你会发现它是一个0.0几甚至更小的数。既然我们改变不了Update函数每帧都被调用,我们可以修改每帧移动的距离为deltaTime倍,就能实现同样的效果。 this.transform.Translate(new Vector3(1 * Time.deltaTime, 1 * Time.deltaTime , 1 * Time.deltaTime));现在我们的立方体可以优雅地上天移动了。 解决了移动,接下来我们看如何用键盘操控。 我们知道,一个二维平面上任意方向的移动,都可以被分解为横纵(XY)两个方向的组合。在Unity中,这两个方向被称为“Horizontal”,水平,和“Vertical”,垂直。在Edit → Project Settings的Input栏,我们可以看到它们。 所以,我们只要把刚才代码中1的位置,换成Input的值就可以了。获取Input的方法是Input.GetAxis(String AxisName)函数,AxisName就是轴的名称,也就是Horizontal和Vertical。为了能控制移动的速度,我们再额外乘一个可调的变量speed。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { [SerializeField] private float _speed; void Update() { float horizontalInput = Input.GetAxis("Horizontal"); float verticalInput = Input.GetAxis("Vertical"); this.transform.Translate(new Vector3(horizontalInput * _speed * Time.deltaTime , verticalInput * _speed * Time.deltaTime, 0)); } }Tips:private和protected变量在Inspector面板上是不可见的,但[SerializeField] 可以让接下来一行声明的变量强制显示出来。如果我们有一些应该是private型的变量,但在开发过程中又希望能显示在面板上便于调整,则可以使用这个方法。 我们在面板上把speed调到合适的大小,大概5左右。现在物体就可以在键盘wasd的控制下正常地移动了。 在下一节,我们通过一个"吃掉"道具的例子来看如何处理基本的碰撞事件。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |