Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线投射:游戏对象面射线的终点_C#_Unity3d_Raycasting_Euler Angles - Fatal编程技术网

C# 线投射:游戏对象面射线的终点

C# 线投射:游戏对象面射线的终点,c#,unity3d,raycasting,euler-angles,C#,Unity3d,Raycasting,Euler Angles,我正试图让敌人的物体面对发射线的末端。我拥有的代码在正确检测时将光线锁定在播放器上。我这里的问题是,我的敌人精灵是刚体2D的孙子,我正在使用eulerAngles来改变精灵的方向。以下是我的代码: using UnityEngine; public class PlayerDetection : MonoBehaviour { public Transform origin, end, player; public float radarSpd; public bool playerDetec

我正试图让敌人的物体面对发射线的末端。我拥有的代码在正确检测时将光线锁定在播放器上。我这里的问题是,我的敌人精灵是刚体2D的孙子,我正在使用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();
    }
}
}
当玩家在屏幕上移动时,敌人根本没有面对玩家,而且似乎根本没有旋转

我曾尝试应用rotationSpeed变量并将其乘以enemyRot乘以Time.deltaTime,但也不起作用

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

我已经被困在这个问题上一个星期了,真的需要一些帮助来解决这个问题!那么,我怎样才能通过使用eulerAngles实现我想要的旋转呢?

结果证明我做了太多的数学运算。以下是解决方案:

编辑:我的敌人正面朝上。这个代码在那个规模上起作用

void PlayersPosition()
{
    facePlayer = player.position - enemyRb.transform.GetChild(0).GetChild(0).position;
    enemyRb.transform.GetChild(0).GetChild(0).up = -facePlayer;
}

你可以在这里使用LookAt方法吗?和lerp值。您好,谢谢您的回复!很抱歉,我花了这么长时间才回复,我已经忘记了这个帖子。起初,我尝试了LookAt(),但不幸的是,这不适用于2D开发。我发现的解决方案比我想象的要简单得多,而且不涉及复杂的计算。我将在几分钟后发布这个问题的答案。再次感谢您的回复!
void PlayersPosition()
{
    facePlayer = player.position - enemyRb.transform.GetChild(0).GetChild(0).position;
    enemyRb.transform.GetChild(0).GetChild(0).up = -facePlayer;
}