Линия литья: GameObject Face Конечная точка Ray - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь сделать вражеский объект лицом к концу линии. Код, который у меня есть, фиксирует луч на плеере при правильном обнаружении. Моя проблема здесь в том, что мой вражеский спрайт - внук 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);

}

Враг вообще не сталкивается с игроком и неКажется, что он сильно вращается, когда игрок перемещается по экрану.

Я пытался применить переменную вращение и умножил ее на вражеский рот, умноженный на Time.deltaTime, но тоже не сработал.

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

Я застрял на этой неделесейчас и очень нужна помощь в решении этой проблемы! Так как же мне добиться желаемого поворота с помощью eulerAngles?

...