延時運行函數
Invoke("函數名", 1.5f); //1.5秒後運行該函數
屏幕座標轉化爲世界座標
Vector3 WorldPos = Camera.main.ScreenToWorldPoint(ScreenPos); //參數是屏幕座標
世界座標轉化爲屏幕座標
Vector3 ScreenPos = Camera.main.WorldToScreenPoint(WorldPos); //參數是世界座標
兩位置之間的距離
float Distence = Vector3.Distance(Pos1, Pos2); //三維
float Distence = Vector2.Distance(Pos1, Pos2); //二維
單位化向量
Pos=Pos.normalized;
屏幕座標轉化爲UI座標的函數(方法一)
Vector3 GetUIPos(Vector2 ScreenPos, Canvas canvas) {
Vector3 pos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, ScreenPos, canvas.worldCamera, out pos);
return pos;
}
屏幕座標轉化爲UI座標的函數(方法二)
Vector3 GetUIPos(Vector2 ScreenPos) {
Vector2 pos = ScreenPos - new Vector2(Screen.Width / 2, Screen.Height / 2);
return new Vector3(pos.x, pos.y ,0);
}
求碰撞體的相對速度
void OnCollisionEnter2D(Collision2D c) {
float Speed = c.relativeVelocity.magnitude;
}
遍歷查找對象的子物體
foreach (Transform child in transform) {
if (child.gameObject.name == "要查找的子物體的名字") {
//執行操作
}
}
判斷碰撞到自己的物體是什麼
void OnCollisionEnter2D(Collision2D c) {
if (c.collider.name == "碰撞體的名字") {
//執行操作
}
}
在場景裏創建一個對象
GameObject Obj = Instantiate(gameObject, new Vector3(0, 0, 0), new Quaternion(0, 0, 0, 0));
//參數一:要創建的對象的預設
//參數二:物體的位置
//參數三:物體的旋轉角度
修改UI物體的座標
transform.GetComponent<RectTransform>().localPosition = new Vector3(0, 0, 0); //以屏幕中心爲原點
transform.GetComponent<RectTransform>().position = new Vector3(0, 0, 0); ///以屏幕左上角爲原點
修改某個對象所掛腳本里的public變量的值
GameObject.Find("對象的名字").GetComponent<腳本的名字>().變量名 = 新的值;
給變量添加說明
[Tooltip("說明內容")]
public int a = 0;
/*添加說明後,在Inspector窗口的代碼變量裏,將鼠標放在
變量名上一會兒就會出現說明內容,用於解釋變量的意義*/
給變量添加限制
[Range(-1f, 1f)] //限制值爲-1到1之間
public float a;
//添加限制後,編輯時就只能在這個範圍內修改
從某物體的子物體中獲取對象
//以下拿2D碰撞器舉例,其它同理
Collider2D X = transform.GetComponentsInChildren<Collider2D>();
將a對象置於b對象的子類中
a.transform.parent = b.transform;
localPosition和position的區別
transform.localPosition
其座標系的座標中心是它的父類位置(如果沒父類那就和position一樣的),直白的也可以說
該物體屬性窗口顯示的位置就是它的localPosition。
transform.position
世界座標系,物體通用的
foreach語句用法
foreach (Collider2D x in transform) { //遍歷transform子物體中含有2D碰撞器的物體x
if(Object1) { //遍歷查找是否含有Object1,有多個則執行多次
//操作
}
x.transform.position=... //對每個含有2D碰撞器的對象進行處理
}
//注意,只能遍歷一層子物體
//第一行的transform也可以替換成其它類型對象的數組,比如Collider2D的數組,這樣一來就是一個
//雙重循環了,對每一個碰撞器,都拿它對應的物體作爲transform。
角度弧度相互轉化
弧度數 = 角度數 * Mathf.Deg2Rad;
角度數 = 弧度數 * Mathf.Rad2Deg;
使物體朝向目標位置
transform.LookA(Vector3); //參數填寫世界座標
求向量的長度
Vector3 Pos = new Vector3(1, 1, 1);
float a = Pos.magnitude; //長度
float b = Pos.sqrMagnitude; //長度的平方