【发布时间】:2022-08-15 17:23:15
【问题描述】:
当玩家远离召唤物超过 10f 时,我试图编写逻辑,召唤物在玩家周围获得一个随机点并朝它移动。
我已经计算了到玩家的距离,当距离超过 10 时,会在玩家周围生成一个随机点,并将光束指向那里。
问题是这个点每帧都会更新一次,我无法弄清楚如何记录一次,直到召唤到达它。
void Update()
{
Vector3 RelativePosition = transform.position;
Vector3 PlayerPosition = Player.transform.position;
float DistanceToPlayer = Vector3.Distance(PlayerPosition, RelativePosition);
if (DistanceToPlayer >= MaxDistanceToPlayer)
{
MoveToPlayer = true;
StartCoroutine(MovingToPlayer());
}
}
IEnumerator MovingToPlayer()
{
Vector3 NewPositionToPlayer = Player.transform.position + new Vector3 (Random.Range(-2.0f, 2.0f), 0f, Random.Range(-2.0f, 2.0f));
Debug.DrawLine(transform.position, NewPositionToPlayer, Color.red);
while (transform.position != NewPositionToPlayer)
{
yield return null;
}
MoveToPlayer = false;
}
附言
好像下面的代码已经解决了,但是现在对象被传送了,而不是随着时间的推移移动到一个新的点。
while (transform.position != NewPositionToPlayer)
{
var step = WalkSpeed * Time.deltaTime; // calculate distance to move
transform.position = Vector3.MoveTowards(transform.position, NewPositionToPlayer, step);
Debug.DrawLine(transform.position, NewPositionToPlayer, Color.red);
}
yield return null;
标签: c# unity3d ienumerator