Line Casting:GameObject Face End of Ray

问题描述 投票:0回答:1

我正在尝试使敌人的物体面对投掷线的末端。当正确检测到时,我拥有的代码将射线锁定在播放器上。我的问题是我的敌人精灵是Rigidbody2D的孙代,我正在使用eulerAngles更改精灵方向。这是我的代码:

using UnityEngine;

public class PlayerDetection : MonoBehaviour
{
public Transform origin, end, player;
public float radarSpd;
public bool playerDetected;

public static bool playerIsDetected;

private int playerLayer = 1 << 8;
private Rigidbody2D enemyRb;
private Vector3 facePlayer;

private void Start()
{
    enemyRb = GetComponentInParent<Rigidbody2D>();
    playerIsDetected = false;
}

private void Update()
{
    PlayerDetector();
    if (playerDetected == false)
    {
        Radar();
    }
    else { PlayerIsDetected(); }

}

void PlayerDetector()
{
    Debug.DrawLine(origin.position, end.position, Color.red);
    playerDetected = Physics2D.Linecast(origin.position, end.position, playerLayer);
}

void Radar()
{
    end.RotateAround(origin.position, Vector3.forward, radarSpd * Time.deltaTime);
}

void PlayersPosition()
{
    facePlayer = player.position - enemyRb.transform.GetChild(0).GetChild(0).position;
    float enemyRot = Mathf.Atan2(facePlayer.y, facePlayer.x) * Mathf.Rad2Deg;
    enemyRb.transform.GetChild(0).GetChild(0).eulerAngles = new Vector3(0, 0, enemyRot);

}

void PlayerIsDetected()
{
    if(playerDetected == true)
    {
        playerIsDetected = true;
        end.position = player.position;
        PlayersPosition();
    }
}
}

我需要帮助的这段代码的主要焦点在这里:

void PlayersPosition()
{
facePlayer = player.position - enemyRb.transform.GetChild(0).GetChild(0).position;
float enemyRot = Mathf.Atan2(facePlayer.y, facePlayer.x) * Mathf.Rad2Deg;
enemyRb.transform.GetChild(0).GetChild(0).eulerAngles = new Vector3(0, 0, enemyRot);

}

当玩家在屏幕上移动时,敌人根本不会面对玩家,似乎也不会旋转太多。

我尝试应用rotationSpeed变量,然后将其乘以敌人Rot再乘以Time.deltaTime,但也没有用。

 enemyRb.transform.GetChild(0).GetChild(0).eulerAngles = new Vector3(0, 0, enemyRot * rotSpd * Time.deltaTime);

我已经坚持了一个星期,确实需要一些帮助来解决此问题!那么如何通过使用eulerAngles实现所需的旋转?

c# unity3d raycasting euler-angles
1个回答
0
投票

原来我做的数学太多。这是解决方案:

编辑:我的敌人面朝上。该代码可以在此范围内工作。

void PlayersPosition()
{
    facePlayer = player.position - enemyRb.transform.GetChild(0).GetChild(0).position;
    enemyRb.transform.GetChild(0).GetChild(0).up = -facePlayer;
}
© www.soinside.com 2019 - 2024. All rights reserved.