Unity3D仿星露谷物语开发小结1
1、Cinemachine的作用及使用方法
(1)作用
控制Camera的模块,实现摄像机的复杂控制,比如角色的跟随,限制Camera的区域
(2)使用方法
在已有Main Camera的情况下,
通过【GameObject -> Cinemachine -> Virtual Camera】唤出
2、创建动画思路
先给对象添加Animator组件
然后配置动画逻辑选项
最后再【Window -> Animation -> Animation】添加动画片段
3、物体渲染顺序
1)Sorting Layer,越靠上的Sorting Layer越先渲染
2)Order In Layer,数字越小越先渲染
3)摄像机的距离,越远越先渲染
4、Sorting Group组件作用
确保所有子对象都被排序了,形成单一的个体
5、发布者/订阅者模式
首先,定义事件Event,xxevent(params)
然后,Publisher触发事件,if(xxevent != null){xxevent()}
最后,Subscriber订阅事件并进行处理,+=的方式进行订阅。
6、定义事件Event的两种方式
1)如果超过16个参数
先通过delegate定义委托函数
然后通过event + 委托函数 定义Event
2)如果未超过16个参数
通过event + Action 定义Event
7、OnEnable/OnDisable的调用时机,适合场景
前者:脚本组件被激活时,后者:脚本组件被禁用时。
适用于Event事件注册和释放的时候
8、绘制Tilemap技巧
1)左右翻转Tile:Shift + [
2)旋转Tile:Shift + ]
9、多场景共存现象
可以以Additive的方式存在2个场景,但是只能有一个激活场景
10、创建Tilemap Grid的步骤
1)创建Tilemap。自动创建中包含Grid和Tilemap两个gameobject,Grid负责网格属性,Tilemap用于绘制瓦片
2)配置调色板。创建调色板,将Sprite拖入调色板以生成瓦片。
3)绘制地图。使用笔刷将瓦片绘制到Tilemap上
4)添加碰撞体。给Tilemap对象添加Tilemap Collider 2D来触发碰撞事件,通过Composite Collider来优化碰撞体的生成。
11、添加Tilemap碰撞器
1)创建tilemap物体,设置Collider Type为Sprite
2)给玩家添加Collider组件
3)使用tilemap物体中的元素绘制图形,并且选择一个目标对象collisions对象
4)给collisions对象添加Tilemap Collider组件
5)给collisions对象添加Composite Collider组件,并设置Geometry Type为"Polygons",同时在Tilemap Collider组件中勾选"Used By Composite"
12、添加Cinemachine Confiner
1)创建多边形对象指定地图区域
2)给Virtual Camera对象的Add Extension添加Cinemachine Confiner组件
3)如果Virtual Camera对象不是在当前Scene中,
需要在代码中指定Cinemachine Confiner组件的m_BoundingShape属性为多边形对象
13、某个脚本执行的前提条件是存在某个组件的写法
[RequireComponent(typeof(SpriteRenderer))]
14、创建ScriptableObject组件
1)能否挂载到游戏物体上?
不能,因为它不是继承自MonoBehaviour
2)使用方法?
创建类继承自ScriptableObject
通过[CreateAssetMenu(fileName=xx, menuName=xx)]指定属性信息
15、PropertyAttribute类及核心方法
自定义属性特性的基础类,提供类似[SerializeField]的属性标签
1)GetPropertyHeight指定像素高度
2)OnGUI重绘信息UI
16、CanvasGroup组件作用
用于集中控制UI元素的透明度、交互性和射线投射行为。
17、Aspect Ratio Fitter组件的作用
按照给定的宽高比调整UI元素的尺寸。
18、TextMeshPro组件作用
是一个Unity文本组件,比Text文本样式更加丰富和灵活,缺点是找不到字体不会像Text有默认字体。
19、Canvas的Render Mode含义和3种模式的区别
含义:Render Mode为渲染模式,指UI的呈现方式
Screen Space-Overlay:Canvas会覆盖整个屏幕,所有UI元素的坐标都是基于屏幕空间的。UI元素会始终显示在屏幕的最前面,不受场景种其他物体的影响。
Screen Space-Camera:Canvas会被放置在指定的摄像机前方,UI元素的坐标也是基于屏幕空间的,但会受到摄像机的影响。UI元素会随着摄像机的移动和旋转而变化。
World Space:Canvas会作为3D场景中的一部分,UI元素的坐标是基于世界空间的,UI元素会像3D对象一样存在于场景中,可以与其他3D对象进行交互。
20、拖动物体的3个事件接口
开始时:IBeginDragHandler
拖动时:IDragHandler
结束时:IEndDragHandler
21、ContentSizeFitter组件的作用
根据内容的大小自动调整UI元素的大小,确保内容不会被截断或溢出
22、Vertical Layout Group组件的作用
用于在垂直方向上自动排列子对象的局部管理组件。
UI布局可以随着元素数量或窗口大小动态调整。
23、鼠标经过的2个事件接口/鼠标点击的事件接口
经过开始点:IPointerEnterHandler
经过结束点:IPointerExitHandler
鼠标点击:IPointerClickHandler
24、AnimatorOverrideController类的作用/2种使用方法
动画重写控制器。
1)AnimatorOverrideController aoc = new AnimatorOverrideController(animator.runtimeAnimatorController);
其中animator为对象的Animator组件
animator.runtimeAnimatorController = aoc;
aoc["shot"] = weaponAnimationClip[weaponIndex]
2)AnimatorOverrideController aoc = new AnimatorOverrideController(animator.runtimeAnimatorController);
List<KeyValuePair<AnimationClip, AnimationClip>> clipOverrides;并进行赋值
aoc.GetOverrides(clipOverrides);
aoc.ApplyOverrides(clipOverrides);
25、附加方式加载Scene并设置Active的方法
SceneManager.LoadSceneAsync(xx, LoadSceneMode.Additive);
SceneManager.SetActiveScene(xxScene);
26、Start()方法当协程使用的方法
将返回值改为IEnumerator,其他周期函数都不行
同时需要在方法体中有IEnumerator类型的返回
27、确保某个脚本的Start()方法先执行的方法
在Edit -> Project Settings -> Script Execution Order中设置脚本的执行顺序