Unity3D - 2D

2D游戏导入的图片,Texture Type会默认变为 Sprite(2D and UI),此时可以直接将其拖拽进场景成为GameObject;也可创建一个空物体,手动添加Sprite Renderer组件。

Sprite 属性

  • Sprite Mode:Single(默认)。Multiple(包含多个精灵,可分割或动画)。
    注意,2D纹理本身不是精灵,其下附属的展开内容才是精灵。
  • Pixels Per Unit:Unity场景里每个格子对应图片中多少像素。

Tilemap(瓦片地图)

该功能依赖包管理器中安装2D Tilemap Editor包。
将场景平面划分为网格状,并在网格上绘制内容。

瓦片地图
  1. 创建瓦片地图 Hierarchy - Create - 2D Object - Tilemap - Rectangular
  2. 创建调色板 Window - 2D -Tile Palette(打开调色板窗口) - Create New Palette
    将精灵/瓦片拖拽入调色板(一个调色板里可以容纳多个),资源管理器会自动创建瓦片文件。
  3. 蘸取调色板中的格子,即可在场景中刷涂。刷涂部分的内容会自动加入第一步创建的瓦片地图。
拆分瓦片集

拆分后可以让 2D Texture 下出现多个 Sprite(制作动画也需要该操作)

  1. 选中一个Sprite - Sprite Mode - Multiple
  2. Sprite Editor - slice
    其中 Automatic 会根据透明像素自动分割,也可以手动在画面中拖拽出绿框进行分割
为 Tilemap 设置碰撞
  • 方法1:在需要存在碰撞的位置创建空物体,并为其添加Collider组件
  • 方法2:为Tilemap 添加 Tilemap Collider 2D(瓦片碰撞)组件和 Composite Colloder 2D (复合碰撞体)组件
    前者会让该Tilemap中所有Collider TypeSprite(默认值)的瓦片都具有碰撞效果(对于不想碰撞的瓦片,可以选中其瓦片源文件,将Collider Type改为None
    后者会合并前者中的多处碰撞以减少优化性能(因此会自动额外添加刚体组件)。且添加后还需要勾选前者的Used by Composite选项才能生效。

精灵平铺

2D物体-》Sprite Renderer组件-》Draw Mode

  • Simple:默认值,强行拉伸
  • Sliced:根据九宫格切片,中间部分拉升,四角不变
  • Tiled:根据九宫格切片,中间部分重复平铺,四角不变
当启用 Sliced / Tiled 时

会多出Width、Height属性,此时应使用 Rect Tool(快捷键T)而非 Scale Tool 进行大小拖拽。
九宫格切片可在Sprite Editor中拖动绿线调整(默认在四边)。

Tile Mode:
  • Continuous:默认,精灵会均匀重复
  • Adaptive:重复部分仅在精灵的尺寸达到 Stretch Value 时才进行重复

2D物体的渲染层级

  • Sprite Renderer 组件 - Additional Settings - Order in Layer
    数字越大渲染越晚(表现为覆盖在最高层)

  • Edit - Project Settings - Graphic - Camera Settings - Tranparency Sort Mode
    可用于控制相同 layer 时渲染的先后顺序
    若选为 Custom Axis 则按照 Tranparency Sort Axis 渲染。可实现随着物体移动,根据坐标位置不同产生不同的优先级
    可通过Sprite Renderer 组件 - Sprite Sort Point切换中心点或轴心点来进行坐标位置比较
    其中轴心点(Pivot)的位置默认在中心点(Center),可以在精灵的设置(Sprite Editor)中修改,拖拽蓝色圆圈或直接设置均可。


动画

Unity动画有自己的状态机,而非直接通过脚本控制。

1. 为游戏对象添加 Animator 动画组件

可将动画分配给场景中的游戏对象,比老版本的Animation组件更方便。

2. Assets->右击->Create->Animator Controller 创建动画控制器

可根据当前游戏对象的状态控制播放/切换对应的动画(也称为动画状态机)。

3. Window->Animation->Animation 打开动画窗口

注意:后续操作需要在Hierarcy中选中游戏对象后,再在动画窗口中编辑。
Preview也是点动画窗口中的时间点,Scene里的对象发生改变

4. 选中带有Animator组件并配置好Animator Controller的游戏对象,在动画窗口左上角下拉框中创建/切换动画.anim文件(也称AnimationClip文件)

即一个Controller对应多个AnimationClip

5. 操作时间轴

可以通过鼠标框选选中时间轴中多个关键帧,然后拖动以等比拉伸时间

  • 点击Add Peoperty,可以选择该物体已有组件的某个属性,并在时间轴上设置关键帧
  • 点击录制按钮,然后直接在对应帧进行游戏对象的修改操作,并自动记录
  • 将资源中的精灵拖拽进时间轴(本质是改变了Sprite Renderer组件Sprite属性)
6. Window->Animation->Animator 打开动画控制器窗口

可以将.anim动画文件拖拽以添加进动画控制器窗口
从Entry出发的为必播动画(default),可通过右键设置。

  • Layers:动画层级,用于处理多个动画同时生效(如边跑边射击)时的优先级
  • Parameters:用于控制多个动画状态之间切换的变量

在不同节点之间通过连线(Make Transition),表示可切换关系。
可以通过代码修改状态机变量,当连线的检查器中Conditions设置的变量条件满足时,就会切换到相应的动画:

private Animator animator;

animator = GetComponent<Animator>();
animator.SetInteger("变量名", -1);

////Trigger触发器和布尔值不同,动画执行完成后会自动重置为false。也可以通过ResetTrigger手动重置
animator.SetTrigger("变量名");
animator.ResetTrigger("变量名");
  • Has Exit Time:动画状态满足切换条件时,是否保留之前动画一段时间
    勾选时,Exit Time设置生效
  • Transition Duration:动画切换时的过渡时间。设置为0则直接切换。
混合树(Blender Tree)

动画控制器中一种特殊的节点,可以按不同程度组合动画。
如:一个站立混合树可以当speed>0时进入走路混合树,再根据direction在走路状态树中切换为不同朝向的走路动画。
在动画控制器窗口中,右击->Create State->From New Blend Tree,双击新创建的混合树节点进行配置

  • Blend Type:决定有几个参数控制动画切换

组合出一个坐标系,并添加Motion(动画),将触发离红点坐标最近的动画


设置循环动画
  • 方法1:选中.anim文件(即AnimationClip文件),在其Inspector中勾选Loop Time。则之后进入该状态后,只要状态不离开,就会反复播放
  • 方法2:在动画控制器窗口中,复制一个动画,使其互相指向



粒子系统

Hierarchy > Effects > Particle System
用于制作烟雾、火焰、爆炸、雨雪等特效
注意各模块中带下三角的属性,都可以切换成固定值或区间随机值等

用贴图制作烟雾特效
  1. 设置烟雾贴图
    Particle System 组件 > Texture Sheet Animation 模块
    Mode:Sprites
    选择烟雾的精灵。如有多个精灵随机出现,则点击加号添加精灵,并切换 Frame Over Time 和 Start Frame 为 Random Between Two Constants ,数值为 0~n(即上述添加精灵数组的index)。

  2. 设置烟雾形状
    Particle System 组件 > Shape
    Angle 设置发射角度

  3. 设置粒子行为
    Particle System 组件 > Particle System 主模块
    Looping:重复播放
    Start Lifetime:粒子存活时间
    Start Speed:粒子速度
    Start Size:粒子大小
    Simulation Space:Local 则跟随当前物体。World 则已发出的粒子独立运动,不随 Particle System 物体移动。

  4. 设置粒子渐变消失
    Particle System 组件 > Color Over Lifetime 模块
    选中右上角的标记,设置 Alpha 为 0


  5. 设置粒子渐变变小
    Particle System 组件 > Size Over Lifetime 模块

  6. 设置粒子发射频率
    Particle System 组件 > Emission 模块

开始/结束粒子发射
private ParticleSystem smokeEffect;

smokeEffect = GameObject.Find("Particle System").GetComponent<ParticleSystem>();

smokeEffect.Stop();//不再生成新的粒子

smokeEffect.Play();//继续发射粒子

// Destroy(smokeEffect);//直接销毁所有粒子
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容