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);//直接销毁所有粒子
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容