更新内容
- (2019/05/29) 更新MenuItem的详细使用
- (2020/03/21) 更新CustomEditor的内容
Unity的使用
这次终于不是自己单枪匹马的干,而是真的项目中使用Unity引擎来做开发了。
先附上官方文档:
1.Unity C# 中的一些比较重要的使用
1.MenuItem
1 | #if UNITY_EDITOR |
或者1
2
3
4
5using UnityEditor;
using UnityEngine;
[MenuItem("Project/Operation")]
public static void OperationRun(){}
上面的用法,貌似也可以被叫做Debug Menu ,感觉用处相当大。
便利的调用一些比较麻烦的函数,触发条件和时机需要自己掌控等等,总而言之,这个很重要。
但是要注意添加的方法都是static的方法,调用非静态函数的方法,我知道的有两个:
- 1.向静态函数中传递对象引用。
- 2.在静态函数遍历所有对象找到那个想要的对象并调用对象函数,这限于Unity中debug场景,毕竟可以遍历场景中的所有对象。使用
FindObjectofType
之类的函数。
其他要注意的是,这个功能算是对UnityEditor的扩展功能,使用的时候不要忘记:1
2
3
4
5#if UNITY_EDITOR
using UnityEditor
#endif
加上编译选项才安全。
2.Unity C# 中的序列化(Serialization)
SerializeField
HideInInspector
【Unity】HideInInspectorとSerializeFieldの興味深い関係
Serializable
3.MessagePack
4.FindObjectOfType
(シーン上にある該当する物の中からUnityが適当に選んだ1つが返ります。1つも存在していなかったらnullが返ります)
ゲームオブジェクトを参照して、スクリプトにアクセスするのがGetCompornetで、
スクリプトを参照して、スクリプトにアクセスするのがFindObjectOfTypeです。
就像上面说的那样,下面附上使用:
1 | public static Object FindObjectOfType (Type type); |
这个方法非常低效,不适合在每一帧都调用,可以利用SingletonPattern。
【Unity】GameObject.Find 系関数の処理速度の検証結果
5. Attribute
1. AddComponentMenu
2. RequireComponent
6. CustomEditor
Defines which object type the custom editor class can edit.
个人理解就是为自定义的类进行编辑器扩展。1
2
3
4// 无参数
[ ]
// 有参数
[ ]
关于参数的解释,我贴一下源码:
1 | using System; |
有参数版本的,设置为true的理由就是,inspedtedType子类也会显示这个部分的Editor内容。(说实话不太理解)
除此之外,isFallback
变量的作用我也不是很理解。
7. ContextMenu
可以在Inspector视图里直接调用函数?
2.C# 语法
?类型声明
?? operator
$ operator
=> operator
看见的第一眼以为是lambda表达式,但是后面接着出现的是是变量而不是表达式。
相当于{get;}
但是又不是简单的get。
1 | ◆ private A a => new A(); |
where关键字
一般类型约束?
For example, you can declare a generic class,
MyGenericClass
, such that the type parameter T implements theIComparable<T>
interface:
1 public class AGenericClass<T> where T : IComparable<T> { }
使用了模板但是约束了类型,是这样的么。
我发誓这个关键字在我以前用C#的时候肯定知道,但是我忘了。。
@
await/async
IEnumerator
3.Unity语法
1.Instantiate
根据Prefab生成实例。
3.LINQ (Linq)
当我想深入了解LINQ的时候,我发现我需要先理解Lambda表达式。
4.Reactive Extensions (Rx)
5.UniRx
这是我在知乎上找到的一篇文章,感觉能学到很多东西。
6.Lambda
直接搜C# lambda
最先出来的三个链接。
Unity中的插件
SteamVR Unity
要记录的是
SteamVR Unity Plugin v2这个Unity的VR开发插件。开始调查这个插件的契机是不知道SteamVR_Behaviour_Pose
这个类的作用,而明白这个是插件的内容。
上面的这个人的文章我看很厉害就直接先粘链接了。