Unity3D之坐标变化

来源:互联网 发布:淘宝充话费多久到账 编辑:程序博客网 时间:2024/04/29 20:26
坐标系Unity中的常用坐标系有四种:世界坐标系 我们在场景中添加物体(如:Cube),他们就是以世界坐标系显示在场景中,我们可以用tranform.position来获取。屏幕坐标系 屏幕坐标系是以像素为单位的,以屏幕左下角为(0,0),右上角(scree.width,screen.height)。z的位置以相机的世界位置来衡量。screen.width=Camera.pixelWidth screen.height=Camera.pixelHeight视口坐标系 视口坐标是相对于相机的,相机的左下角为(0,0),右上角为(1,1),z的位置是以相机的世界位置来衡量的。绘制UI坐标系 这个坐标属于屏幕坐标的一种,不同的这个坐标以屏幕的左上角为(0,0),右下角为(screen.width,screen.height)。有关于坐标转换的方法Unity中关于坐标转换的方法常用的有:TransformPoint ():把position从本地坐标转换为世界坐标InverseTransformPoint ():把position从世界坐标转换成本地坐标TransformDirection ():把direction从本地坐标转换成世界坐标InverseTransformDirection ():把direction从世界坐标转换成本地坐标 当我们的主角要搬运一个物体,比如在一个投篮游戏中,我们的主角要携带球,这个时候可以把球的世界坐标转换成相对与主角的本地坐标;然后主角把球抛出去,此时球的坐标集可以从本地坐标转换成世界坐标,并且把球抛出去的方向也是从本地坐标转换成世界坐标。
接下来主要介绍如何将世界坐标系中的向量变换到模型坐标系:
using UnityEngine;using System.Collections;public class PlayerController : MonoBehaviour {    public Transform cam;    public Vector3 cameraVectorx;    public Vector3 cameraVectory;// Use this for initializationvoid Start () {        cam = this.transform;        cameraVectorx = cam.InverseTransformDirection(1, 0, 0);        cameraVectory = cam.InverseTransformDirection(0, 1, 0);}// Update is called once per framevoid Update () {        cameraVectorx = cam.InverseTransformDirection(1, 0, 0);        cameraVectory = cam.InverseTransformDirection(0, 1, 0);        transform.Translate(Input.GetAxis("Horizontal")*Time.deltaTime,0,0);        transform.Translate(0,0,Input.GetAxis("Vertical") * Time.deltaTime);        if(Input.GetMouseButton(0))              transform.Rotate(cameraVectorx);        if (Input.GetMouseButton(1))              transform.Rotate(cameraVectory);       }}
                                             
0 0