Babybus-u3d技术交流-UGUI制作2D游戏与官方Native2D原工程代码的对比总结
Native2D原工程代码的对比总结
本文只讨论主要功能
人物控制:
1、移动控制
因为是基于UGUI
上的
2D
游戏开发,我的想法是通过改变图片的
position
来达到移动游戏角色的目的。
在官方工程里,通过给物体添加一个方向力,同时给物体赋予摩擦力材质,来移动角色。当物体当前速度达到一个最大值时,就限制物体的速度。
在操作体验方面,通过改变物体的
position来移动物体略显生硬,通过力来改变物体位移使得物体移动起来更生动流畅。
2、
转身
一般来说,对于一个角色的转身,正常的思路就是将物体绕Y
轴旋转
180
度,可是在
U3D
中, 做
Tranform.rotation =
Quaternion
.
Euler
(
new Vector(0,180,0)
)
操作时,该物体的
ROTATE的X,Y,Z或多或少都会有变化,比如变成 (1.0,178,-1.0)这样的,还有很要命的一点,执行这句语句之后,紧贴地面的物体的碰撞器会嵌入地面的碰撞器,然后悲剧的事情就发生了,角色会被微微的弹开,角色的旋转又改变了,导致结果和我们预期的不一样。
这是我的解决方案,获得Scale
的相反数,并赋给自身,就达到了转身的效果。不要为我这是为什么,镜像变换啊亲们
......Scale
也是用三维坐标系表示的。
源代码和我差不多,是这样的
3、
跳跃
我学习官方的做法,使用
grounded
Physics2D
.
Linecast
(
transform
.
position
,
groundCheck
.
position
, 1 <<
LayerMask
.
NameToLayer
(
"Ground"
));
在人物和地面之间做一个空物体,放在地面之下,在这之间创建一条射线,如果射线被地面挡住,则可以进行跳跃,如果射线直接没有任何遮挡,说明人物在空中,无法在执行跳跃操作。
怪物
AI:
我的做法是通过
InvokeRepeating
,
每隔一段时间调用这个函数,改变该物体的速度,比较当前的速度和原来的速度,如果是相反的,就执行转身,大部分想法和角色控制一样。
这是官方的做法:
把两边的墙壁加上标签,一开始给物体随机一个速度,撞到墙上就将速度转向。
这个看项目需求了吧。效果差不多。
杂项:
至于人物死亡,区域检测,计分系统,音效都是基础中的基础,感觉没什么好说的,代码写起来过程虽然不一样,但是结果还是一样的。没什么好说的了。
最后来说说Native2D
,
Unity3D4.3.4
之后,
U3d
也支持
2D
游戏的制作了,在
2D
中,人物动画可以不需要帧动画这种形式了,美术只要画完原型,导入
U3D
,通过
SPrite Editor
,
U3D会通过
Alpha
通道来判断图片中物体的区域和大小,把人物分成几个零件,
然后组合起来,用
Animation来
K
动画,这样程序也能做动画了,很开心 哈哈哈哈 比
2DX
方便多了。
K
完的动画可以用
Mecanim
动画系统来进行组合控制
方便了很多,U3d
也提供了
2D
物理,具体的看开发文档,我感觉
U3D
做起
2D
游戏比
2DX
方便多了。
关于UGUI
:
使用起来简单方便,会NGUI
就能很快上手,屏幕自适应做的很简单,
使用方便,
UI
中锚点的概念很有趣,有兴趣的可以看官方文档,就是少了
Tween这样的脚本,有些效果要自己写这是蛋疼的地方。