Raycast没有击中任何东西

光线投射甚至没有给出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);

            }

        }

    }

}


海绵宝宝撒
浏览 142回答 2
2回答

偶然的你

你正在使用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);        }    }}

茅侃侃

对于您正在使用的 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go