【笨木头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身上,如:

u006_3.gif

 

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

 

3.前后移动

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

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

  1.  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    public class BugPlayerLogic : MonoBehaviour {
        void Start () { }
        
        void Update ()
        {
            if (Input.GetAxis("Vertical") != 0)
            {
                this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");
            }
        }
    }

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,总而言之,你记住,向前和向后移动,就是上面那一句代码。

 

来看看效果:

u006_4.gif

 

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

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

u006_5.gif

 

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

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

 

4.左右旋转

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

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

  1.  

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

        void Update ()
        {
            /* 旋转镜头 */
            if (Input.GetAxis("Horizontal") != 0)
            {
                transform.Rotate(new Vector3(0, Input.GetAxis("Horizontal"), 0));
            }
            if (Input.GetAxis("Vertical") != 0)
            {
                this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");
            }
        }

既然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,运行游戏,看看效果:

u006_6.gif

 

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

 

5.待续

好了,本篇到此结束。

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

 

本篇源码:Unity_benmutou_007

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值