Unity零散知识点
属性访问修饰符描述
public int CurItemID { get; set; } - get和set都是public
public int CurItemID { get; private set; } - get是public,set是private
public int CurItemID { get; } - 只读属性
List泛型集合移除末尾数据
// 不要用foreach遍历,要用for遍历
for (int i = ltype.Count - 1; i >= 0; i--) // 倒序遍历
{
if (ltype[i].id == 2)
ltype.RemoveAt(i);
}
创建一个浅表副本
// MemberwiseClone 方法,创建一个新对象,然后将当前对象的非静态字段复制到新对象。
// !!!MemberwiseClone() 返回 object 类型,直接 as T 可能返回 null
public T Clone<T>() where T : IfModel, new()
{
return (T)this.MemberwiseClone();
}
回调委托理解
函数委托回调是从里往外传参数(尽量用unity系统提供的Action和Func),正常函数传参数是从外往里传。委托它其实就是中介模式,我们不知道要干啥就写个委托,它作为参数传进方法中,在方法中触发了之后,会返回,只要是外部用另一个函数监听(就是“=”)了,就会触发不用的函数(我们想好要做的函数)。函数、方法、动作都是一回事。
1.Action<参数> OnHit 声明
2.public void Hit()
{
OnHit?.Invoke(gameObject); // 使用null条件运算符
}
这是触发,谁调用"Hit()"就触发了"委托、或者叫回调"。
3 另一个类中
boxCtrl.OnHit = BoxHit; 监听左边里边的方法,一旦触发,则外边方法被调用
带"="表示监听,那边触发了,这边就调用"BoxHit"这个方法。
"BoxHit"方法也叫回调,可以先写,然后等待别的地方监听
svn更新失败提示cleanup的解决方法
- 一般出现这个提示,兄弟姐妹,请首先看下你是不是正在打开着svn的某个文件,在打开某个文件的情况下,去update会造成svn更新锁定。首先关掉打开的所有svn文档,然后右键找到cleanup
- 然后如下如执行cleanup ,记得一定要勾上break write locks
C#中反射区别
this.GetType().Assembly.GetName().版本 VS Assembly.GetExecutingAssembly().GetName().版本
this.GetType()获取当前实例的多态类型,它实际上可能是您正在调用this.GetType()的类的子类,并且该子类可能位于不同的程序集中
AssemblyA.dll:
public class Foo
{
public void PrintAssembly()
{
Console.WriteLine(this.GetType().Assembly.GetName());
Console.WriteLine(Assembly.GetExecutingAssembly().GetName());
}
}
AssemblyB.dll:
public class Bar : Foo{}
现在,如果您运行以下代码:
Bar b = new Bar();
b.PrintAssembly();
两种确定装配方式的结果将不一样;this.GetType().Assembly将返回AssemblyB(因为它的实际类型是Bar),而Assembly.GetExecutingAssembly()返回AssemblyA,因为那是包含Foo.PrintAssembly()方法的程序集。只有当包含对this.GetType()的调用的类型被密封(sealed 类不能被继承)时,才能确定它们引用相同的程序集(AssemblyA)。
// 获取当前实例真实类型所在的程序集
this.GetType().Assembly
// 获取当前执行代码所在的程序集
Assembly.GetExecutingAssembly()
// 获取调用者所在的程序集
Assembly.GetCallingAssembly()
前后台切换检测改进
// 更完整的前后台检测
void OnApplicationPause(bool pauseStatus)
{
if (pauseStatus)
{
// 进入后台
OnGamePause();
}
else
{
// 回到前台
OnGameResume();
}
}
void OnApplicationFocus(bool hasFocus)
{
// iOS平台主要用这个
}
UI适配三个关键点
- 根据sizeDelta(非锚点)进行适配时 UIRoot中Canvas Scaler选择Constant Pixel Size
- UIRoot中Canvas Scaler =>Scale with Screen Size =>1920x1080 其中Width为1(由于是横屏)
- 设置Scale With Screen Size是为了背包那些列表 的缩放
其他
1.动画立即切换状态:每个状态都要不勾选has exit time,以便不需要动画播放结束就可以及时切换
2.传送门效果实现原理:在门两侧放两个RenderTexture 两个碰撞检测点 两个角色初始点
3.Debug模式:可以直接看到SizeDelta,代表的是rect宽高
4.JSON读表用的泛型反序列化json加载,在plugin的dll中
5.QTE玩法(Video Player实现) quick time event eg QQ炫舞中Perfect和Good
✨随便写写
by 八月长安
Unity开发核心知识点整理
1900

被折叠的 条评论
为什么被折叠?



