Unity-Transform-坐标转换
世界坐标转本地坐标
print(Vector3.forward);
世界坐标系 转本地坐标系 可以帮助我们大概判断一个相对位置
世界坐标系的点 转换 为相对本地坐标系的点
//受到缩放影响
print("转换后的点 " + this.transform.InverseTransformPoint(Vector3.forward));
世界坐标系的方向 转换 为相对本地坐标系的方向
//不受缩放影响
print("转换后的方向" + this.transform.InverseTransformDirection(Vector3.forward));
//受缩放影响
print("转换后的方向(受缩放影响)" +this.transform.InverseTransformVector(Vector3.forward));
本地坐标转世界坐标
本地坐标系的点 转换 为相对世界坐标系的点 受到缩放影响
print("本地 转 世界 点" + this.transform.TransformPoint(Vector3.forward));
本地坐标系的方向 转换 为相对世界坐标系的方向
//不受缩放影响
print("本地 转 世界 方向" + this.transform.TransformDirection(Vector3.forward));
//受缩放影响
print("本地 转 世界 方向" + this.transform.TransformVector(Vector3.forward));
练习
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
CreatBoll();
}
public void Creat()//在自己坐标系下的-1,0,1位置创建一个空物体
{
GameObject a = new GameObject("C"); //先转换成世界坐标的位置
//再在世界坐标的位置创建,下同
a.transform.position = transform.TransformPoint(new Vector3(-1, 0, 1));
}
public void CreatBoll()//在自己坐标系下的3个位置创建三个球
{
GameObject a= GameObject.CreatePrimitive(PrimitiveType.Sphere);
a.transform.position = transform.TransformPoint(new Vector3(0, 0, 1));
GameObject b = GameObject.CreatePrimitive(PrimitiveType.Sphere);
b.transform.position = transform.TransformPoint(new Vector3(0, 0, 2));
GameObject c = GameObject.CreatePrimitive(PrimitiveType.Sphere);
c.transform.position = transform.TransformPoint(new Vector3(0, 0, 3));
}
}