在使用网络上下载的涟漪特性shader时,发现所有的shader必须放在Post-process Layer组件上方才能正常运作,具体原理不明,推测unity的组件执行会根据组件放置顺序来执行 作用与camera的shader脚本和Post-process后期处理组件冲突,在将Post-process Layer组件中的Directly To Camera Target勾选去掉后问题得到解决,但是原因不明,如果有大佬知道原理还希望评论指出
unity使用Composite Collider2D合并Tilemap collider2D碰撞器会使Tilemap collider2D中心呈类空心状态,导致OnTriggerEnter2D等这些碰撞检查无法正确的触发(例如:当另外一个Collider进入TileMapCollider内部时,OnTriggerStay2D却没有触发),目前暂时通过再copy一个相同的Tilemap,并且不使用Composite 合并,勾选上Trigger,来应对此问题
C#中的&位逻辑与运算符,例如:100&99中将100和99分别转化位二进制形式即1100100和1100011,然后进行按位与运算,1和1比为1,1和0比为0,得1100000,转化为十进制为96,即100&99=96
unity可以通过sprite Editor改变图片的中心点位置从而改变场景中sprite精灵的中心点位置。
Physics2D.queriesStartInColliders = false;在start里面设置改属性,自身发射的射线会忽略自己的BoxColider
lineRender.GetComponent().SetPosition(int 0,new vector(x,y));–设置lineRenderer组件的起点
lineRender.GetComponent().SetPosition(int 1,new vector(x,y));–设置lineRenderer组件的终点
AssetBundle中,调用BuildPipeline.BuildAssetBundles(“Assets/streamingAssets”,BuildAssetsBundleOption.None,BuildTarget.Android)这个方法对修改了Assetbundle的资源进行打包,其中参数分别对应打包后的存放文件路径,构建Asset Bundle的方式以及对应的平台。
dictionary.add()方法添加的值若为变量需要重新new一下,不然之前用这个变量add进去的都会变成最新的这个的值,因为他复制的是地址,list同理。他们都是引用类型的。
out输出参数在参数传入方法时可以不用赋值,在方法结束前需给该参数赋值,一般用于有多个结果返回时使用输出参数
ref引用参数需在参数传入方法前对参数进行赋值操作,一般用于在方法内部直接改变传入参数的值。
关于GC回收,原理即在发现内存将要满了时,对栈中的引用进行跟踪,从而判断内存是否在使用,如果发现无法跟踪到其中一块堆内存,即将内存认为不再使用,可以回收.此过程会将可用的和不可用的进行一个分类,再进行回收.
字符串池,字符串在创建的时候系统会现在字符串池中查找是否有相同的文本,有则直接返回其引用,没有则会开辟空间创建一个新的。字符串常量一旦进入内存不得改变,若改变会破坏其他对象内存,导致内存泄露,字符串变量引用新值时,都会在内存中新建一个字符串
使用ref传入的string参数,为什么可以更改方法外string的值,因为ref将外面的string参数指向了方法内新开辟的string的内存空间地址
字符串转化为枚举:YourEnum yourEnum=(YourEnum)(Enum.Parse ( typeof ( YourEnum ), str ))
struct结构体中有参的构造函数需要:this()无参的构造函数才可为自动属性赋值
实例化一个T的时候,需要增加泛型约束,即:public class MyClass where T : new()
GPU每次渲染的时候切换渲染不同材质的时候,会有大量消耗,即为setpass call
同一个图集中的图片在UI中只会产生一次batches,但是也并非绝对,当同一图集的UI中穿插了来自别的图集的图片,则同一图集的图片也会被分割开来渲染,即多产生batches