unity3dのレイについての勉強

    xiaoxiao2021-04-11  35

    今日はUNITYのレイについてちょっとご紹介させていただきます。

    レイのクラスを見て見ましょう。RayRとaycastです。

    Ray(Vector3 origin, Vector3 direction)

    レイ(光線)の表現: 原点から方向ベクトルの方角に進むレイを作成します。

    void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100)) Debug.DrawLine(ray.origin, hit.point); } vector3 touchPos = Input.mousePosition();  touchPos =  Camera.main.ScreenToWorldPoint(touchPos );  vector3 dir = touchPos - Camera.main.transform.position;  Ray ray = new Ray(Camera.main.transform.position, dir * 9999); 

    以下のように、いくつかオーバーロード関数があります。

    static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

    static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

    static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

    static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

    ディスクリプション:

    シーンにあるすべてのコライダーに対して、 origin の位置から direction の方向に maxDistance の距離だけレイを投じます。

    FixedUpdate()関数で実行します。例:

    void  FixedUpdate(){

          Vector3 fwd = transform.TransformDirection (Vector3.forward);

          if (Physics.Raycast (transform.position, fwd, 10)) {        //前方向で10ユニット距離       }

    }

    void  FixedUpdate(){

          Vector3 fwd = transform.TransformDirection (Vector3.forward);

          RaycastHit hitInfo; 

          if (Physics.Raycast (transform.position, fwd, out  hitinfo, 10)) {        //前方向で10ユニット距離       }

    }

    参考: http://blog.csdn.net/qq_15267341/article/details/62884312

    視点トリガー:

        void diaoYong(GameObject gameObj)     {         timer += Time.deltaTime;         LoadImage.GetComponent<Image>().fillAmount = 1- timer/coldTime;//从1到0减小         if (timer >= coldTime) //转圈刚转完就执行         {             timer = 0;             gameObj.GetComponent<Button>().onClick.Invoke(); //触发凝视目标所绑定的方法         }     }

    
    转载请注明原文地址: https://ju.6miu.com/read-666557.html

    最新回复(0)