我正在制作一个赛车游戏(所有对象都在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个警察。
可以有任何人在这个平台上为我提供新的帮助吗?长期以来一直停留在这里
答案 0 :(得分:2)
生成警察时,可以将其存储在List<Transform>
警察中并删除它们(如果支持从游戏中销毁或删除警察)。因此,您将拥有球员的位置和所有警察的位置。
使用此数据,您可以使用Vector3.Distance或Vector2.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);
}
我无法确切地说这就是您在寻找完整的游戏和代码所需要的东西。希望这会有所帮助