如何随机地在航点之间使机器人成为mvoe?

时间:2018-01-17 01:56:12

标签: c# unity3d unity5

由于机器人应该在空中飞行或移动,我想我也应该使用物理?不确定。

我添加了一些球体作为航路点,我希望机器人在它们之间随机移动,包括随机的移动范围和旋转速度。例如1-10移动和旋转的随机速度范围。

现在我在运行游戏时所做的事情,NAVI(1)只是在小范围内移动,不确定为什么,但它在球体之间没有平稳移动。

这个想法是让NAVI机器人的行为不正常。

这是NAVI(1)及其检查员的屏幕截图:

NAVI

此屏幕截图是Waypoints附加的Waypoints脚本:

Waypoints

这是Waypoints脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Waypoints : MonoBehaviour
{
    public Transform objectToMove;
    public float moveSpeed = 3.0f;
    public float rotationSpeed = 3.0f;
    public GameObject[] waypoints;
    public int currentWP;

    private void Awake()
    {
    }

    private void Start()
    {
        currentWP = 0;
    }

    private void Update()
    {
        if (waypoints.Length == 0) return;

        var lookPos = waypoints[currentWP].transform.position - objectToMove.position;
        lookPos.y = 0;
        var rotation = Quaternion.LookRotation(lookPos);
        objectToMove.rotation = Quaternion.Slerp(objectToMove.rotation, rotation, Time.deltaTime * rotationSpeed);
        objectToMove.position += objectToMove.forward * moveSpeed * Time.deltaTime;
    }
}

2 个答案:

答案 0 :(得分:2)

你永远不会改变currentWP。这意味着在每一帧,你都会朝着同一个导航点旋转并将机器人移回它。

只有在机器人到达时才需要更改当前的WP。在目标导航点和机器人之间使用OnTrigger。

答案 1 :(得分:0)

你可以这样做。

//for example you've got 5 waypoints
currentWaypoint = Random.Range(1, 5);

希望有所帮助