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

栏目: 后端 · 发布时间: 5年前

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

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

在unity里,使用类Vector3来表示空间的一个点,也是一个向量,因此它有三个坐标轴(x,y,z)。这三个坐标轴的方向如下:

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

详细可以查看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)玩家控制角色移动

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

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

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)玩家控制角色移动

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

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

以上所述就是小编给大家介绍的《游戏制作之路(5)玩家控制角色移动》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

修改代码的艺术

修改代码的艺术

Michael Feathers / 刘未鹏 / 人民邮电出版社 / 2007-09-25 / 59.00元

我们都知道,即使是最训练有素的开发团队,也不能保证始终编写出清晰高效的代码。如果不积极地修改、挽救,随着时间流逝,所有软件都会不可避免地渐渐变得复杂、难以理解,最终腐化、变质。因此,理解并修改已经编写好的代码,是每一位程序员每天都要面对的工作,也是开发程序新特性的基础。然而,与开发新代码相比,修改代码更加令人生畏,而且长期以来缺乏文献和资料可供参考。 本书是继《重构》和《重构与模式》之后探讨......一起来看看 《修改代码的艺术》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具