内容简介:在前面介绍了怎么样使用脚本来定时控制物体移动,接着下来我们来实现玩家控制物体移动的功能,意味着需要键盘里获取输入,然后再更新物体的位置。这种手法是非常见的,比如RPG游戏里,就是控制角色在移动,与这里介绍的原理是一样的。其实移动,就是改变三维世界里物体坐标的位置,由于三维世界是三个坐标表示,因此采用向量来计算,至于向量是什么,如果不懂,赶紧补习高数,查看空间解析几何部分。由此看来,游戏开发是一个培训数学应用的好项目,好方法。赶紧让你的小孩子来创建游戏,这样会逼着他们去学习数学的,就不会问学习数学有什么用了
在前面介绍了怎么样使用脚本来定时控制物体移动,接着下来我们来实现玩家控制物体移动的功能,意味着需要键盘里获取输入,然后再更新物体的位置。这种手法是非常见的,比如RPG游戏里,就是控制角色在移动,与这里介绍的原理是一样的。其实移动,就是改变三维世界里物体坐标的位置,由于三维世界是三个坐标表示,因此采用向量来计算,至于向量是什么,如果不懂,赶紧补习高数,查看空间解析几何部分。由此看来,游戏开发是一个培训数学应用的好项目,好方法。赶紧让你的小孩子来创建游戏,这样会逼着他们去学习数学的,就不会问学习数学有什么用了。
在unity里,使用类Vector3来表示空间的一个点,也是一个向量,因此它有三个坐标轴(x,y,z)。这三个坐标轴的方向如下:
详细可以查看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界面多一个属性设置,如下图:
修改这个地方,也可以改变物体运行的速度。在这里要注意一点,公共属性,没有设置隐藏的类成员变量都会在这里显示,在这里显示的变量,都是会序列化的。也就是说脚本里定义第一次的值,只起到拷贝到序列化的作用,后面要修改这个值的初始化值,要从这里来修改。如果要隐藏一个公共变量不在这里显示,可以使用别的方法来隐藏。
接着下来,我们要构造一个手动输入变量,以便可以通过输入来控制物体的移动。写下面这行代码:
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; } }
当你再次点下运行按钮,然后按下键盘的方向键,就可以控制物体向四个方向运动了,这就是游戏里的角色控制功能。
本课就到这里结束,现在可以愉快地玩这个物体移动了。
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)玩家控制角色移动》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- DeFi 玩家必备工具之 MetaMask 插件
- 解码无代码/低代码创业圈子及其玩家
- Python 工匠:做一个精通规则的玩家
- 高级玩家必备:深度剖析 MySQL 事务隔离!
- 蓄力十年,国内云桌面市场“头号玩家”养成记
- 如何在你的Python游戏中添加一个玩家
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入React技术栈
陈屹 / 人民邮电出版社 / 2016-11-1 / CNY 79.00
全面讲述React技术栈的第一本原创图书,pure render专栏主创倾力打造 覆盖React、Flux、Redux及可视化,帮助开发者在实践中深入理解技术和源码 前端组件化主流解决方案,一本书玩转React“全家桶” 本书讲解了非常多的内容,不仅介绍了面向普通用户的API、应用架构和周边工具,还深入介绍了底层实现。此外,本书非常重视实战,每一节都有实际的例子,细节丰富。我从这......一起来看看 《深入React技术栈》 这本书的介绍吧!