Unity小技巧
Unity相关的一些小技巧
款冬
所有文章搬运自个人Github: https://github.com/YuzikiRain/Learn。
如遇到csdn显示问题,复制文章标题到Github的Learn仓库中直接查看markdown原文
展开
-
使用Cinemachine实现屏幕震动 implement ScreenShake with Cinemachine impulse
新建Noise Settings设置Noise Raw Signal注意,这里只需要设置Position Y的Amplitude为1(另外建议勾选non-random,使得震动是非随机的),而Position X 和 Positoin Z的 Amplitude 设置为0,否则方向是不对的用以下代码产生震动信号/// <summary>/// 屏幕震动/// </summary>/// <param name="direction">方向<..原创 2020-06-27 10:47:42 · 3319 阅读 · 1 评论 -
Addressables简单使用指南 Addressables Manual
异步加载资源地址就是在Addressables Groups里看到的具体资源的地址,只要给定地址就能找到需要的资源使用地址加载// 参数为资源地址,包含后缀.prefab,handle.Result就是实例化的物体,而不是prefabAddressables.InstantiateAsync("address of prefab");// 参数为资源地址,包含资源后缀名Addressables.LoadAssetAsync("address of asset");使用直接资源引用AssetR原创 2020-06-27 10:42:24 · 6893 阅读 · 0 评论 -
运行时设置材质属性 set material property at runtime
private UnityEngine.MaterialPropertyBlock _block;void On(){ int value = 1; _block = new UnityEngine.MaterialPropertyBlock(); _block.SetInt("propertyName in your shader", value); GetComponent<UnityEngine.MeshRenderer>().SetPropertyB原创 2020-06-27 10:36:30 · 852 阅读 · 0 评论 -
修改project template
Menu -> Edit -> Project Settings -> Editor -> Default Behavior Mode参考Unity Manual: Working in Unity -> Getting Started -> Project TemplateUnity Manual: Working in Unity -> Editor Features -> 2D and 3D mode settingsUnity Manual.原创 2020-06-27 10:35:21 · 517 阅读 · 0 评论 -
向量之间的旋转角度(不是夹角)Rotate Angle Between Vector(Not Vector3.Angle)
用途已知角色的面朝方向和目标位置,求角色要朝哪个方向旋转多少角度才能正好面朝目标代码using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour{ public Transform target; void Update() { Vector3 targetDir = target.position - transform.position;原创 2020-06-27 10:33:56 · 1637 阅读 · 0 评论 -
动画事件多个参数 Animation Event Multi Parameters
多个参数public void MyAnimationEventHandler (AnimationEvent animationEvent) { string stringParm = animationEvent.stringParameter; float floatParam = animationEvent.floatParameter; int intParam = animationEvent.intParameter; // Etc. }原创 2020-06-27 10:32:40 · 1616 阅读 · 0 评论 -
3D游戏常用API
将世界空间方向转换为本地空间方向范例:角色transform.forward = (1, 0, 0)(世界空间),Velocity = (0, 0, 1)(世界空间),通过以下函数var direction = transform.InverseTransformDirection(Velocity);得出direction为(-1, 0, 0),即角色正在朝角色左方向移动(同一空间下)将矢量(0, 0, 1)旋转到其正上方为upwards,正前方为forward所需要的旋转矩阵public s原创 2020-06-27 10:29:36 · 561 阅读 · 0 评论 -
Unity游戏开发工程师简历筛选用题目
程序基础用任意语言实现快速排序(或选择/插入/冒泡排序+其他任意一种),并阐述其关键思想用任意语言表示除了单例/状态/策略/观察者模式的任意 1 种设计模式(或是单例/状态/策略/观察者模式中的任意的 1 种 + 其他任意 1 种设计模式),并阐述其关键思想Unity基础让以下代码顺利运行,并解释为什么与预期结果不相符,如何修改才能得到预期结果视差滚动(具体效果描述自...原创 2019-09-29 01:13:52 · 1985 阅读 · 0 评论 -
(UGUI)UI follow gameObject UI跟随物体
Doesn’t workVector3 viewPos = Camera.main.WorldToScreenPoint(anchorPoint.position);GetComponent<RectTransform>().position = new Vector2(viewPos.x, viewPos.y);works only when Component().U...原创 2019-09-26 20:13:03 · 588 阅读 · 0 评论 -
用同一个shader创建不同的Material create different materials with same shader
使用 GetComponent().sharedMaterial 会报错 “Instantiating material due to calling renderer.material during edit mode. This will leak materials into the scene. You most likely want to use renderer.sharedMa...原创 2019-08-15 19:09:26 · 1652 阅读 · 0 评论 -
制作可用于Unity Package Manager的自定义Pacakage create custom package for unity package manager
Create custom package确保要做成package的目录代码没问题之后,在Editor的Project视图中在该目录下右键Create->Assembly Definition在GitHub创建远程仓库,创建子文件夹package并命名(保证文件夹是空的),使用仓库地址和本地相对路径创建子模块提交.gitmodules和submodule的commit(完成子模...原创 2019-07-19 23:40:15 · 990 阅读 · 0 评论 -
防止变量引用丢失 FormerlySerializedAs
一般的用法:重命名某public或[Serialized]的字段后,会导致引用丢失,在重命名之前加上该标签保存引用则可以避免。防止重命名变量后丢失引用using UnityEngine;using UnityEngine.Serialization;public class MyClass : MonoBehaviour{ // 旧的变量名为myValue,重命名为myNewValu...原创 2018-11-24 12:28:46 · 4452 阅读 · 0 评论 -
activeactiveInHierachy activeself区别
activeself:该物体是否激活activeactiveInHierachy:该物体以及父物体、父物体的父物体…直到最顶层,是否都是激活状态。如果父物体未激活,那么所有子物体的activeactiveInHierachy都是false,如果用active来显示/隐藏物体,那么可用activeactiveInHierachy简单地判断该物体在场景中是否被显示...原创 2018-12-04 15:37:07 · 540 阅读 · 0 评论 -
Unity KeyCode
GetKey(string name)函数中KeyCode对应的nameThe names of keys follow this convention:Normal keys: “a”, “b”, “c” …Number keys: “1”, “2”, “3”, …Arrow keys: “up”, “down”, “left”, “right”Keypad keys: “[1]”, ...原创 2019-01-04 19:14:25 · 1960 阅读 · 0 评论 -
Unity 屏幕坐标到UGUI RectTransform本地坐标的转换
public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);rect: 对应的 RectTransform 的引用screenPoint: 位置,基于屏幕坐标系cam: 相机的引用,如果C...原创 2019-01-14 15:35:47 · 12707 阅读 · 0 评论 -
Unity Animator 子状态机的状态全名称
public void CrossFadeInFixedTime(string stateName, float fixedTransitionDuration);stateName由三部分组成,LayerName.SubStateName.StateName等同于以下代码int stateHashName = Animator.StringToHash("LayerName.SubSta...原创 2019-01-19 21:37:16 · 4141 阅读 · 0 评论 -
unity 用私有构造函数来避免用new创建Component实例
当确定了一些类是需要挂在GameObject上的组件后,这些类需要继承自MonoBehavior,然而在某些地方仍会不小心使用new操作符创建了该类的实例。私有构造函数class ExampleComponent : MonoBehavior{ private ExampleComponent() {} // other code}确保仅有一个私有构造函数,这样在使用时无法使用...原创 2019-01-15 15:56:21 · 1566 阅读 · 0 评论 -
Unity获得内置资源(字体或Material等)
内置字体Font BuildInFont = Resources.GetBuiltinResource<Font>("Arial.ttf");内置MaterialMaterial mat = new Material(Shader.Find("Sprites/Default"));原创 2019-07-19 23:34:20 · 5675 阅读 · 0 评论 -
Unity .gitignore文件
# This .gitignore file should be placed at the root of your Unity project directory## Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore#/[Ll]ibrary//[Tt]emp//[Oo]bj...原创 2019-07-19 23:35:44 · 3742 阅读 · 2 评论 -
API
协程: 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。AddForceAtPosition: 在指定位置对刚体施加力,一般在数帧内持续使用,位置接近物体表面,用于模拟爆炸冲击力。CharacterController和Rigidbody的区别: Rigidbody具有完全真实物...原创 2018-06-20 18:31:08 · 220 阅读 · 0 评论