Это потому, что вы делаете новое случайное число в каждом обновлении. Это плохо по нескольким причинам.
Но в данном конкретном случае не только это плохо, но и просто не работает. Это потому, что обновление вызывается каждый раз, когда кадр визуализируется, и это означает, что у вас всегда будет рывкое движение, независимо от того, как вы установите скорость. Для этого вы должны использовать deltaTime.
Я предполагаю, что вы хотите, чтобы объект переместился в точку, затем начать движение к новой случайной точке. Вот не очень элегантное решение:
using UnityEngine;
using System.Collections;
public class TestSample : MonoBehaviour {
public float radius = 40.0f;
public float speed = 5.0f;
// The point we are going around in circles
private Vector2 basestartpoint;
// Destination of our current move
private Vector2 destination;
// Start of our current move
private Vector2 start;
// Current move's progress
private float progress = 0.0f;
// Use this for initialization
void Start() {
start = transform.localPosition;
basestartpoint = transform.localPosition;
progress = 0.0f;
PickNewRandomDestination();
}
// Update is called once per frame
void Update() {
bool reached = false;
// Update our progress to our destination
progress += speed * Time.deltaTime;
// Check for the case when we overshoot or reach our destination
if (progress >= 1.0f)
{
progress = 1.0f;
reached = true;
}
// Update out position based on our start postion, destination and progress.
transform.localPosition = (destination * progress) + start * (1 - progress);
// If we have reached the destination, set it as the new start and pick a new random point. Reset the progress
if (reached)
{
start = destination;
PickNewRandomDestination();
progress = 0.0f;
}
}
void PickNewRandomDestination()
{
// We add basestartpoint to the mix so that is doesn't go around a circle in the middle of the scene.
destination = Random.insideUnitCircle * radius + basestartpoint;
}
}
Надеюсь, это поможет.
Ваш случайный разный каждый раз (я угадываю), поэтому, возможно, лучший подход состоял бы в том, чтобы установить случайную стартовую позицию, а затем назначить угловую скорость, которая заставит ее двигаться по кругу? –
или просто выбрать случайную цель внутри круга, медленно продвигаясь к ней, а затем снова выбрать новую случайную цель – mgear
https://unisalesianogames.files.wordpress.com/2011/08/programming-game-ai-by-example-mat- buckland2.pdf - очень хорошая книга по рулевому поведению. Глава 3 мне очень помогла. –