【笨木头Unity】入门之旅007:Demo之四处找死(二)_主角移动和旋转

上一篇我们仅仅是创建了场景和主角,暂时不具备任何玩法。

这次,我们来看看怎么让主角移动起来。

笨木头花心贡献,啥?花心?不,是用心。

转载请注明,原文地址:http://www.benmutou.com/archives/2131

文章来源:笨木头与游戏开发

1.Update,又是Update

似乎游戏开发里总是无法离开Update,我现在的工作不是游戏开发,没法使用Update,导致我非常不习惯。

Update是什么?我们把游戏想象成一个大的while循环,每一次循环都会调用一次Update函数。

而我们就可以在Update函数里做一些乱七八糟的事情。

比如,每一次Update就让角色的x坐标+1,于是,很多次Update的调用连起来之后,角色就在移动了。

总而言之,Update是我们经常会用到了,很重要的东西,这里不多解释了。

2.别急,先给BugPlayer上色

因为BugPlayer现在是白色,不方便演示,我们就先来给它上色吧。

在【Project】创建右键,依次点击【Create】->【Material】,命名为PlayerMaterial。

这样就创建了一个材质,接着修改材质的颜色,然后把材质拖到BugPlayer身上,如:

由于我在录制Gif之前就已经把材质拖到BugPlayer身上了,所以这一步我就没演示了,和拖脚本是一毛一样的。

3.前后移动

OK,要开始移动了,跟紧了。

打开BugPlayerLogic脚本,修改Update函数,现在脚本的内容应该是这样的:

    1. public class BugPlayerLogic : MonoBehaviour {
    2. void Start () { }
    3. void Update ()
    4. {
    5. if (Input.GetAxis("Vertical") != 0)
    6. {
    7. this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");
    8. }
    9. }
    10. }

Input类用于获取各种输入,包括键盘、鼠标等。

而Input.GetAxis(“Vertical”)代表获取垂直方向上的输入,在电脑上就是W和S键,分别代表正负方向。

下面一一解释:

A. this.gameObject

我们要注意了,BugPlayerLogic是一个脚本,它是BugPlayer身上的一个组件,并不是BugPlayer本身。

所以,我们要通过this.gameObject来获取当前脚本所属的obj对象。

理论上来说,一个组件只能有一个GameObject,但由于我是新手,所以,不敢乱说。

B. transform

GameObject的transform是什么呢?这个最简单了,就是obj对象的位置属性,包括坐标、旋转角度、缩放。

C. transform.position

既然transform包括坐标属性,position自然就是它的坐标属性了。

那么,this.gameObject.transform.position += XXX; 又是什么鬼?

这代表给坐标加上一个坐标,比如我当前坐标是(10,0),加上(1,0)就变成了(11,0)了。

当然,由于这是3D坐标,实际上是有X、Y、Z的。

(Z:特么的我终于不用被忽略了)

(小若:不,它举例的时候还是特意的完全把你忽略了。)

特么的,我是“他”,不是“它”!

D. transform.forward

这个forward又是什么呢?顾名思义,它是物体的正方向、正前方。

物体的正前方就是它的Z轴的方向,当我们希望物体忘正前方移动的时候,当然就是要加上正前方的坐标了。

而this.gameObject.transform.forward * Input.GetAxis(“Vertical”),就是让这个正前方的位移更大一些(根据输入的值来变化)。

关于坐标,应该也是需要研究一番的,我目前还没很熟悉,所以,不多了,免得误导了大家。

OK,总而言之,你记住,向前和向后移动,就是上面那一句代码。

来看看效果:

大家实际上可能会发现,按w键的时候,它往后移动了,这是因为我们的摄像机正对着BugPlayer的正方向了。

停止运行游戏,把BugPlay旋转一下:

按下快捷键E就可以进入到旋转模式(或者点击左上方的旋转按钮),我们要绕着Y轴旋转,所以要按住绿色的那条圈,然后拖动鼠标。

大家自己尝试吧,习惯就好了。

4.左右旋转

特么的主角当然不能只会前进后退了,还得左右转向。

这个更简单,打开BugPlayerLogic脚本,继续修改Update函数

    1. void Update ()
    2. {
    3. /* 旋转镜头 */
    4. if (Input.GetAxis("Horizontal") != 0)
    5. {
    6. transform.Rotate(new Vector3(0, Input.GetAxis("Horizontal"), 0));
    7. }
    8. if (Input.GetAxis("Vertical") != 0)
    9. {
    10. Input.GetAxis("Vertical") * 10 * Time.deltaTime;
    11. this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");
    12. }
    13. }

既然Input.GetAxis(“Vertical”)是获取垂直方向上的输入,那么,Input.GetAxis(“Horizontal”)自然就是获取水平方向的输入了。

在选中BugPlayer的时候,我们就能看到它的三个方向的箭头:

看看箭头的颜色,再对比右上角的XXX(小若:XXX是什么鬼啊?)

我不知道右上角的那个XXX叫什么名字,叫做方向图例?随便吧。

总之,看看不同颜色的箭头,分别标注了X、Y等文字,代表这个颜色的箭头是哪个方向的。(Z:别烦我,我想静静地思考一下…特么的我就这么让作者讨厌?)

很明显,BugPlayer的垂直方向是Y轴,如果我们要旋转BugPlayer,是不是应该绕着Y轴旋转?

千万不要告诉我,因为是水平方向的旋转,所以要绕着X轴或者Z轴什么的,我不想和你们说话。

于是,代码中的tranform.rotate就是用来旋转物体的,而Vector3代表的是三维坐标,由于只需要旋转Y轴,所以X和Z的值都是0.

OK,运行游戏,看看效果:

不好意思,这车倒得有点歪了,没关系…车位挺多的…

5.待续

好了,本篇到此结束。

下一篇,我们来玩些什么呢,要不,我们开始在场景里设置一些奇怪的东西吧?

本篇源码:Unity_benmutou_007

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 00:12:32

【笨木头Unity】入门之旅007:Demo之四处找死(二)_主角移动和旋转的相关文章

【笨木头Unity】入门之旅010(完结):Demo之四处找死(五)_UI

UI是游戏里必不可少的元素,在Unity里添加UI是比较轻松的事情,但要玩好它,可就不那么轻松了. 没关系,先入门. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2196 文章来源:笨木头与游戏开发 1.创建UI 很早之前也介绍过怎么创建UI,这里简单再回顾一下. 在Hierarchy窗口中点击右键,依次选择[UI]-[Text]. 我们会看到窗口中,多了一个Canvas和Text: 2.让UI跟随物体移动 由于

【笨木头Unity】入门之旅006:Demo之四处找死(一)_场景和主角

终于把一些基本的东西介绍完了,我不想再介绍无聊的菜单和快捷键了,这些东西大家自己在折腾的过程中慢慢熟悉就好. 有什么不懂的就问度娘,不喜欢度娘的,可以找谷歌. 这次,我们来开始一个很简单的Demo,我突然想到一个游戏,又或者只能叫做Demo. 一个人物,可以四处走动,地图上有很多暗雷,踩到之后会随机产生一些效果(比如加血.掉血.增加防御.小若失去吐槽能力等等). 人物身上当然得有一些UI,这些UI会跟随着人物一起走动. 虽然是个小Demo,但,入门所需的各种操作应该都涉及到了,包括:人物走动(不

【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作. 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2176 文章来源:笨木头与游戏开发 1.找遍全世界,只为了发现你--FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的. 先给我

【笨木头Unity】入门之旅008:Demo之四处找死(三)_触发器

好了,游戏开始进入奇怪的阶段了,接下来我们要在场景里放上地雷,终结这个帅气的BugPlayer吧. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2157 文章来源:笨木头与游戏开发 1.Sphere物体 除了Cube(立方体)之外,我们还可以创建很多种形状的物体. 这里我们需要做一个地雷,地雷是有一个杀伤范围的,或者叫做触发范围,也就是说,特么的判断你是否踩到我了. 通常范围的判断都是用圆形的,而在3D的世界里,

【笨木头Unity】入门之旅004:地形初初初级介绍

我突然有点不知所措,Unity的教程果然很难写,我有点不知道该从哪个话题开始写起. 我想,从地形开始写起?这个用的比较多,嗯,就它吧.(小若:不知道为什么,我总感觉好像很随便的样子) 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2063 文章来源:笨木头与游戏开发 为什么标题是[初初初级介绍]?(小若:我知道,你口吃) 因为我个人对地形也不是很熟悉,仅仅是能使用一些基本功能,所以,我也只能给大家介绍基本功能. 对

【笨木头Unity】入门之旅002:不谈对象,咱们谈组件

今天有人问了一个一直以来都让我很纠结的问题:木头为什么长得这么帅?(小若:不就是一个瞎子随便问了个问题嘛,至于吗?) 这,大家以后别问我这个问题了,我真的不知道怎么回答,我尝试过很多变丑的方法,但是都失败了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/archives/2044 文章来源:笨木头与游戏开发 1.还在谈对象?我们这里流行组件 一定有人告诉过你,在面向对象的世界里,一切都是对象. 现在,你要进入Unity的世界了,

【笨木头Unity】入门之旅001:学游泳的第一步是下水

这次的教程更像是我个人的学习记录,所以不一定是从零开始,更多的是,从另一个引擎转战到Unity的教程. 学游泳的第一步,不用说了,必定要下水. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/archives/2035 文章来源:笨木头与游戏开发 1.Unity安装什么的乱七八糟 首先自己想办法找到Unity官网,然后下载安装,这里有个小提示,官方默认下载的是一个下载器,并不是完整安装包. 如果你想下载完整安装包,请点击下载页面的[

[笨木头Unity3D]杂记003·Unity在Android中读取文件

这周被一个问题给折腾了几个晚上,那就是在Android中读取文件,这本是一件很简单的事情,可想象总是美好的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2094 文章来源:笨木头与游戏开发 1.在电脑上读取文件 首先要解决的当然是在电脑上读取文件了,这个并不难,网上一堆资料. 比如: public static string LoadFile(string filePath) { string url = Ap

【笨木头Lua专栏】基础补充06:简单的错误处理

昨天遇到另外一位独立游戏开发者,所以多聊了一会,然后-然后就没有看书了.(小若:借口!借口!) 今天来聊聊错误处理吧,不过毕竟这只是前面的章节,书上的内容似乎有点一笔带过的味道. 没关系,简单更好~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou.com/archives/1728 文章来源:笨木头与游戏开发 1.红色警报--error 我们应该能经常看到类似以下的错误信息: [LUA-print] LUA ERROR: [string "