unity人物动画创建
在本教程中,我们将详细介绍如何在Unity 3D中创建人物动画,包括主角精灵图集的制作、动画精灵的创建、碰撞检测的设置、射击动画的添加以及脚本的编写等内容。
制作主角的精灵图集
如果你按照本教程操作,你会为最终主角的移动效果感到兴奋。首先,我们使用TexturePacker来制作一个精灵图集。
- 下载并解压源精灵文件:下载源精灵的
.png文件,并将其解压到项目中。如果你在之前的步骤中已经完成此操作,则可以跳过这一步。 - 打开TexturePacker并导入文件:打开TexturePacker,将
sprites/player目录下的所有.png文件拖到Sprites面板中。 - 设置纹理参数
- Texture Settings / Layout:
- 将
Algorithm设置为Basic。 - 将
Border Padding设置为1。 - 将
Shape Padding设置为1。 - 不勾选
Trim。 - Texture Settings / Output:
- 保留
Data格式为cocos2d。 - 在
Data File中,点击...,将输出保存到项目的Assets目录下(例如Assets/SpriteAtlases),保存为player。 - TexturePacker 会自动为文件添加后缀
.plist,但Unity需要.xml文件,因此将.plist改为.xml。 Texture File路径应与Data File保持一致。
完成上述设置后,点击 Publish,切换到Unity,你将在项目视图的 SpriteAtlases 文件夹下看到精灵贴图和精灵数据文件。
- 在Unity中调整精灵设置:在项目视图中选择
player.png,在Inspector中将Filter Mode改为Point。点击Override for Web,将Format设置为Truecolor,然后点击Apply。
制作主角精灵
接下来,我们使用Orthello 2D将主角精灵图集转换为动画精灵。
精灵容器
- 在Unity的项目视图中,依次点击
orthello->Orthello->Objects->Sprites->SpriteAtlas,然后将SpriteAtlas - Cocos2D拖到Hierarchy中。 - 在Hierarchy窗口中,点击
OT->Containers,会出现一个新的Container,其名称类似Container (id=-6840),将其命名为player,该Container将包含关卡所需的所有精灵。 - 将
player.png拖放到OTSprite Atlas Cocos 2D脚本的Texture位置。 - 将
player.xml拖放到OTSprite Atlas Cocos 2D脚本的Atlas Data File位置。
建立主角动画
- 将
Animation对象(路径为Orthello->Objects->Sprites)拖到Hierarchy中,这将在OT->Animations下添加一个新对象,名称类似Animation (id=-4320),将其重命名为player anims。 - 选中刚创建的动画对象,进行如下设置:
- 在
Framesets下,将Size设置为9。 - 为了填充Container区域,将
OT->Containers下的player拖放进去。
- 在
创建主角精灵对象
将 Orthello -> Objects -> Sprites 下的 AnimatingSprite 拖放到Hierarchy中,会为场景添加一个新对象,名称类似 Animating Sprite (id=-23050),将其改名为 player。
将 player anims 拖放到 player 的 Animation 位置,Sprite Container 位置会自动填充为 player 容器对象。若未自动填充,可手动将 player 容器对象拖放到此位置。
取消勾选 Play On Start,以防止动画在游戏开始时自动播放。
给主角添加碰撞检测
为了使主角能与梯子和绳子正确碰撞,需要进行以下设置:
- 选中
player,勾选OTAnimating Sprite下的Collidable,这将自动为对象添加一个Rigidbody。 - 点开
Physics旁的下拉菜单,选择Custom。 - 在
Transform中,将Scale Z设置为1。 - 将
Depth改为-1。 - 在
Box Collider中,进行如下设置:- 将
Center Y改为-0.1,Z改为1。 - 将
Size X改为0.45,Y改为0.6,Z改为0.4。
- 将
将 Depth 改为 -1 以及将 Box Collider 的 Z 改为 1,可以使主角靠近摄像机,保证主角始终在关卡背景前面,且碰撞器在Z轴的0位置,从而能与梯子和绳子进行碰撞。
设置射击动画
制作射击动画
- 将
Orthello->Objects->Sprites中的Animation对象拖放到Hierarchy中,在OT->Animations下会创建一个新对象,名称类似Animation (id=-4320),将其重命名为shoot anims。 - 选中
shoot anims对象,进行设置并将OT->Containers下的level容器拖放到Container区域。
制作射击精灵
- 将
Orthello->Objects->Sprites下的AnimatingSprite拖放到Hierarchy中,为场景添加一个新对象,名称类似Animating Sprite (id=-23050),将其改名为shoot。 - 将
shoot anims拖放到shoot的Animation位置,Sprite Container位置会自动填充为level容器对象。若未自动填充,可手动将level容器对象拖放到此位置。 - 将
Transform Position X设置为-1,使射击精灵位于主角精灵的左侧。 - 将
Depth改为-1,确保射击精灵始终在关卡背景前面。 - 将
Frame Index设置为18。 - 取消勾选
Play On Start,防止动画在游戏开始时自动播放。 - 取消勾选
Mesh Render,隐藏子弹动画,直到通过脚本重新打开。
给子弹精灵添加父节点
为了让子弹精灵跟随主角,并能根据主角的面向进行左右翻转,需要进行以下操作:
- 创建一个空对象(
Object->Create Empty),将其命名为shoot parent,并将其Position设置为(0, 0, 0)。 - 在Hierarchy中,将
shoot精灵拖放到shoot parent上,使其成为shoot parent的子节点对象。 - 将
shoot parent对象拖放到player精灵上,使其成为player精灵的子节点对象。
注意,为了使后面的脚本能正确工作,player 下的子节点对象的名称必须与教程中的一致。
添加脚本
现在,我们要添加脚本来实现主角的移动。
- 下载脚本并解压到电脑硬盘中。
- 将脚本文件拖放到项目的
Asset文件夹中。 - 创建一个空游戏对象(
Game Object->Create Empty),将其命名为Scripts。 - 将
xa.cs脚本文件拖放到Scripts对象上。 - 将
player.cs和playerAnims.cs脚本文件拖放到player对象上。 - 确保主角站在一个砖上,主角的
Box Collider会与其他物体碰撞,而不是可见的主角精灵。主角的Z坐标应保持在-1(x和y坐标可根据需要调整)。
完成以上步骤后,播放游戏,你会发现主角能够站在砖上,按键盘上的左右方向键时主角会移动并显示动画。
给梯子和绳子添加碰撞
给梯子加碰撞
创建梯子碰撞体
- 创建一个Cube(
GameObject->Create Other->Cube),将其命名为Ladder。 - 打开
Tag Manager(Edit->Project Settings->Tags),创建Ladder和Rope两个Tag。 - 创建一个新的层
Layer,命名为NoDraw。 - 将
Ladder对象的Tag改为Ladder,Layer改为NoDraw。
在游戏视图中隐藏梯子碰撞体
点击 Main Camera,在 Camera 下打开 Culling Mask 下拉菜单,取消勾选 NoDraw,这样 NoDraw 层的物体将不会在游戏视图中显示。
调整梯子碰撞体的大小和位置
梯子碰撞体需要比可见的梯子大一个单元。例如,若梯子有4块拼图片高,则碰撞体应为5个单元高。选择 Ladder 碰撞体,将 Scale Y 改为 5,使用 Vertex Snap 将其与梯子的底部拐角对齐。你可以复制该 Ladder 碰撞体并与其他梯子对齐。
播放游戏,当主角碰到梯子时,即可上下爬梯子,还能从梯子的上下两端走出,若从梯子中间走出,也会从中间掉落。
给绳子加碰撞
创建绳子碰撞体
创建一个Cube(GameObject -> Create Other -> Cube),将其命名为 Rope,并将其 Tag 改为 Rope,Layer 改为 NoDraw。
调整绳子碰撞体的大小和位置
绳子碰撞体需要比可见的绳子大一个单元。例如,若绳子有4块拼图片长,则碰撞体应为5个单元长。选择 Rope 碰撞体,将 Scale X 改为 5,使用 Vertex Snap 将其与绳子的底部拐角对齐。你可以复制该 Rope 碰撞体并与其他绳子对齐。
播放游戏,当主角碰到绳子时,即可左右爬绳子,还能从绳子的左右两端走出,若从绳子中间走出,也会从中间掉落。
结尾
至此,我们已经完成了主角的所有移动动作,包括跑、爬梯子和绳子。你可以点击下面的链接试玩本项目: play the web version of the project here
如果你在操作过程中有任何疑问,可以在回复中提问,也可以通过email联系我。