unity3D学习笔记-----简单地控制物体移动
创建一个平面,一个胶囊,一个摄像机,把它们都炫到场景里面摆好。创建了三个东西
此时的场景应该是长这样的:
场景中出现了三个被创建好的物体
创建一个脚本并且绑定到摄像机上,然后打开编辑器操作它。
移动控制脚本
创建五个变量
由于只是一个简单的示例(其实是我写这玩意儿的时候,只学会了这些东西),所以这里只使用一个脚本来同时控制摄像机和player(等会儿就知道为什么还要控制摄像机了)。首先创建一个player的GameObject,然后再创建一个player的CharacterController。这两个对象都得是public,因为unity要从脚本的外面来访问这两个东西,如果是private的,那就访问不到了捏。
摄像机脚本
看看unity的检查器就知道了,只有当它们设置为public时,检查器中的脚本界面才会出现player和playercontroller的组件框(不知道是不是这么称呼,总之能理解就行)。
注:设置为中文时会unity检查器会自动翻译对象名,如果语言为英文则玩家处会显示Player,这些全看你在代码里面给它们命名什么了,当然你也可以把player替换成kunkun,那么检查器看起来就是长这样的:
开个玩笑
horizontalAxi用来储存水平轴信息,verticalAxi同理。此处的轴指的是虚拟轴,使用Input.GetAxis(string axisName)获取数据。这个函数接受一个轴的名字,然后会返回一个-1到1的小数(不同的轴情况也有所不同,有些是负一到一,有些是零到一)。轴的名字从哪里来在最后会提到。
directionVec是一个向量,用于存放虚拟轴指向的方向。
然后在Start()里面对对这些东西做一个初始化。
Start()中的代码
第一行获取玩家对象,要在Find()的括号中输入的是player的名字,我的player名字就叫player01,就是最开始的时候创建的那个胶囊,名字可以在检查器中自己修改。后面两行不多解释,作用什么的已经写在注释中了呢。
前三行代码在执行后会将相关的组件添加到物体上或绑定到脚本中,当游戏运行时可以很明显地在unity的检查器中观察到。
脚本执行前
脚本执行后
倒数三行所做的事情都是获取虚拟轴的信息,正如之前所说,两个轴的信息使用Input.GetAxis(string axisName)获取。获取到轴的信息后,将它们添加到向量directionVec里面。这里在只是给它们一个初始值而已,众所周知游戏是在一个大循环中一直循环进行的,所以这些信息会在游戏运行时的每一个循环中进行更新。
最后就可以编写Update()中的代码了。
Update()中的代码
LookAt()的作用是设置某个物体的正面看向某一个点。由于这个脚本绑定到了摄像机身上,所以这里的transform就是摄像机的transform,那么这个函数在此地的作用就是让摄像机看向某点。如果怕眼神不好看歪或者认错人,也可以写成this.transform,这个this指的肯定就是this,这样就不怕认错人了。
LookAt()接受的是一个Vector3的对象,在这里把player的位置传进去,这样每一帧都可以让摄像机看向player的位置。
接着的四行如之前一样,获取轴的信息,然后填到directionVec里面去。最后一行是使用角色控制器控制物体朝着某一个方向移动,其中SimpleMove()的意思是带有物理的移动,也就是说物体移动时会有一个从静止开始加速的过程。而还有一个函数Move(),这个函数对物体的操控不带有物理效果,具体有什么区别直接试一下就知道了。
这样代码部分就完成了,保存代码,然后运行游戏测试,发现在键盘上按下方向键时,物体会随之在平面上移动。
放上代码全貌:
完整代码
需要注意的是,控制虚拟轴的相关按键在unity的项目设置中进行配置,包括操作轴的按键和前面提到过的轴的名字。打开编辑>项目设置>输入管理器,在这里面可以查看操作每个轴的相关设置。(如果语言为英文,依次打开Edit>project settings>input manager)
输入管理器
完。
此文为本人学习unity引擎时实操的笔记整理,发布到知乎权当交流学习,如果哪里有问题,请指点。
页:
[1]