目录
图片相关
图片设置
Textture Type 纹理类型
1.default 默认
2.Normal map 法线
3.Editor and Legacy GUI
4.Sprite(2D and UI)
编辑
5.Cursor 自定义光标
6.Cookie 光源剪影
编辑
7.Light Map 光照贴图
8.SIngle Channel编辑
纹理形状设置
纹理高级设置
纹理平铺拉伸
平台打包设置
图片编辑
Single编辑
Multiple图集分割
Polygon多边形编辑
Sprite Renderer
练习题
SpriteCreator精灵创造者
Sprite Mask 精灵遮罩
Sprite Group排序分组
编辑
Sprite Atlas 精灵图集
Sprite ShapeProfile精灵形状
使用精灵形状
Sprite Shape Renderer
Sprite Shape Controller
2D物理系统
2D刚体
DYnamic 动态
Kinematic 运动学
Static
如何选择
碰撞器
使用API的注意点
物理材质
恒定力
2D效应器
区域效应器
浮力效应器
点效应器
编辑编辑
平台效应器
编辑编辑
表面效应器
TileMap
瓦片调色板窗口
编辑瓦片地图
注意事项
瓦片地图关键脚本与碰撞器
实战知识点(排序)
代码控制瓦片地图
动画和动画机
Animation
老动画系统
有限状态机
参数讲解:
2.条件设置:
2D动画
序列帧动画
2D骨骼动画
图集骨骼
Psb图片骨骼
IK反向动力学
换装
Spine骨骼
页签
Model
Rig
Animation
基础信息
剪辑基本设置
剪辑其他设置
预览窗口
Materials
3D动画
分层与遮罩
编辑
动画混合树
子状态机
编辑
IK控制
编辑
目标匹配
编辑
状态机行为与复用
角色控制器
导航网格
导航网格NavMesh
编辑
编辑
寻路组件Agent
编辑
编辑编辑编辑
连接组件Link
编辑
动态障碍物Obstacle
图片相关
图片设置
红色代表重要参数
Textture Type 纹理类型
1.default 默认
Alpha Source中第三个用的很少,要么没有透明通道,要么直接使用输入纹理中的通道(第二个)
而Alpha IS Transparency勾选的话效果会比较好
2.Normal map 法线
需要先勾选Create from Grayscale才能看到后续两个选项。法线可以用来降低精模
3.Editor and Legacy GUI
编辑器或者GUI开发,没有特殊参数
4.Sprite(2D and UI)
5.Cursor 自定义光标
6.Cookie 光源剪影
7.Light Map 光照贴图
8.SIngle Channel
纹理形状设置
需要先改成Cube
复杂的展开留到unity进阶再说
纹理高级设置
纹理尺寸一般64×64,128×128这种2的幂次方。 可以设置它的处理方式
Read/Write Enabled:是否通过代码获取图片信息,如果不用就关掉。会占用性能。
generate Mip Maps 控制是否使用MipMAp,Streaming通过消耗一些性能来减少纹理所需的内存。
如果是2D游戏,那么可以不启用,3D项目则根据需求选择性的使用。
一般不需要让它淡化为灰色
纹理平铺拉伸
平台打包设置
一般米切尔算法就足够使用。Bilinear细节更多但消耗也更大
通道分离选项只有在对应格式时才会出现,比如ETC,相当节省内存。
图片编辑
Single编辑
包管理器里下载
轴心点决定了图片绕着哪个点旋转
点一下Generate生成网格Custom Physics Shape则与其类似,控制精细度然后生成网格
Multiple图集分割
在再次点击Slice后Method模式才会生效
一般用第一种自动就完全够用了,除非它歪得离谱才会手动去调整。直接鼠标框选
Polygon多边形编辑
在这里填边数,比如三角形等
注意点击apply后渲染区域也一同更改了,可以适当调整它的精度。但多边形编辑其实用的少
Sprite Renderer
其中切片九宫格模式非常重要,需要先把图片网格设置成Full Rect
修改SIze就可以用一张小图得到大图,节约资源
九宫格模式是把中央进行拉伸,平铺模式则是把中央进行平铺。都是只处理中央部分
Tiled平铺模式,一个是只要拉伸就均匀平铺,一个是到达临界值才平铺一次,否则只拉伸不平铺
而代码部分,也是会获取组件上的参数的。重要的是获取
如果是图集,就只能去加载图集整体。用LoadAll这个API,数组接收然后通过索引获取单张图
练习题
这个字典的键代表大图集,值代表小图。而小图也是一个字典,由名字和sprite组成
然后因为只能获取大图集整体,所有建立一个临时字典用来接收大图集下的所有小图
SpriteCreator精灵创造者
先用替代资源写逻辑和程序,等美术资源出了再把资源替换掉
在资源面板创建(Assets)
获取物体和物体身上的脚本是两码事
Sprite Mask 精灵遮罩
可以更改遮罩的形状
在渲染器里面可以更改遮罩设置
不显示 在遮罩内部显示 在遮罩外部显示
放大镜原理,一张大图在底下唉,小图在上面。平常只能看到小图。而放大镜的层级比这两都大,且镜片位置有一个遮罩,可以看到大图忽略小图。就达成了类似放大镜一样的效果 >= <
图片层级需要》=Back且《Front才能被遮罩影响
Sprite Group排序分组
子物体可以再嵌套Group
给图片成为该组件所在物体的子物体后,就只会根据SortGroup的层级来划分,图片本身的层级不再生效(不对其他Group下的图片生效,但仍然会影响同一Group下的其他子物体)。
适用于给场景中的多个sprite进行分好组,甚至可以把整个场景都分成上中下层
当SortingGroup/图片本身所在层/层级序号全都一样时,z轴才会起作用,优先级最低
Sprite Atlas 精灵图集
这种是使用图集,也就是图源本身就是一个图集。
而打图集是把一个张张的单图给打成一个图集,是制造图集的过程,可以减少DrawCall
一般选择让它ALways Enabled一直打包就行了
如果是UI图集请禁用打包旋转
一般用主图集即可。变体图集的作用只是在主图集的基础上放缩而已,用的很少
Texture中的内容之前已经讲过,可以复习一下 后面的平台相关设置也已经讲过
2D游戏的话,一般不需要用MipMaps,因为没有远近概念
打包哪些图。可以按+号添加也可以直接拖入。注意可以拖入一整个文件夹。会把文件夹中所有图片一起打包。按“Pack Preview” 进行打包
使用这三张同一图集的图片时 运行后发现Draw Call有效减少
所以平常用图片就直接用,等到都做完了再来进行一个打包
先加载Resoures中的图集,然后通过图集的GetSprite方法得到单张图
使用前需要先引入命名空间 using UnityEngine.U2D;
因为每次检测都发现上一张图和自己不在一个图集,所以变成了三次。
为了避免这种情况我们应该尽量让这种会穿插在一起的图片打包进一个图集
Sprite ShapeProfile精灵形状
需要导入包
在该包下可以导入示例场景或资源文件
以不封闭图形为例
如果是封闭图形,填充的图片就决定了中间的填充效果
使用精灵形状
把精灵形状拖入场景,就会看到这两个组件
Sprite Shape Renderer
Sprite Shape Controller
Adaptive UV:勾选后只有拉到一定长度才会变成两张图,可能会因不满阈值而扭曲
不勾选则拉长就立刻平铺,但可能出现因为平铺图片和长度不符,只显示一半的情况
所以两种情况,因根据具体的需求来选择因为平铺没显示完
注意Cormer的设置只针对某个点,不是全局设置 然后给精灵形状加碰撞器
如果不需要移动用Edge就够了。需要移动可以用第二种,因为复合碰撞器与刚体绑定
2D物理系统
2D刚体
当你这样让2D物体改变的时候,其实它是在绕z轴旋转
DYnamic 动态
一般设置材质就在碰撞器上面设置就好了,它的优先级最高。子物体不设置则会使用父物体的设置
选了自动质量就不能手动调质量了。 移动和旋转阻力不用多说
比如Gravity Scale为2则受到两倍重力,-1则反向重力,0则不受重力
从不休眠。移动时唤醒静止时休眠。一直休眠,被碰撞时唤醒。 三种模式性能消耗依次i降低
如果物体移动可以选择第二种,如果物体本身就是静止的,可以选择第三种。极端情况会用第一种
Kinematic 运动学
启用则可以和三种类型的刚体都发生碰撞,默认不启用,则只能和Dynamic类型的发生碰撞
Static
看上去有点类似碰撞器。区别是,碰撞器可以被任何刚体碰撞,而静态刚体则只能被Dynamic碰撞
如何选择
相同的地方就不再赘述,关注一下不同的地方。 (加扭矩就是让它旋转
碰撞器
在其他碰撞器当中勾选“Used By Composite”再使用复合碰撞器
1.圆形
如果要单独使用就不要勾选复合碰撞器
2.盒状
3.多边形
→直接编辑
4.边界
Edge一般用来做不规则地形的碰撞。 和多边形一样,直接点击编辑功能,而不是去手动加点
5.胶囊
一般是竖直,因为人基本是站着的
6.复合
GeometryType代表的是容器内部是空心的还是实心的。所以才会用边界碰撞来形容
给父对象添加复合
然后给子对象开启“Used By Composite”
未开启开启 所以能节省性能
Synchronous自动更新几何体Manual手动更新
使用API的注意点
直接赋值速度时不需要乘以deltaTime,它不像translate那样每帧去移动
注意点2,这样仅仅赋值x轴,其实是把它的y轴速度给顶掉了,所以会出现一些问题。因为它本来是xy轴都有速度,这样赋值,相当于只给了一个x方向的力。
所以y方向应仍然保留重力给予的速度
如果场景中有其他力,还应该增加一个额外的条件。因为我们直接去赋值它的速度了,那么其他物体给玩家的力就等于不生效了
物理材质
比如你上斜坡的时候就要考虑一下摩擦力的问题了
恒定力
一个是世界坐标系,一个是本地坐标系。第三个是旋转
2D效应器
需要先勾选碰撞器中“使用效应器”。
前三个还需要勾选“是触发器”,因为不是触发器会撞到
区域效应器
Area 会给进入的物体一个力或者旋转力。 如果需要旋转却没转,看rigidbody2D的z轴是否锁定
例如下图这种设置的含义
力的角度就是45了
并且力的大小为30,还会在30-35之间变化。 如果不想让某玩家受到影响,限制一下层级即可
浮力效应器
Buoyancy模拟流体,给的是浮力,模拟玩家处在水里
Surface Level就是中间这条线
最后Flow分别是浮力方向,大小,随机。和前面区域效应的参数是一样的
点效应器
类似一个磁铁,负数是往里吸。正数是往外排斥
ForceMode 忽略距离,越远呈线性下降,越远呈指数下降
平台效应器
不需要勾选触发器。 可以从下往上跳,不能从上往下跳,用来做平台或墙壁
注意SurfaceARc的角度定义的是不允许单向跳跃的部分
Sides设置的是平台两边的范围,摩擦力和弹力。没有摩擦力,就不会在按住键时贴在墙上
所以平台效应器对于2D游戏来说是非常好用的,能做成跳跃墙壁,还解决了摩擦力的问题
表面效应器
不需要勾选触发器。所以它和区域不一样,是一个类似地板的传送带,踩上去就会往前滑
Friction 摩擦力 Bounce 弹力
TileMap
需要引入包,然后创建瓦片。有两种创建方式
第一种直接在资源面板下创建。
第二种需要先打开TilePalette面板,将资源拖入面板就会变成一个瓦片。可以在此处选择创建一个瓦片资源
第二种,打开调色面板的方式。 然后在面板中,还需要创建一个瓦片地图
然后拖入图片图片会自己变成瓦片
瓦片调色板窗口
1.创建新瓦片地图时的设置,它会让你选择保存位置
根据游戏类型选择网格类型,比如SLG游戏可能用点朝顶部等
根据素材本身选择网格类型,比如图片是棱形的,就创建一个棱形的调色板
选择Edit是在调色版上作图,没有选择Edit则是在场景中作图
在画笔模式下按住Shift也可以快速擦除,和橡皮的效果是一样的
使用框填或画笔工具时,需要先用选取器工具选取一张图
可以有多个瓦片地图,而每个瓦片地图又可以有很多层。
编辑瓦片地图
下面是其他类型的瓦片地图
这样就可以在地图当中进行绘制。如果在同一个Grid下又创建了一个TileMap,
那么相当于加了一个层级,在其面板中有一个对应的层级概念(同一个Grid的不同层)
层本身序号调色板中的设置
注意事项
如果图片没有贴合轴线,请检查sprite的轴心位置,然后修改轴心↑ 修改后↑
在等距瓦片中可能产生层级的渲染问题←
注意z必须是-0.26,这个值是固定的中设置中改成自定义轴然后修改其中的渲染参数改为第二种模式渲染正常
推测:y轴正1意思是先渲染上面的再渲染下面的,z轴-0.26则是先渲染后面的再渲染前面的
这底下的z轴可以改变物体在场景中的高低
但一般不会直接在这改,而是直接使用快捷键 - + (大键盘上的)来控制
瓦片地图关键脚本与碰撞器
Grid参数
出现这种情况,要么修改网格大小,要么修改图片每单位像素点
Tilemap上的参数,不太重要(只有标红的才重要
其中两个可能不会修改,但TilemapRenerer一定很重要。其中Mode和Layer是重中之重
图中斜坡应该设置成按Sprite生成,方块按Grid,下面的应该选择None。因为用不到的完全可以不设置碰撞器节省一些性能消耗。
如果完全不用这么多碰撞器,可以勾选添加的TilemapCollider2D中的使用复合碰撞器,虽然会额外生成刚体,但可以设置成静态刚体节省消耗
练习题一二
如果我要结合平台效应器,就可以用同一张图片再做一个瓦片,将他的碰撞器属性改为None,然后在场景中做一个空物体,挂载碰撞器,再挂载平台效应器,调整位置和瓦片重合。也能达到效果
实战知识点(排序)
建议用普通的等距瓦片
如果要把它设置在地面上,想象它的底部有一个四边形,把轴心设置在底部四边形的中心
这样就是站立在地面的我们设置了人物的轴心点在最底下,所以应该按轴心点来渲染
还有一个注意的问题,
人物y轴大于图片y轴则会被覆盖,所以应该将图片轴心调至最上方,这样人物图片始终在前
但一般推荐直接用“排序层”排序,除非是树木这种需要为玩家去进行遮挡交互等
如果出现玩家浮现在墙壁上的问题,可以额外加一个层级
再建一个画墙壁的层级高的层
三:如果你希望加一些植物等物体,可以再加一个和玩家层级相同的层,这样会按轴心点排序
并且应该选择单张图片进行渲染,而不是整体渲染
此时玩家轴心点在最下角,树也是,花在中心
不做成瓦片一个格子可以无限放,做成瓦片一个格子就只能放一个,但可以批量绘制,两种方法各有千秋。
拓展包
代码控制瓦片地图
TileBase就是瓦片类
注意,SetTile和GetTile的参数格式是Vector3Int
设为空即删除
注意,替换瓦片实际是批量替换所有的。 可以将鼠标输入转世界,世界再转格子
动画和动画机
Animation
如果你提前选中物体再到动画窗口创建动画,Unity就会自动帮你完成以上四种操作,很方便。
哪怕在编辑模式下,也一定要选中物体再进行操作
底部切换曲线模式,可以控制动画要如何播放。选中其中一个关键帧,右键菜单栏参数如下
周期偏移是指动画从几秒开始播放,一般我们不会改它
也可以在动画面板最右侧显示出来帧率,再改帧率
老动画系统
一般来讲我们都会使用新系统
同样需要选中物体,然后添加Animation这个组件,再到动画面版里创建动画
如果要用老系统,用过渡播放会比较好
老系统的动画事件: 允许带参数
有限状态机
参数讲解:
实际上是根据权重,而不是层级覆盖
选中连线,则是设置过渡条件。选中灰色块,则是设置动作状态的一些参数
动画原文件叫“动画1”,拖入后状态块默认与其同名,但是可以修改名字
可以把其他块设置成默认的橙块。橙块最先播放
2.条件设置:
int的条件比float多两种判断方法。有多个条件则需同时满足
如果条件为Trigger,则触发一次过后马上变回false甚至自动返回
GET SET同理,GET做判断很好用
切换状态时,是否等待前一动画播放完才切换
2D动画
序列帧动画
建议用方法一
如果要通过修改帧率来控制动画速度,最好先修改帧率再拖入。如果已经拖入,删除动画,改变帧率后重新拖入
x为0,不为0.y为0,不为0分别是他们的切换条件
因为使用了GetAxisRaw所以x可以强转,但y有可能是小数,所以使用了Mathf中的向上取整
一般来说,用y去判断其实不太准确,因为当下落1时候y是一个负数,取整就变成了0
所以开发当中多数是用碰撞检测去判断,用一个bool,接触地面和离开地面是它的条件
2D骨骼动画
如果想创建子对象,先点一下父骨骼根部
想创建骨骼请确保先选中对象这个复位会经常用到
一般会先自动生成,再手动改细节骨骼动画等于是性能换内存
权重影响骨骼动时如何影响顶点和边。自动生成蒙皮时就有自动生成权重
使用骨骼动画需要导入这个脚本,然后绑定骨骼创建动画的话,和之前是一样的
图集骨骼
如果骨骼原文件是图集,就设置成图集图片,然后给他切片
既然是2D游戏,想要让人物看起来小一点,最好不要改原文件的大小,而是调整摄像机的视口
Psb图片骨骼
如果创建的本来就是2D项目,那么很多包其实会默认导入
Psb文件参数
如果想重新编辑骨骼就删了之前的骨骼文件
再次提醒,添加骨骼之前一定要先选中↓细调。自动生成可能造成一些关联错误。可以减少也可以增加关联
如果拖入场景后不能编辑,可以先取消关联预设体,再移动子物体等
IK反向动力学
使用Psb资源请先创建一个父对象挂载在上面。给父对象添加一个
在需要添加反向动力学的骨骼之下添加一个空对象,充当IK物体
一般四肢用Limb就行了
通过这个来反向控制物体
transform.position= Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(transform.position).z));
举个例子,这里用自己的位置举例了。其实应该是题目中手臂的位置
换装
换装资源一般是隐藏的,需要导入隐藏图层
自带换装的组别
自己建立的同一组装备资源,名字也关联
可以切换装备了。代码也就是切换它的Label
需要先引入命名空间; 然后调API设置Label的值(类名,图片类名)。sr是一个SpriteResolver
不同文件中换装: 可能有多个Psb文件都是同一个角色的装备,这时候就要复制骨骼信息了
点击右侧sprite面板,查看每个部位的骨骼蒙皮情况,擅用隐藏和显示功能
可以在新建的换装资料库中建立自己的类别,和每个类别中的具体装备
以上是第一步完成了
后面两步
视需求而定。有时两张资源少的图比一张资源多的图占内存更小
Spine骨骼
导入的时候下面那个是示例,也可以用它的美术资源,不用就可以删了或者不导入
直接把SkeletonData拖入场景中
下面是SkeletonData的动画参数相关
这种则是用Animator来控制
代码控制:
动画特性可以快速的帮助我们定义动画名字一般用于复杂1骨骼动画
其他特性使用也差不多,快速得到骨骼名,插槽名,附件的名字
其实我更建议用Animator控制,而不是API
页签
Model
下一个是网格,红色比较重要
如果需要用到其他的设置,可以去查看思维导图中的具体参数
Rig
标黑的一般不会去修改,红色的要记住 可以选择人形或非人形,从别的模型身上导入信息或创建自己的Avatar化身信息
化身设置:
首先需要选择Create From This Model,就会看到替身设置信息
按done可以返回绑定时都建议用T姿势比较标准。
旁边的肌肉部分设置,一般不会经常设置
静态模型,选择None。人物模型,选择Humanoid。不规则模型,选择Generic
Animation
基础信息
剪辑基本设置
以上功能Bake选项都决定了动画运动是否影响根运动。偏移也大同小异
这里两个功能用的会比较少
剪辑其他设置
配合Animator使用,参数名应相同
函数名,下面是可以传递的参数
预览窗口
如果要切换预览的人物模型,直接拖入会比较常用。在面板上指定反而用的比较少
可选
Materials
调完设置之后一定要记住Apply
可能会有提取材质和纹理的选项。命名规则根据个人需求。查找按第三种更容易找到但消耗也会大
3D动画
导入时注意底下有几个动画,只有一个可以直接导入。如果有很多个可以只导入单个动画文件
如果动画本身有位移,ApplyRootMotion决定要不要应用
从任意状态都可以转到该状态,比如说死亡状态等
直接拖下方的滑块也可以更改过渡动画,但用值更准确。偏移则是过渡之后从下一个动画的切入点
在下一个,比如我的动作被打断了,那么可以选择是否排队,之后再次播放被打断的动画
AnyState切换,参数基本相同多出来的参数。其中第一个一般取消勾选
练习题,wasd控制人物动画
分层与遮罩
在Layers新建动画层,点击齿轮,可以设置层级的参数
每一层的动画是同时播放的,通过遮罩,可以让下层被覆盖的动画被显示出来
模型文件中的遮罩影响的只是单个模型本身,这里的Avatar可以影响一个层上的动画
一般覆盖模式用得比较多。可以复制其他层状态。默认第一层,可以手动选择。
动画资源默认为空,可以自己选择。后续就可以用代码改权重,来在两种状态之间进行切换。
思考:既然结合了遮罩和权重,那么一开始就会播放下层的动画和上层的动画。这不是我们想要的,我们只有在条件满足的时候才触发下层的动画显示。所以在下层动画中建立一个空动画,并且让null动画成为默认初始动画,再让null根据条件去切换到我们真正需要的动画。
API:
想要播放一次又回来,就用Trigger
动画混合树
可以点进混合树,先介绍1D再讲2D
1D:Parameter是它的条件,允许更改。 添加片段或是一个新混合树
限制它的最大值只能是-0.5~0.5
这样就模拟了按住Shift奔跑的功能。 按下设置,松开关闭
2D混合:线性和平面的区别
根据美术出的资源来选择哪种模式
只有简单的前后左右。前后左右同时可以融合多个别的动作。运动不表示方向
根据需要选择不同算法的2D模式
子状态机
选择,连接到上一层的某个状态,还是状态机
trigger是触发一次后又回来
IK控制
记住只能在指定函数里使用API先开启层级的IK(反向动力学)通道
1则完全固定,0.5则只能动一半
像这样设置,身子不动,只有头部转动。可能更符合我们的要求
下一个是设置位置和相关。依旧是先设置权重再设置位置。如果只设置位置,那么参照物旋转时她不会跟着旋转,反过来也一样。也可以两个都设置,根据需要。进行取舍
上面是我写的(没有累加导致旋转角度太小),下面是老师做的↓ 他给角度加了限制
目标匹配
这个方法不用写在IK函数里,因为Update里执行状态机,目标匹配基本是跟着状态执行的
参数五六会比较重要
比如这个动作就是在40%的时候开始起跳,可以看下方的参数
实际填参数填写0.4即可
如果已经勾选,那么就是前两种问题。
而且大部分错误,基本都是因为前两种。因此,可以添加动画事件,确保动画执行时才进行目标匹配控制好这个事件触发的时机(过渡阶段之后)
状态机行为与复用
在这里给某个状态添加脚本
必须继承该类,实现其中的虚方法只需要写一个override就能全部看到
其他部分和普通脚本没有区别,但使用逻辑不同
什么是状态复用:逻辑相同,仅动画不同
指定要复刻哪个,然后选择动画即可
角色控制器
如果确定要使用角色控制器,就应该取消应用根运动
第一种方法虽然你没有输入y轴方向的力,但一直在调用这个方法,还是会受到重力的影响。 这里建议用自身的forward
其独有的碰撞函数
导航网格
导航网格NavMesh
想要渲染为导航区域的地图必须勾选Navigation Static
前两个参数可以理解为,角色越大越高,可行走的区域就越小
如果打开了连接Links,就要设置它的跳跃高度和距离,否则不生效 并且跳跃是单向的
如果想要台阶不是这样的斜坡,而是真正的贴合楼梯,那么勾选最后一个选项
如果添加了自定义的区域,那么就可以在Object页签里选择它。寻路时会优先走Cost低的部分
寻路组件Agent
根据速度播放动画
如果记不住就点进去看
它的速度是一个v3类型的变量,要判断是否等于0可以判断是否等于Vector.zero
新建一个路径
连接组件Link
选择最近路径。除非你把消耗覆盖调高,他才可能考虑下面更远的路径
动态障碍物Obstacle
如果静止不动的障碍物,可以勾选雕刻功能,可以理解为把导航网格挖掉了一块
静止物体开启雕刻系统,玩家就会在最近的断点处停下来。文章来源:https://www.toymoban.com/news/detail-841319.html
不然就会一直寻路,因为网格还在延续.文章来源地址https://www.toymoban.com/news/detail-841319.html
到了这里,关于Unity四部曲(核心)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!