加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

U3D中角色的转换方向计算

(2014-10-13 11:58:49)
标签:

角色

欧拉角

方向

坐标

euler

分类: Unity3D
    public Vector3 targetPosintion;
    public bool isMotion false;
    // Use this for initialization

    public GameObject curRole;
    void Start () {
        targetPosintion transform.position;
    }

    // Update is called once per frame
    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            if(getMousePointInfo().collider.tag == TagsEnum.Ground.ToString()){
                isMotion true;

            }
            
        }
        if (Input.GetMouseButtonUp (0)) {
            isMotion false   
        }
        if(isMotion && UICamera.hoveredObject == null{
//             turntodirection(getMousePointInfo().point curRole.transform.position);
            turnTowardDirection(getMousePointInfo().point);
            /////
            targetPosintion getMousePointInfo().point;
        }
         
    }

//用三角函数 和 欧拉角计算得到的 角色转向
void turntodirection(Vector3 targetpt,Vector3 originalPt){
        float z targetpt.z originalPt.z;
        float h targetpt.x originalPt.x;
        float aa Mathf.Atan2(z,h)*(-180)/3.1415926f 90; // 此处注意的是: Mathf.Atan2(y轴坐标值,x轴坐标值); 是自y轴开始的角度(即顺时针方向),如果是Mathf.Atan2(x,y),则是自x轴开始的角度(即逆时针方向)
        Quaternion angle Quaternion.Euler(0f,aa,0f);

        curRole.transform.rotation angle;
    }
//用u3d内部api计算得到的 角色转向,跟上边的方法结果一样
    public void turnTowardDirection(Vector3 point){
        Vector3 targetPoint new Vector3 (point.x,transform.position.y,point.z);
        curRole.transform.LookAt (targetPoint);
    }
//鼠标点击点的信息返回方法
    RaycastHit getMousePointInfo(){
        Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hitinfo;
        Physics.Raycast(ray,out hitinfo);
        return hitinfo;
    }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有