学习Unity3D这么久了,如果你还不会制作一个按下WASD就可以移动的方块的话,那么你的学习将没有一点成就感,我学习的时候,我决定先学习移动,这样我就会对Unity更加感兴趣,学习起来的动力会更为充足
先创建一个项目,名为move,如果你手头有一个随便乱用的项目,也可以。
准备阶段
先在场景中放置一个方块,作为要移动的方块,将摄像机的位置也放在如图的位置(也可以不修改摄像机的位置)
接下来在Assets文件夹中创建一个C#代码文件,名为“move.cs”
双击打开move.cs
添加以下代码
public float moveSpeed = 10f;
public float turnSpeed = 100f;
以上代码我们创建了一个共有浮点型变量,名为“moveSpeed”用来存放移动时要移动多少的量,还有一个共有浮点型变量,名为“turnSpeed”用来存放旋转时要旋转多少的量。
注:f是一个Unity规定要加的字符,如果是整数可以不加(int),其他必须要加,因为我们这里用的是float定义的,所以要加
float、double要加
int、long long不用加
比如
//以下是不用加 f 的
public int moveSpeed = 10;
public int turnSpeed = 100;
public long long moveSpeed = 10;
public long long turnSpeed = 100;
//以下是要加 f 的
public float moveSpeed = 10f;
public float moveSpeed = 100f;
public double moveSpeed = 10f;
public double moveSpeed = 100f;
其实f在Unity里面翻译过来就是N(牛)的意思
N:一个物理量
就是力的大小的单位,全称 牛顿 。 为了纪念注明的物理学家牛顿,用他的名字作为力的单位。 比如你托住两个鸡蛋,用的力大约为1牛。 一个1千克(两斤)的物体,地球对它的吸引力大约为10牛。
接下来在添加一些键盘监听来完善键盘按键的操作
if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
这里我们用了Input.GetKey(KeyCode.要监听的键盘按键),此函数会返回一个布尔值,如何键盘按下,就为真(true),否则释放就会返回假(false)
transform.Translate()这是一个移动函数
transform.Rotate()这是一个旋转函数
注:Vector3.forward * moveSpeed * Time.deltaTime和Vector3.up, turnSpeed * Time.deltaTime这些都是用来优化的代码,因为显卡在画画的时候,每一帧不一定都会按时画完,如何没有按时画完,那么移动的实体就会出现闪现的动作,移动不是很丝滑。
好了我们看一下整体代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class debug : MonoBehaviour
{
public float moveSpeed = 10f;
public float turnSpeed = 100f;
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
}
}
由于我们的按键是要一直监听的,所以要放在Update函数里面,这样就会在程序绘画每一帧的时候调用,这要就可以做到一直调用
好了,把代码保存一下,然后将其拖到Cube上面,与模型进行绑定,这样此代码才会运行
此时你再点击运行,然后按下↑↓←→键,你会发现,方块会移动和旋转了!
如何此文章里面有一些不对的地方,请各位大佬指教,谢谢!!!