腳本生命周期
//每當腳本被加載時調用一次
// 1. 在Awake中做一些初始化操作
void Awake(){
//初始化public成員
}
// 2. 在每次激活腳步時調用
void OnEnable(){}
//在第一次調用Update之前調用一次Start释液,即使取消激活,再激活也不會再執(zhí)行
// 3. 在Start中做一些初始化操作
void Start(){
//一般做一些私有成員
}
// 4. 每幀調用一次Update
void Update(){}
// 5. 在Update方法調用完之后調用
void LateUpdate(){} //如刷新完邏輯操作
// 6. 取消激活狀態(tài)后調用
void OnDisable(){}
// 7. 腳步被銷毀時調用
void OnDestroy(){} //如怪物死亡爆東西
// 8. 持續(xù)調用 - IMGUI代碼需要寫在OnGUI 方法中和UGUI刨晴,NGUI
void OnGUI(){
}
// 9. 以固定的頻率調用磁椒,不會受到圖像刷新幀速率的影響
//一般我們會把處理物理的代碼放在這里
void FixedUpdate(){}
Input
//n參數(shù) 0 鼠標左鍵
//n參數(shù) 1 鼠標右鍵
//n參數(shù) 2 鼠標中建
Input.GetMouseButtonDown(n) //檢測鼠標按鍵按下事件
Input.GetMouseButtonUp(n) //檢測鼠標按鍵彈起事件
Input.GetMouseButton(n) //檢測鼠標持續(xù)按下的事件
GameObject
//gameObject 獲取當前腳本所掛載的游戲對象
//一般來說,在屬性視圖中能看到或修改的屬性,我們同樣可以在腳本中獲取并修改
gameObject屬性如
1. name 、tag 吴攒、
2. gameObject.activeSelf //獲取當前游戲對象的激活狀態(tài) bool類型
3. gameObject.SetActive //設置游戲對象的激活狀態(tài)
//4. 獲取游戲對象身上的組件 如
controller c = gameObject.GetComponent<objectname>();
//5. 給游戲對象添加指定類型的組件
Light l = game.AddComponent<Light>();
//6. 通過tag值查找游戲對象
GameObject g = GameObject.FindGameObjectWithTag(“TagName”);
GameObject gg = GameObject.FindWithTag(“TagName”);
//7. 通過游戲對象名查找游戲對象
GameObject g = GameObject.Find(“Object Name”):
g.name = “改名”;
//8. 通過Tag值查找多個游戲對象
GameObject [] gs = GameObject.FindGameObjectWithTag(“Object Name”);
//9. 銷毀游戲對象 可加參數(shù)2:延遲時間(s)后銷毀
GameObject.Destroy(gameObject,2f);
Vector
1. 一個類张抄,表示向量,向量既有大小又有方向的量
Vector3 v = new Vector3();
成員方法:
- //獲取V的單位向量 V的長度會變成1洼怔,但方向不變
v.Normalize();
- //返回V方向上的單位向量署惯,但是V本身不會發(fā)生變化
Vector3 vn = v.normalized;
- //獲取V的長度
float l = v.magnitude;
- 類方法:
// x=0,y=1,z=0
Vector3.up 表示世界坐標系中Y軸正方向的單位向量
// x=0,y=-1,z=0
Vector3.down 表示世界坐標系中Y軸負方向的單位向量
// x=1,y=0,z=0
Vector3.right 表示世界坐標系中X軸正方向的單位向量
// x=-1,y=0,z=0
Vector3.left 表示世界坐標系中X軸負方向的單位向量
// x=0,y=0,z=1
Vector3.forward 表示世界坐標系中Z軸正方向的單位向量
// x=0,y=0,z=-1
Vector3.back 表示世界坐標系中Z軸負方向的單位向量
// x=0,y=0,z=0
Vector3.zero 表示原點
- //求兩個向量的夾角 參數(shù)都是Vector的對象
float f = Vector.Angle(V1,V2);
- //求兩個向量的距離
float f = Vector.Distance(V1,V2);
- //向量點乘
float d = Vector3.Dot (v1,v2);
//兩個向量的叉積
Vector vc = Vector3.Cross(v1,v2);
Transform
//獲取當前腳本所掛載的游戲對象身上的Transform組件
//transform
- //控制游戲對象的位置、旋轉镣隶、縮放
//position 屬性 - 世界坐標系中的位置
Vector3 pos = transform.position;
- //localPosition 屬性 - 局部坐標系中的位置
transform.localPosition
- //一般不直接修改四元數(shù)
transform.rotation
transform.localRotation
- 快捷鍵:對象
Q平移 W移動 E旋轉 R縮放
- //localScale - 控制游戲對象的縮放
Vector3 v = transform.localScale;
- //變換當前游戲對象
transform.Translate (new Vector3(0,1,0));
- //旋轉當前游戲對象
transform.Rotate (Vector.up,10f);
- //歐拉角 - 屬性(直接旋轉角度极谊,不會重復旋轉)
transform.eulerAngles = new Vector(0f,45f,0f);
- //控制游戲對象間的父子關系
//獲取/重新指定 當前游戲對象父對象的transform組件
transform.parent;
- //獲取當前游戲對象的根父對象
transform.root;
- //獲取當前游戲對象 叫做name 的子對象
transform.Find(“name”);
transform.FineChild(“name”);
Time
- //Time類用來進行時間控制
float t = Time.time; (從游戲開始到當前所用時間)
- //從上一幀開始到當前幀結束,這兩幀之間的時間間隔
Time.deltaTime
- //讓當前游戲對象每秒準確地旋轉 30 度
transform.Rotate(Vector3.up , Time.deltaTime * 30f);
- //表示時間流逝的快慢
// 1 - 表示正常時間流逝
// 2- 表示時間流逝加快安岂,是正常速度的兩倍
// 0 - 表示時間停止轻猖,游戲暫停
float ts = Time.timeScale;
Mathf
- //求絕對值
int i = Mathf.Abs(-12);
- //求最大最小值
int m = Mathf.Max(12,15,15,17);
int ni = Mathf.Min(12,14);
- //三角函數(shù)
Mathf.Sin();
Mathf.Cos();
Mathf.PI();
Mathf.Sqrt(); //平方根
Prefab 預設體
例子:
public GameObject playerPrefab; //預設體 從外面掛載進來
Vector pos = new Vector3 ();
pos.y = 0.5;
pos.x = Random.Range(-5f,5f); //給一個范圍隨機數(shù)產(chǎn)生坐標
pos.z = Random.Range(-5f,5f);
float angle = Random.Range.Range (0f,360f);
- 動態(tài)添加預設體
//參數(shù)1:預設體
參數(shù)2: 創(chuàng)建出的游戲對象初始位置
參數(shù)3: 創(chuàng)建出的游戲對象初始旋轉角度 四元數(shù)旋轉角 (不需要的參數(shù)都可不加)
Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up));
- 若要接收,Instantiate返回的類型是object,所以要轉換
GameObject g = Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up)) as GameObject;
g.AddComponent<Light>(); 可往添加組件
鼠標事件
必須物體的Collider被激活,否則無法觸發(fā)
- 當鼠標點擊下去時調用
void OnMouseDown(){}
- 當鼠標持續(xù)按下左鍵不放時調用(可在物體外松開取消調用)
void OnMouseDrag(){}
- 當鼠標取消點擊時調用
void OnMouseUp(){}
4 當鼠標進入到內部時調用
void OnMouseEnter(){}
- 當鼠標持續(xù)停留在游戲對象身上時調用
void OnMouseOver(){}
- 當鼠標離開內部時調用
void OnMouseExit(){}
- 當我們像點擊按鈕一樣點擊游戲對象(在對象內部松開才能生效域那,離開物體無效)
void OnMouseUpAsButton
剛體 Rigidbody
剛體使用使物體位移和transform同時使物體位移是不對的咙边,只能使用其中一個
屬性:
Mass質量
Drag空氣阻力
Angular Drag角阻力(旋轉時受的)
Use Gravity 重力影響
Is Kinematic 是否使用運動學
Interpolate 插值 (如物體不停的顫抖時可試用)
內插值 Interpolate
根據(jù)上一幀的位置推算這一幀的位置
外插值 Extrapolate
預測下一幀的位置推算這一幀的位置
Constrains Detection 碰撞檢測
Discrete 離散碰撞檢測
Continuous 連續(xù)碰撞檢測 (如子彈速度太快,上下幀時已經(jīng)傳過障礙物次员,對高速運動)
Continuous Dynamic 連續(xù)動態(tài)碰撞檢測 (兩個都是高速的碰撞)
Constraints 約束
讓物體在某個軸上無法位移
freezePosition
讓物體在某個軸上無法旋轉
freezeRotation
Rigidbody rb = GetComponent<Rigidbody>();
//添加力 力的物體上必須有剛體
要有添加爆炸力腳本的對象才會受影響
- //給當前游戲對象施加一個力
rb.AddForce(new Vector3(0f,10f,0f));
- //給當前游戲對象添加力矩/扭矩败许,扭矩可以使物體旋轉
rb.AddTorque(new Vector3(0f,10f,0f));//y軸施力
- //給游戲對象在指定的位置上添加一個力
rb.AddForceAtPosition(new Vector3(0f,10f,0f), new Vector(0.5f,0.5f,0.f));
- //在指定位置添加一個爆炸力
//參數(shù)1:爆炸力大小 參數(shù)2:爆炸位置 參數(shù)3:爆炸范圍半徑
rb.AddExplosionForce(1500f, Vector.zero,4f);
Collider
發(fā)生碰撞的條件:
1.雙方都有Collider,2.至少一方有剛體, 3.兩個物體之間發(fā)生相互運動
(去碰撞的物體最好要有剛體淑蔚,否則可能發(fā)生穿越市殷,無觸發(fā)碰撞 )
- //碰撞相關的三個事件
//碰撞開始時會調用一次
void OnCollisionEnter (Collision other){}
- //當碰撞持續(xù)發(fā)生的時候調用
void OnCollisionStay (Collision other){//檢測跟誰發(fā)生了碰撞
if(string.Equals (“Cube2” , other,gameObject.name))
}
- //碰撞結束時調用一次
void OnCollisionExit (Collision other){}
Trigger
如果Collider中的 is Trigger選中了,那么該物體無法使用剛體刹衫,但能使用觸發(fā)器
觸發(fā)器事件條件:
1.雙方有Collider 2.一方勾選Trigger 3.一方有剛體 (或角色體Character)
4.進入觸發(fā)范圍后不用一定要有相對運動
觸發(fā)器相關的三個事件 //如 CS進入安全區(qū)
- //剛剛進入觸發(fā)范圍時調用一次
void OnTriggerEnter (Collider other){}
- //持續(xù)待在觸發(fā)范圍內會一直調用
void OnTriggerStay (Collider other){}
- //離開觸發(fā)范圍時會調用一次
void OnTriggerExit (Collider other){}
材質
Create -> Physic Material 只有在有Collider得物體上才能添加
Physic Material 物理材質
屬性
Dynamic Friction 動摩擦力 A在B運動受到的摩擦力
Static Friction 靜摩擦力
Bounciness 彈性
彈力摩擦力結合情況
Friction Combine
Bounce Combine
子屬性: Average 平均值
Minimum 最小值
Multiply 相乘
Maximum 最大值