游戏制作之路(5)玩家控制角色移动

在前面介绍了怎么样使用脚本来定时控制物体移动,接着下来我们来实现玩家控制物体移动的功能,意味着需要键盘里获取输入,然后再更新物体的位置。这种手法是非常见的,比如RPG游戏里,就是控制角色在移动,与这里介绍的原理是一样的。其实移动,就是改变三维世界里物体坐标的位置,由于三维世界是三个坐标表示,因此采用向量来计算,至于向量是什么,如果不懂,赶紧补习高数,查看空间解析几何部分。由此看来,游戏开发是一个培训数学应用的好项目,好方法。赶紧让你的小孩子来创建游戏,这样会逼着他们去学习数学的,就不会问学习数学有什么用了。
在unity里,使用类Vector3来表示空间的一个点,也是一个向量,因此它有三个坐标轴(x,y,z)。这三个坐标轴的方向如下:

游戏制作之路(5)玩家控制角色移动_第1张图片

详细可以查看unity的文档: https://docs.unity3d.com/ScriptReference/Vector3.html

       // x = 0,y = 1, z = 0
        Vector3.up;         //  表示世界坐标系中 Y 轴正方向上的单位向量
        // x = 0,y = -1, z = 0
        Vector3.down;       //  表示世界坐标系中 Y 轴负方向上的单位向量
        // x = -1,y = 0, z = 0
        Vector3.left;       //  表示世界坐标系中 X 轴负方向上的单位向量
        // x = 1,y = 0, z = 0
        Vector3.right;      //  表示世界坐标系中 X 轴正方向上的单位向量
        // x = 0,y = 0, z = 1
        Vector3.forward;    //  表示世界坐标系中 Z 轴正方向上的单位向量
        // x = 0,y = 0, z = -1
        Vector3.back;       //  表示世界坐标系中 Z 轴负方向上的单位向量

        Vector3.zero;       //  表示原点

在前面的项目里,你测试时,如果发现它运行太慢,怎么办呢?这时就需要给它一个变量,这变量用来改变它的速度。在代码里添加一个变量如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BasicMovement : MonoBehaviour {

    public float speed = 10.0f;

    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        transform.position += Vector3.right * Time.deltaTime;
    }
}

可以看到这行代码:

public float speed = 10.0f;

这行代码使用公共访问public,数据类型为浮点数float,变量名称为speed,它的初始速度为10.0f。当你在代码写完这个变量,如果没有出错,会在inspector界面多一个属性设置,如下图:

游戏制作之路(5)玩家控制角色移动_第2张图片

修改这个地方,也可以改变物体运行的速度。在这里要注意一点,公共属性,没有设置隐藏的类成员变量都会在这里显示,在这里显示的变量,都是会序列化的。也就是说脚本里定义第一次的值,只起到拷贝到序列化的作用,后面要修改这个值的初始化值,要从这里来修改。如果要隐藏一个公共变量不在这里显示,可以使用别的方法来隐藏。

接着下来,我们要构造一个手动输入变量,以便可以通过输入来控制物体的移动。写下面这行代码:

Vector3 input = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));

在这行代码里,可以看到使用Input对象,它代表里unity里所有输入交互接口,比如鼠标、键盘、游戏手柄、手机触屏等等,在这里使用函数GetAxisRaw("Horizontal")来获取水平方向移动,GetAxisRaw("Vertical")获取垂直方向移动,相当于键盘的WASD,或者方向键的四个方向。由于input当按下时,就会构造一个三维向量,根据这个三维向量的值,就可以随着时间判断运行方向了。

这时完整的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BasicMovement : MonoBehaviour {

    public float speed = 10.0f;

    // Use this for initialization
    void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        Vector3 input = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += input * speed * Time.deltaTime;
    }
}

当你再次点下运行按钮,然后按下键盘的方向键,就可以控制物体向四个方向运动了,这就是游戏里的角色控制功能。

游戏制作之路(5)玩家控制角色移动_第3张图片

本课就到这里结束,现在可以愉快地玩这个物体移动了。

Visual Studio 2015开发C++程序的基本使用 
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672

你可能感兴趣的:(6.游戏引擎开发)