unity人物动画创建

2015年01月17日 13:54 0 点赞 0 评论 更新于 2025-11-21 14:37

在本教程中,我们将详细介绍如何在Unity 3D中创建人物动画,包括主角精灵图集的制作、动画精灵的创建、碰撞检测的设置、射击动画的添加以及脚本的编写等内容。

制作主角的精灵图集

如果你按照本教程操作,你会为最终主角的移动效果感到兴奋。首先,我们使用TexturePacker来制作一个精灵图集。

  1. 下载并解压源精灵文件:下载源精灵的 .png 文件,并将其解压到项目中。如果你在之前的步骤中已经完成此操作,则可以跳过这一步。
  2. 打开TexturePacker并导入文件:打开TexturePacker,将 sprites/player 目录下的所有 .png 文件拖到Sprites面板中。
  3. 设置纹理参数
    • 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 文件夹下看到精灵贴图和精灵数据文件。

  1. 在Unity中调整精灵设置:在项目视图中选择 player.png,在Inspector中将 Filter Mode 改为 Point。点击 Override for Web,将 Format 设置为 Truecolor,然后点击 Apply

制作主角精灵

接下来,我们使用Orthello 2D将主角精灵图集转换为动画精灵。

精灵容器

  1. 在Unity的项目视图中,依次点击 orthello -> Orthello -> Objects -> Sprites -> SpriteAtlas,然后将 SpriteAtlas - Cocos2D 拖到Hierarchy中。
  2. 在Hierarchy窗口中,点击 OT -> Containers,会出现一个新的Container,其名称类似 Container (id=-6840),将其命名为 player,该Container将包含关卡所需的所有精灵。
  3. player.png 拖放到 OTSprite Atlas Cocos 2D 脚本的 Texture 位置。
  4. player.xml 拖放到 OTSprite Atlas Cocos 2D 脚本的 Atlas Data File 位置。

建立主角动画

  1. Animation 对象(路径为 Orthello -> Objects -> Sprites)拖到Hierarchy中,这将在 OT -> Animations 下添加一个新对象,名称类似 Animation (id=-4320),将其重命名为 player anims
  2. 选中刚创建的动画对象,进行如下设置:
    • Framesets 下,将 Size 设置为 9
    • 为了填充Container区域,将 OT -> Containers 下的 player 拖放进去。

创建主角精灵对象

Orthello -> Objects -> Sprites 下的 AnimatingSprite 拖放到Hierarchy中,会为场景添加一个新对象,名称类似 Animating Sprite (id=-23050),将其改名为 player。 将 player anims 拖放到 playerAnimation 位置,Sprite Container 位置会自动填充为 player 容器对象。若未自动填充,可手动将 player 容器对象拖放到此位置。 取消勾选 Play On Start,以防止动画在游戏开始时自动播放。

给主角添加碰撞检测

为了使主角能与梯子和绳子正确碰撞,需要进行以下设置:

  1. 选中 player,勾选 OTAnimating Sprite 下的 Collidable,这将自动为对象添加一个 Rigidbody
  2. 点开 Physics 旁的下拉菜单,选择 Custom
  3. Transform 中,将 Scale Z 设置为 1
  4. Depth 改为 -1
  5. Box Collider 中,进行如下设置:
    • Center Y 改为 -0.1Z 改为 1
    • Size X 改为 0.45Y 改为 0.6Z 改为 0.4

Depth 改为 -1 以及将 Box ColliderZ 改为 1,可以使主角靠近摄像机,保证主角始终在关卡背景前面,且碰撞器在Z轴的0位置,从而能与梯子和绳子进行碰撞。

设置射击动画

制作射击动画

  1. Orthello -> Objects -> Sprites 中的 Animation 对象拖放到Hierarchy中,在 OT -> Animations 下会创建一个新对象,名称类似 Animation (id=-4320),将其重命名为 shoot anims
  2. 选中 shoot anims 对象,进行设置并将 OT -> Containers 下的 level 容器拖放到 Container 区域。

制作射击精灵

  1. Orthello -> Objects -> Sprites 下的 AnimatingSprite 拖放到Hierarchy中,为场景添加一个新对象,名称类似 Animating Sprite (id=-23050),将其改名为 shoot
  2. shoot anims 拖放到 shootAnimation 位置,Sprite Container 位置会自动填充为 level 容器对象。若未自动填充,可手动将 level 容器对象拖放到此位置。
  3. Transform Position X 设置为 -1,使射击精灵位于主角精灵的左侧。
  4. Depth 改为 -1,确保射击精灵始终在关卡背景前面。
  5. Frame Index 设置为 18
  6. 取消勾选 Play On Start,防止动画在游戏开始时自动播放。
  7. 取消勾选 Mesh Render,隐藏子弹动画,直到通过脚本重新打开。

给子弹精灵添加父节点

为了让子弹精灵跟随主角,并能根据主角的面向进行左右翻转,需要进行以下操作:

  1. 创建一个空对象(Object -> Create Empty),将其命名为 shoot parent,并将其 Position 设置为 (0, 0, 0)
  2. 在Hierarchy中,将 shoot 精灵拖放到 shoot parent 上,使其成为 shoot parent 的子节点对象。
  3. shoot parent 对象拖放到 player 精灵上,使其成为 player 精灵的子节点对象。

注意,为了使后面的脚本能正确工作,player 下的子节点对象的名称必须与教程中的一致。

添加脚本

现在,我们要添加脚本来实现主角的移动。

  1. 下载脚本并解压到电脑硬盘中。
  2. 将脚本文件拖放到项目的 Asset 文件夹中。
  3. 创建一个空游戏对象(Game Object -> Create Empty),将其命名为 Scripts
  4. xa.cs 脚本文件拖放到 Scripts 对象上。
  5. player.csplayerAnims.cs 脚本文件拖放到 player 对象上。
  6. 确保主角站在一个砖上,主角的 Box Collider 会与其他物体碰撞,而不是可见的主角精灵。主角的 Z 坐标应保持在 -1xy 坐标可根据需要调整)。

完成以上步骤后,播放游戏,你会发现主角能够站在砖上,按键盘上的左右方向键时主角会移动并显示动画。

给梯子和绳子添加碰撞

给梯子加碰撞

创建梯子碰撞体

  1. 创建一个Cube(GameObject -> Create Other -> Cube),将其命名为 Ladder
  2. 打开 Tag ManagerEdit -> Project Settings -> Tags),创建 LadderRope 两个 Tag
  3. 创建一个新的层 Layer,命名为 NoDraw
  4. Ladder 对象的 Tag 改为 LadderLayer 改为 NoDraw

在游戏视图中隐藏梯子碰撞体

点击 Main Camera,在 Camera 下打开 Culling Mask 下拉菜单,取消勾选 NoDraw,这样 NoDraw 层的物体将不会在游戏视图中显示。

调整梯子碰撞体的大小和位置

梯子碰撞体需要比可见的梯子大一个单元。例如,若梯子有4块拼图片高,则碰撞体应为5个单元高。选择 Ladder 碰撞体,将 Scale Y 改为 5,使用 Vertex Snap 将其与梯子的底部拐角对齐。你可以复制该 Ladder 碰撞体并与其他梯子对齐。

播放游戏,当主角碰到梯子时,即可上下爬梯子,还能从梯子的上下两端走出,若从梯子中间走出,也会从中间掉落。

给绳子加碰撞

创建绳子碰撞体

创建一个Cube(GameObject -> Create Other -> Cube),将其命名为 Rope,并将其 Tag 改为 RopeLayer 改为 NoDraw

调整绳子碰撞体的大小和位置

绳子碰撞体需要比可见的绳子大一个单元。例如,若绳子有4块拼图片长,则碰撞体应为5个单元长。选择 Rope 碰撞体,将 Scale X 改为 5,使用 Vertex Snap 将其与绳子的底部拐角对齐。你可以复制该 Rope 碰撞体并与其他绳子对齐。

播放游戏,当主角碰到绳子时,即可左右爬绳子,还能从绳子的左右两端走出,若从绳子中间走出,也会从中间掉落。

结尾

至此,我们已经完成了主角的所有移动动作,包括跑、爬梯子和绳子。你可以点击下面的链接试玩本项目: play the web version of the project here

如果你在操作过程中有任何疑问,可以在回复中提问,也可以通过email联系我。

作者信息

feifeila

feifeila

共发布了 3994 篇文章