延时运行函数
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; //长度的平方