[size=medium]首先,unity 编辑器是 一个 ide.
ide是用于写程序的.
语言,unity javascript ,c# , boo.
如有图形学基础最好.
期间,遵循一些规则方能事半功倍.
1 unity帮助文件的 脚本参考的index.html需要看熟并练熟.
Common Operations
介绍 MonoBehaviour的Update方法的使用.
所有可附加到 组件上的脚本都是MonoBehaviour的子类.
类层次关系:
Object
Component
MonoBehaviour
your code.
Keeping Track of Time
介绍 Update方法中如何结合时间实现时间动画.
默认是 逐帧动画.
Accessing Other Components
介绍 在脚本中如何获取到 目标组件.
1 通过unity提供的 属性,如transform
2 通过 Component.GetComponent方法.
Accessing Other Game Objects
介绍 在脚本中如何获取到 别的 GameObject
1 在Inspector中拖动GameObject或Component,给目标赋值.
2 通过Transform.Find方法
3 通过GameObject.Find方法,GameObjectFindWithTag方法
4 作为参数传递.
5 通过 Object.FindObjectsOfType或Ojbect.FindObjectOfType
Vectors
介绍 向量的操作.
向量有大小和方法.
unity中顶点和方向都用VectorX[2,3,4]来存放.
顶点和方向的区别是:
顶点是空间中某具体的点,方向不需要长度,往往转为单位向量(归一化).
Member Variables & Global Variables
介绍 变量的作用域
Instantiate
介绍 如何克隆一个完整的物体.
Coroutines & Yield
介绍 协程,中断.
1 yield WaitForSeconds(1); //js,中断1s
2 yield; //js,中断1帧
3 yield Fun();//js,等Fun执行完毕.
Writing Scripts in C# & Boo
介绍 c#,boo的程序.
1 继承自MonoBehaviour
2 使用Awake或Start来做初始化
3 类名必须与文件名一致.
4 c#协程与js的不同.
IEnumerator SomeCoroutine(){ //返回值必须是IEnumerator,不能是IEnueratable
yield return 0;//或 yield return null; //中断1帧
yield return new WaitForSeconds(2); //中断2s
}
5 unity的脚本不能用命名空间
但引入的dll是可以有命名空间的.
6 只有成员被序列化并在Inspector中显示.
1 private,protected的成员在Debug模式下显示.
2 属性不序列化不显示.
3 需要序列化的private成员,需要加特性[SerializedField]
7 必须使用构造器或变量初始化器.
unity在编辑模式也会自动调用构造器,Start和Awake用于初始化.
当继承ScriptObject类时,需要使用构造器进行初始化.
The most important classes
unity的几个核心类.
1 MonoBehaviour 所有功能脚本程序的基础类.
2 Transform 移动/旋转/缩放物体.
3 Animation 动画系统
4 Rigidbody 刚体(不会发生形变).物理系统
5 CharacterController 控制角色移动.
Performance Optimization
unity程序设计性能方面的考虑,针对js
1 中使用静态类型(确定的类型),避免动态类型的性能损失
如 var age = 100,改为 var age:int = 100;
2 使用 #pragma strict,通告编译器使用严格模型.
3 使用变量缓存组件.
避免Update中反复查找.如
function Update(){
transform.Translate(0,0,5);
}
改为:
private var myTransform : Transform;
function Awake () {
myTransform = transform;
}
function Update () {
myTransform.Translate(0, 0, 5);
}
4 使用内置数组.代替 Array及ArrayList,如:
var positions:Vector3[] = new Vector3[100];
远快过: var positions:Array;
5 减少方法调用
最好的优化手段是,不调用(或不渲染).
1 利用MonoBehaviour的OnBeCameVisible(被任一摄影机看到),OnBecameInvisible(没有摄影机看到)
function OnBecameVisible () {
enabled = true;
}
function OnBecameInvisible () {
enabled = false;
}
2 使用OnTriggerEnter/Exit.
function OnTriggerEnter (c : Collider) {
if (c.CompareTag("Player"))
enabled = true;
}
function OnTriggerExit (c : Collider) {
if (c.CompareTag("Player"))
enabled = false;
}
Script compilation (Advanced)
介绍unity脚本编译顺序
unity将所有脚本编译为.Net dll,.dll将在运行时即时编译(jit);
1. 首先编译目录"Standard Assets","Pro Standard Assets","Plugins"目录.
2. 再编译"Standard Assets/Editor","Pro Standard Assets/Editor","Plugins/Editor"目录.
3. 再编译 Editor目录之外的脚本
4. Editor目录内的脚本最后编译.
WebPlayerTemplates目录不编译.
根据unity版本进行编译:
#if UNITY_2_6_0
//使用 2.6.0
#endif
#if UNITY_2_6
//使用 2.6.x
#endif
Unity and Mono compatibility
unity中可以使用的mono类库的兼容性
Generic Functions
介绍泛型方法的使用.
2 部分设计哲学.
1 GameObject 与 Component的区别.
1 感官上
GameObject就是 Hierarchy中的节点.
Component就是Inspector中,可折叠起来的小节点.
2 显示位置:
GameObject显示在Hierarchy中.
Component显示在Inspector中.
3 对应方式
GameObject可以形成容器,但需通过Transform类来访问子GameObject.
GameObject可附加多个Component.1对多.反之不行.
Component不能再附加组件.
2 MonoBehaviour的 生存周期.
[img]http://dl.iteye.com/upload/attachment/0067/2635/155ddb82-9563-33e5-9e1d-06f03a5a0a08.jpg[/img]
此类是unity脚本的基础.
1 脚本启动的生存周期
Awake
OnEnable
Start
Update
FixedUpdate
OnGUI
LateUpdate
OnDisable
OnDestroy
2 渲染周期
OnPreCull 视锥剔除前
OnPreRender 渲染前
OnPostRender 渲染后
OnRenderObject 渲染物体
OnRenderImage 后期处理已生成的图片(像素)
3 MonoBehaviour的 面目.
注意:编辑器中禁用脚本时,会阻止Start,Awake,Update,FixedUpdate,OnGUI这些方法的执行.
当脚本中没这几个方法中的其中一个,不会显示复选框
1 变量:
useGUILayout:boolean
false时跳过GUI布局阶段.
在当前OnGUI调用中不使用GUI.Window和GUILayout才有效.
2 方法:
Invoke : 几秒后调用某方法.
function Invoke (methodName : String, time : float) : void
InvokeRepeating : 重复调用某方法
function InvokeRepeating (methodName : String, time : float, repeatRate : float) : void
CancelInvoke : 取消重复调用的方法
function CancelInvoke () : void
function CancelInvoke (methodName : String) : void
IsInvoking : 查看某方法是否处于调用列表中.
function IsInvoking (methodName : String) : boolean
StartCoroutine : 开始某协程.
function StartCoroutine (routine : IEnumerator) : Coroutine
function StartCoroutine (methodName : String, value : object = null) : Coroutine
StopCoroutine : 停止某协程.
3 重载的方法:[/size]
......待续
ide是用于写程序的.
语言,unity javascript ,c# , boo.
如有图形学基础最好.
期间,遵循一些规则方能事半功倍.
1 unity帮助文件的 脚本参考的index.html需要看熟并练熟.
Common Operations
介绍 MonoBehaviour的Update方法的使用.
所有可附加到 组件上的脚本都是MonoBehaviour的子类.
类层次关系:
Object
Component
MonoBehaviour
your code.
Keeping Track of Time
介绍 Update方法中如何结合时间实现时间动画.
默认是 逐帧动画.
Accessing Other Components
介绍 在脚本中如何获取到 目标组件.
1 通过unity提供的 属性,如transform
2 通过 Component.GetComponent方法.
Accessing Other Game Objects
介绍 在脚本中如何获取到 别的 GameObject
1 在Inspector中拖动GameObject或Component,给目标赋值.
2 通过Transform.Find方法
3 通过GameObject.Find方法,GameObjectFindWithTag方法
4 作为参数传递.
5 通过 Object.FindObjectsOfType或Ojbect.FindObjectOfType
Vectors
介绍 向量的操作.
向量有大小和方法.
unity中顶点和方向都用VectorX[2,3,4]来存放.
顶点和方向的区别是:
顶点是空间中某具体的点,方向不需要长度,往往转为单位向量(归一化).
Member Variables & Global Variables
介绍 变量的作用域
Instantiate
介绍 如何克隆一个完整的物体.
Coroutines & Yield
介绍 协程,中断.
1 yield WaitForSeconds(1); //js,中断1s
2 yield; //js,中断1帧
3 yield Fun();//js,等Fun执行完毕.
Writing Scripts in C# & Boo
介绍 c#,boo的程序.
1 继承自MonoBehaviour
2 使用Awake或Start来做初始化
3 类名必须与文件名一致.
4 c#协程与js的不同.
IEnumerator SomeCoroutine(){ //返回值必须是IEnumerator,不能是IEnueratable
yield return 0;//或 yield return null; //中断1帧
yield return new WaitForSeconds(2); //中断2s
}
5 unity的脚本不能用命名空间
但引入的dll是可以有命名空间的.
6 只有成员被序列化并在Inspector中显示.
1 private,protected的成员在Debug模式下显示.
2 属性不序列化不显示.
3 需要序列化的private成员,需要加特性[SerializedField]
7 必须使用构造器或变量初始化器.
unity在编辑模式也会自动调用构造器,Start和Awake用于初始化.
当继承ScriptObject类时,需要使用构造器进行初始化.
The most important classes
unity的几个核心类.
1 MonoBehaviour 所有功能脚本程序的基础类.
2 Transform 移动/旋转/缩放物体.
3 Animation 动画系统
4 Rigidbody 刚体(不会发生形变).物理系统
5 CharacterController 控制角色移动.
Performance Optimization
unity程序设计性能方面的考虑,针对js
1 中使用静态类型(确定的类型),避免动态类型的性能损失
如 var age = 100,改为 var age:int = 100;
2 使用 #pragma strict,通告编译器使用严格模型.
3 使用变量缓存组件.
避免Update中反复查找.如
function Update(){
transform.Translate(0,0,5);
}
改为:
private var myTransform : Transform;
function Awake () {
myTransform = transform;
}
function Update () {
myTransform.Translate(0, 0, 5);
}
4 使用内置数组.代替 Array及ArrayList,如:
var positions:Vector3[] = new Vector3[100];
远快过: var positions:Array;
5 减少方法调用
最好的优化手段是,不调用(或不渲染).
1 利用MonoBehaviour的OnBeCameVisible(被任一摄影机看到),OnBecameInvisible(没有摄影机看到)
function OnBecameVisible () {
enabled = true;
}
function OnBecameInvisible () {
enabled = false;
}
2 使用OnTriggerEnter/Exit.
function OnTriggerEnter (c : Collider) {
if (c.CompareTag("Player"))
enabled = true;
}
function OnTriggerExit (c : Collider) {
if (c.CompareTag("Player"))
enabled = false;
}
Script compilation (Advanced)
介绍unity脚本编译顺序
unity将所有脚本编译为.Net dll,.dll将在运行时即时编译(jit);
1. 首先编译目录"Standard Assets","Pro Standard Assets","Plugins"目录.
2. 再编译"Standard Assets/Editor","Pro Standard Assets/Editor","Plugins/Editor"目录.
3. 再编译 Editor目录之外的脚本
4. Editor目录内的脚本最后编译.
WebPlayerTemplates目录不编译.
根据unity版本进行编译:
#if UNITY_2_6_0
//使用 2.6.0
#endif
#if UNITY_2_6
//使用 2.6.x
#endif
Unity and Mono compatibility
unity中可以使用的mono类库的兼容性
Generic Functions
介绍泛型方法的使用.
2 部分设计哲学.
1 GameObject 与 Component的区别.
1 感官上
GameObject就是 Hierarchy中的节点.
Component就是Inspector中,可折叠起来的小节点.
2 显示位置:
GameObject显示在Hierarchy中.
Component显示在Inspector中.
3 对应方式
GameObject可以形成容器,但需通过Transform类来访问子GameObject.
GameObject可附加多个Component.1对多.反之不行.
Component不能再附加组件.
2 MonoBehaviour的 生存周期.
[img]http://dl.iteye.com/upload/attachment/0067/2635/155ddb82-9563-33e5-9e1d-06f03a5a0a08.jpg[/img]
此类是unity脚本的基础.
1 脚本启动的生存周期
Awake
OnEnable
Start
Update
FixedUpdate
OnGUI
LateUpdate
OnDisable
OnDestroy
2 渲染周期
OnPreCull 视锥剔除前
OnPreRender 渲染前
OnPostRender 渲染后
OnRenderObject 渲染物体
OnRenderImage 后期处理已生成的图片(像素)
3 MonoBehaviour的 面目.
注意:编辑器中禁用脚本时,会阻止Start,Awake,Update,FixedUpdate,OnGUI这些方法的执行.
当脚本中没这几个方法中的其中一个,不会显示复选框
1 变量:
useGUILayout:boolean
false时跳过GUI布局阶段.
在当前OnGUI调用中不使用GUI.Window和GUILayout才有效.
2 方法:
Invoke : 几秒后调用某方法.
function Invoke (methodName : String, time : float) : void
InvokeRepeating : 重复调用某方法
function InvokeRepeating (methodName : String, time : float, repeatRate : float) : void
CancelInvoke : 取消重复调用的方法
function CancelInvoke () : void
function CancelInvoke (methodName : String) : void
IsInvoking : 查看某方法是否处于调用列表中.
function IsInvoking (methodName : String) : boolean
StartCoroutine : 开始某协程.
function StartCoroutine (routine : IEnumerator) : Coroutine
function StartCoroutine (methodName : String, value : object = null) : Coroutine
StopCoroutine : 停止某协程.
3 重载的方法:[/size]
......待续