Vector3,三维向量,又称三元数。 Unity中用Vector3类型表示位置的变化: transform.position = new Vector3(0, 0, 0); 表示物体的旋转:
this.transform.eulerAngles = new Vector3(0, 0, 45);
表示相对位置的旋转:localeulerAngles;
transform.localPosition = new Vector3(0, 1.0f, 0);
掉头:
if (upward && transform.position.y > 5)
{
upward = false;
transform.localEulerAngles = new Vector3(0, 0, 180);
}
if (!upward && transform.position.y < -5)
{
upward = true;
transform.localEulerAngles = new Vector3(0, 0, 0);
向量的常用API: 长度属性: Vector3 vector3 = new Vector3(1, 1, 0); Debug.Log(vector3.magnitude); 向量的标准化: b=vector3.normalized; Debug(""+b.ToString(“F3”))//保留三位小数 Vector3.right(up,forward) 物体间的距离:
GameObject gameObject = GameObject.Find("Peppy");
Vector3 position = gameObject.transform.position;
Vector3 position1 = this.transform.position;
Vector3 distance = position1 - position;
Debug.Log("飞机和Peppy的距离为" + distance.magnitude);
两个向量之间的夹角:
Vector3 a = new Vector3(0, 1, 0);
Vector3 b = new Vector3(1, 0, 0);
float c = Vector3.SignedAngle(b, a, Vector3.forward);
Debug.Log("两个向量之间的夹角是" + c);
float angle = Vector3.Angle(a, b);
物体的指向: transform.right(up,forward)
Vector3 face = this.gameObject.transform.up;
GameObject targetGameObject = GameObject.Find("Peppy");
Vector3 vector3 = targetGameObject.transform.position - this.transform.position;
float angle = Vector3.SignedAngle(face, vector3,Vector3.forward);
this.transform.Rotate(0, 0,angle);
游戏中物体的两个坐标: 空间坐标:物体在世界空间中的坐标 屏幕坐标:物体在屏幕中的位置 Screen.Width(height) 世界坐标转换为屏幕坐标:
Vector3 WorldPOs = this.transform.position;
Vector3 ScreenPOs = Camera.main.WorldToScreenPoint(WorldPOs);
屏幕边界:
Vector3 vector3 = Camera.main.WorldToScreenPoint(transform.position);
if(toRight&&vector3.x>Screen.width)
{
toRight = false;
transform.eulerAngles=new Vector3(0, 0, 90);
}
if (!toRight && vector3.x < 0)
{
toRight = true;
transform.eulerAngles = new Vector3(0, 0, -90);
}
transform.Translate(0, speed * Time.deltaTime, 0);
|