Unity中需要注意的细节

169 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、Collider

两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。

2、Rigidbody

Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件。

3、修饰符

3.1 属性修饰符:

  • Serializable:按值将对象封送到远程服务器
  • STATread:是单线程套间的意思,是一种线程模型
  • MATAThread:是多线程套间的意思,也是一种线程模型

3.2 存取修饰符:

  • public:存取不受限制。
  • private:只有包含该成员的类可以存取
  • internal:只有当前工程可以存取
  • protected:只有包含该成员的类以及派生类可以存取

3.3 类修饰符:

  • abstract:抽象类。指示一个类只能作为其它类的基类
  • sealed:密封类。指示一个类不能被继承。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的

3.4 成员修饰符:

  • abstract:指示该方法或属性没有实现
  • sealed:密封方法。可以防止在派生类中对该方法的override(重载)。不是类的每个成员方法都可以作为密封方法密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用
  • delegate:委托。用来定义一个函数指针。C#中的事件驱动是基于delegate + event的
  • const:指定该成员的值只读不允许修改
  • event:声明一个事件
  • extern:指示方法在外部实现
  • override:重写。对由基类继承成员的新实现
  • readonly:指示一个域只能在声明时以及相同类的内部被赋值
  • static:指示一个成员属于类型本身,而不是属于特定的对象,即在定义后可不经实例化,就可使用
  • virtual:指示一个方法或存取器的实现可以在继承类中被覆盖
  • new:在派生类中隐藏指定的基类成员,从而实现重写的功能。 若要隐藏继承类的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它

4、堆和栈

  • heap是堆,stack是栈
  • stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配
  • stack空间有限,heap的空间是很大的自由区

5、值类型和引用类型

  • 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
  • 值类型存取速度快,引用类型存取速度慢。
  • 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
  • 值类型继承自System.ValueType,引用类型继承自System.Object
  • 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
  • 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

6、生命周期

Start、Update等方法,如果不用的话,删掉

7、sctive的判断

不能单靠读取一个对象的activeSelf属性值来判断这个对象是否处于激活状态。取而代之的是应该使用activeInHierarchy属性,它会把父对象的状态考虑在内。