美文网首页
一、6、鼠标(射线)实现人物转向同时移动

一、6、鼠标(射线)实现人物转向同时移动

作者: GameObjectLgy | 来源:发表于2020-10-08 00:17 被阅读0次
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    private bool flagMove;
    private RaycastHit hit;
    private Vector3 mousePos;
    private Vector3 targetDir;
    // Use this for initialization
    void Start ()
    {
        flagMove = false;
    }

    void Update ()
    {

        if(Input.GetMouseButtonDown(0))
        {
            RayControl();
        }
        if(flagMove)
        {
            if(Vector3.Distance(transform.position,mousePos)>0.1)
            {
                transform.Translate(transform.worldToLocalMatrix* transform.right * Time.deltaTime*0.5f);
            }
            else
            {
                flagMove=false;
            }
        }
    }

    void RayControl()
    {
         Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//从Camera发射射线到屏幕
         if(Physics.Raycast(ray,out hit))//射线碰撞检测
         {
             mousePos=hit.point;
               mousePos.z=transform.position.z;
              targetDir=mousePos-transform.position;//计算到目标点的方向
              Vector3 tempDir=Vector3.Cross(transform.right,targetDir.normalized);
             float dotValue=Vector3.Dot(transform.right,targetDir.normalized);
             float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//计算夹角
             if(tempDir.z < 0)//根据叉乘判断夹角的正负
             {
                 angle=angle*(-1);
             }
             if(!float.IsNaN(angle))
             {
                transform.RotateAround(transform.position,Vector3.forward,angle);//转向目标点
             }

             flagMove=true;
        }
    }
}

相关文章

网友评论

      本文标题:一、6、鼠标(射线)实现人物转向同时移动

      本文链接:https://www.haomeiwen.com/subject/azhtuktx.html