Unity3D制作一个会移动的方块(还不会移动照相机)

学习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.deltaTimeVector3.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上面,与模型进行绑定,这样此代码才会运行

 此时你再点击运行,然后按下↑↓←→键,你会发现,方块会移动和旋转了!

如何此文章里面有一些不对的地方,请各位大佬指教,谢谢!!!

猜你喜欢

转载自blog.csdn.net/SMG_DSG/article/details/131219639