如何显示敌人来袭的迹象?

时间:2019-01-24 10:51:15

标签: c# unity3d

我正在制作一个赛车游戏(所有对象都在3d中),警察在追赶玩家 我会从4个不同的地方(即,左,右,上,下)生成警察

private int lastSpawnPos;
[SerializeField]
private Transform[] spawnPos;

void SpawnPoliceCar()
    {
        GameObject policeCar = ObjectPooling.instance.GetPooledObject("PoliceCar");
        int r = UnityEngine.Random.Range(0, spawnPos.Length);

        while (lastSpawnPos == r)
        {
            r = UnityEngine.Random.Range(0, spawnPos.Length);
        }
        Vector3 policeCarPos = policeCar.transform.position;
        policeCarPos = new Vector3(spawnPos[r].position.x, 0, spawnPos[r].position.z);
        policeCar.SetActive(true);
        policeCar.GetComponent<Damage>().DefaultSetting();
        lastSpawnPos = r;
        currentPoliceCar++;
    }

im在update()中调用此方法,并且此脚本应用于场景中的空游戏对象。由于此代码可以正常运行
但是现在我想在屏幕上添加出现警察的箭头指示,以及我想按照方向旋转箭头。即时一次生成4个警察。
可以有任何人在这个平台上为我提供新的帮助吗?长期以来一直停留在这里

1 个答案:

答案 0 :(得分:2)

生成警察时,可以将其存储在List<Transform>警察中并删除它们(如果支持从游戏中销毁或删除警察)。因此,您将拥有球员的位置和所有警察的位置。

使用此数据,您可以使用Vector3.DistanceVector2.Distance(如果要忽略播放器和警察的z坐标)来找到从警察到播放器的距离。使用这种方法,您可以遍历警察名单并从播放器中找到壁橱/最远的警察(如果您不希望显示任何警察,而是显示最近的警察-最近产生或最近的警察)。

找到想要箭头指向的cop游戏对象后,可以使用Transform.LookAt方法将箭头转到该游戏对象。每次Update()调用时调用此方法,箭头的旋转将跟随选定的cop。

更新: 对于最远的警察,您的代码可能看起来像这样:

private int lastSpawnPos;
[SerializeField]
private Transform[] spawnPos;

//Your arrow 
public GameObject Arrow;
//Player
public Transform Player;
//Storing all spawned cops
public List<Transform> Cops;

void SpawnPoliceCar()
{
    GameObject policeCar = ObjectPooling.instance.GetPooledObject("PoliceCar");
    int r = UnityEngine.Random.Range(0, spawnPos.Length);
    //Adding cop to the list when spawned
    //TODO: do not forget to remove from the list, when cop is removed (back to the pool)
    Cops.Add(policeCar.transform);

    while (lastSpawnPos == r)
    {
        r = UnityEngine.Random.Range(0, spawnPos.Length);
    }
    Vector3 policeCarPos = policeCar.transform.position;
    policeCarPos = new Vector3(spawnPos[r].position.x, 0, spawnPos[r].position.z);
    policeCar.SetActive(true);
    policeCar.GetComponent<Damage>().DefaultSetting();
    lastSpawnPos = r;
    currentPoliceCar++; 
}

//Call this on update
void PointArrow()
{
    Transform farthestCop = null;
    float maxDistance = 0.0f;
    //Find the farthes cop
    foreach (var cop in Cops)
    {
        var distance = Vector3.Distance(Player.position, cop.position);
        if (distance > maxDistance)
        {
            farthestCop = cop;
            maxDistance = distance;
        }
    }
    //If there are no cops - can't point an arrow
    if(farthestCop == null) return;
    //Point an arrow on the cop
    Arrow.transform.LookAt(farthestCop);
}

我无法确切地说这就是您在寻找完整的游戏和代码所需要的东西。希望这会有所帮助