前面一篇文章,我们讲了【打砖块】游戏中的3D物体的场景布局、材质资源、物理刚体与碰撞组件,接下来本篇文章重点介绍“子弹的发射”与“摄像机移动”,有了这两部分我们的【打砖块】游戏就可以初步玩起来了。
子弹的发射子弹是由3D物体Sphere球体创建,并将节点改名为bullet,看下图:
在层级管理器中将bullet节点拖动到资源管理器中,将它创建成一个Prefab预制体。同时在bullet子弹节点上挂载球体碰撞组件()和刚体组件(),如下图所示:
有了bullet预制体,我们就可以用代码去实例化它,并将他发射出去,创建一个shoot的TypeScript脚本并将它挂载到Camera摄像机节点上:
这里需要注意两点:
触摸事件是使用进行注册的;
工程中没有代码提示,需要从引擎安装目录中复制文件到工程中,我是在Mac系统上,可以用下面命令复制:
cp/Applications//Contents/Resources/resources/3d/engine/bin/.declarations//摄像机移动
在3D游戏中,通常的做法是使用WSAD四个键进行上下左右的移动,其核心是控制摄像机节点的位置。在我们这个游戏中为了简化游戏操作,我们只控制摄像的x和y方向的移动:
w:y方向增加
s:y方向减小
a:x方向减小
d:x方向增加
创建一个movement的脚本用于控制摄像机的移动,下面是组件的设置:
下面重点分析使用键盘控制摄像机移动的相关代码:
//使用注册全局键盘事件start(){(_DOWN,,this);(_UP,,this);}在按钮下键盘事件onKeyDown中标记移动的方向:
onKeyDown(event){(event);letrotation=;letposition=();switch(){:=1;break;:=-1;break;:=-1;break;:=1;break;}}当按键松开时,将offset变量归0:
onKeyUp(){=0;=0;=0;}重点是在组件的每帧事件update中真正控制摄像机节点的移动:
update(deltaTime:number){//计算要移动的目标位置(,,);//插值计算(,,,deltaTime*);//移动节点();}为了平滑移动,Shawn这里参考了官方Demo案例中的做法,使用对当前坐标到要移动的坐标进行插值计算。
小结Creator3D打砖块是Shawn制作的第一个3D游戏,也是公众号上第一次写的3D相关的教程,目前他只能算是一个DEMO,还有很多不足的地方,如有不正之处还请大家多多指正。
原创不易,特别是一个新的东西,如果文章对你有用,也感谢你点个在再看或分享给朋友,你的鼓励是我创作的动力,愿我们在前进的道路上砥砺前行,共同成长!