Unity3D产生距离一定距离的物体

时间:2015-02-24 11:18:04

标签: c# math unity3d

好的,所以这个问题有点奇怪,但我会试一试。在我的团结游戏中我有4个车道,敌人可以继续前行。所有车道都通向相同的位置(玩家)。我有一个变量,包含敌人和玩家之间的距离。现在我想要当我遇到一个特殊的敌人将他移到另一条车道时。如何使用我必须改变其变换的距离变量。注意:车道只是从4个游戏对象到玩家的直线。我正在考虑将传送的敌人放在车道的起点并使用Vector3.MoveTowards,但我无法计算出数学。

发布整个代码无济于事,但这里有重要的内容

transform.position = Vector3.MoveTowards(transform.position, _destination.position, Time.deltaTime * _speed);
distancesquared = (_destination.transform.position - transform.position).sqrMagnitude;

这会在Update()方法中移动敌人并计算距离。

现在敌人自己从4个变换阵列中随机实例化。当我想将一个敌人传送到另一个车道时,我做的第一件事就是使它的变换等于该车道的产卵变换。然后我想把它移动到它已经在旧车道上行驶的新车道上相同的距离。 车道图(抱歉糟糕的油漆技巧) enter image description here 想象一下,车道长度相同。

1 个答案:

答案 0 :(得分:1)

您可以通过获取线条的单位方向向量,然后将其乘以您希望蠕变沿着线条的距离来实现。让我们说你要移动到的车道的变换称为toLane,你想要移动的敌人称为enemy,以及小兵正朝着的地方移动( player)被称为player。代码看起来像这样:

Vector3 direction = (toLane.transform.position - player.transform.position).normalized;
Vector3 distance = Vector3.Distance(enemy.transform.position, player.transform.position);
enemy.transform.position = direction * distance

此代码会将敌人移动到距离玩家之前距离的另一条车道上的位置。然后,您可以使用常用的移动逻辑将其向正确的方向移动(可能您需要告诉它它已经移动了道路)。