亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Raycast沒有擊中任何東西

Raycast沒有擊中任何東西

Go
海綿寶寶撒 2022-10-15 14:42:19
光線投射甚至沒有給出Debug.Log("it hit something時間,Debug.DrawRay它確實在敵人和玩家之間劃清界限。使用以下腳本的敵人位于“Ignore Raycast”層,它試圖擊中的玩家位于“Default”層。void FixedUpdate() {    RaycastHit hit;    Vector2 diff = PlayerMovement.playerTransform.position - transform.position;    Ray raycastToPlayer = new Ray(transform.position, diff);    Debug.Log(raycastToPlayer);    Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);    if (Physics.Raycast(raycastToPlayer, out hit)) {        Debug.Log("it hit something");        if (hit.collider != null) {            Debug.Log(hit.collider.gameObject.name);            if (hit.transform.tag == "Player"){                float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;                transform.rotation = Quaternion.Euler(0f, 0f, rotZ);            }        }    }}
查看完整描述

2 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

你正在使用Vector2位置,所以我假設你的游戲是 2D 的。如果是這樣,我相信您需要使用Physics類的 2D 版本(請參閱此處):

void FixedUpdate() {


    Vector2 diff = (PlayerMovement.playerTransform.position - transform.position).Normalized;

    RaycastHit2D hit = Physics2D.Raycast(transform.position, diff);


    Debug.DrawRay(transform.position, diff, Color.white, 0.01f, true);


    if (hit.collider != null) {

        Debug.Log("Raycast hit: " + hit.collider.gameObject.name);

        if (hit.transform.tag == "Player") {

            float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;

            transform.rotation = Quaternion.Euler(0f, 0f, rotZ);

        }

    }

}


查看完整回答
反對 回復 2022-10-15
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

對于您正在使用的 Ray 構造函數,方向應該是 Vector3:

https://docs.unity3d.com/ScriptReference/Ray.html

但是在您的代碼中,您傳遞的是 Vector2。如果是 2D 游戲,您應該使用不同的構造函數:

https://docs.unity3d.com/ScriptReference/Ray2D-ctor.html

除此之外,正如他們已經在評論中指出的那樣,您需要在 Physics.Raycast 中傳遞 Ray 的 maxDistance 參數:

  • ray 射線 的起點和方向。

  • hitInfo 如果返回 true,hitInfo 將包含有關碰撞器被擊中位置的更多信息。(另見:RaycastHit)。

  • maxDistance 光線應檢查碰撞的最大距離。

如果要使用圖層,則需要一個額外的參數:

  • layerMask 一個圖層蒙版,用于在投射光線時選擇性地忽略碰撞器。

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html


查看完整回答
反對 回復 2022-10-15
  • 2 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號