我如何制作航路点数组,而不是每个航路点有很多功能?

174

第一个原始代码是使用enumswitch,的4个航路点的casestate每个航路点都有自己的功能。一切正常。但是现在我添加了一个变量名wayPoints数组GameObject

相反,我想向每个路径点添加一个新函数,以使其成为一个函数。例如,假设我有30个多维数据集,并将它们添加到wayPoints数组中,现在我希望角色在30个多维数据集之间行走作为航路点。因此,我添加了一个新名称State并称为它WayPoints我还添加了一个新函数并命名为WayPoints()

现在我不确定如何从这里继续。我仍然想enumwayPoints数组一起使用的想法,但不确定我添加的大小写是否正确以及如何在WayPoints()函数中执行此操作

using UnityEngine;
using System.Collections;

public class MoveObject : MonoBehaviour {

    public GameObject[] wayPoints;
    public Transform target;
    float moveSpeed = 3f;
    float rotationSpeed = 3f;
    Transform myTransform;
    State state;
    public enum State
    {
        Idle,
        Way1,
        Way2,
        Way3,
        Way4,
        WayPoints
    }
    void Awake()
    {
        myTransform = transform;
    }
    // Use this for initialization
    void Start()
    {
        Debug.Log("Scripts Strart");
        state = State.Idle;
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Update");
        switch (state)
        {
            case State.Idle:
                Idle();
                break;
            case State.WayPoints:
                WayPoints();
                break;
            case State.Way1:
                waypoint1();
                break;
            case State.Way2:
                waypoint2();
                break;
            case State.Way3:
                waypoint3();
                break;
            case State.Way4:
                waypoint4();
                break;
        }
    }
    public void Idle()
    {
        state = State.Way1;
    }

    void WayPoints()
    {
        for(int i = 0; i < wayPoints.Length; i++)
        {
            wayPoints[i].name = "wayPoint";
            target = GameObject.Find(wayPoints[i].name).transform;
            float distance = Vector3.Distance(myTransform.position, target.transform.position);
            Debug.DrawLine(target.transform.position, myTransform.position, Color.red);
            myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

            //move towards the player
            myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
            if (distance < 2f)
            {

            }
        }
    }

    void waypoint1()
    {
        target = GameObject.Find("W1").transform;
        float distance = Vector3.Distance(myTransform.position, target.transform.position);
        Debug.DrawLine(target.transform.position, myTransform.position, Color.red);
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

        //move towards the player
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        if (distance < 2f)
            state = State.Way2;
    }
    void waypoint2()
    {
        target = GameObject.Find("W2").transform;
        float distance = Vector3.Distance(myTransform.position, target.transform.position);
        Debug.DrawLine(target.transform.position, myTransform.position, Color.red);
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

        //move towards the player
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        if (distance < 2f)
            state = State.Way3;
    }
    void waypoint3()
    {
        target = GameObject.Find("W3").transform;
        float distance = Vector3.Distance(myTransform.position, target.transform.position);
        Debug.DrawLine(target.transform.position, myTransform.position, Color.red);
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

        //move towards the player
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        if (distance < 2f)
            state = State.Way4;
    }
    void waypoint4()
    {
        target = GameObject.Find("W4").transform;
        float distance = Vector3.Distance(myTransform.position, target.transform.position);
        Debug.DrawLine(target.transform.position, myTransform.position, Color.red);
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);

        //move towards the player
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        if (distance < 2f)
            state = State.Way1;
    }
}
帕斯提

这有一个功能强大的航点系统,您可能想看看:https ://unity3d.com/learn/tutorials/topics/scripting/using-interfaces-make-state-machine-ai

您应该创建一个简单的公共GameObject []航路点,并将所需的航路点拖放到其中,并使用索引循环遍历它们。这可以替换第一行代码,因此您可以使用相同的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

到达航路点后不重复功能

来自分类Dev

如何存储多个连接的航路点

来自分类Dev

如何浏览超过32个航路点?

来自分类Dev

如何存储多个连接的航路点

来自分类Dev

如何浏览超过32个航路点?

来自分类Dev

jQuery航路点延迟

来自分类Dev

防止在添加新的航路点时调用所有过去的jQuery航路点

来自分类Dev

为什么我不能销毁这些航路点?

来自分类Dev

为什么我不能销毁这些航路点?

来自分类Dev

固定位置的jQuery航路点位于第一个航路点下方而不是顶部下方

来自分类Dev

通过有序循环航路点的最短路径

来自分类Dev

是否有适合压缩GPS航路点的算法?

来自分类Dev

jQuery航路点和cookie

来自分类Dev

为什么航路点不起作用?

来自分类Dev

检测航路点是否可达

来自分类Dev

如何使用传单路由机在航路点标记(包括开始和结束)上添加弹出窗口?

来自分类Dev

如何使用传单路由机在航路点标记(包括开始和结束)上添加弹出窗口?

来自分类Dev

jQuery许多行很多功能,如何管理?

来自分类Dev

如何将导航路线添加到颤动底部导航路线

来自分类Dev

停止与页脚航路点重叠的粘性侧边栏

来自分类Dev

使用航路点时的最短路线

来自分类Dev

使用航路点时的最短路线

来自分类Dev

jQuery 航路点插件 - 不在视野中时删除类

来自分类Dev

从特定飞行计划航路点获取 GPS 坐标

来自分类Dev

“滑动手势”也记录为触摸开始触摸(用于玩家航路点),如何分离它们,使它们彼此独立?

来自分类Dev

组件导航路线

来自分类Dev

如何在母版页中查看导航路径?

来自分类Dev

如何进行反应导航路线?(标签)

来自分类Dev

如何在母版页中查看导航路径?

Related 相关文章

热门标签

归档