第一个原始代码是使用enum
和switch
,的4个航路点的case
,state
每个航路点都有自己的功能。一切正常。但是现在我添加了一个变量名wayPoints
数组GameObject
。
相反,我想向每个路径点添加一个新函数,以使其成为一个函数。例如,假设我有30个多维数据集,并将它们添加到wayPoints
数组中,现在我希望角色在30个多维数据集之间行走作为航路点。因此,我添加了一个新名称State
并称为它WayPoints
。我还添加了一个新函数并命名为WayPoints()
现在我不确定如何从这里继续。我仍然想enum
与wayPoints
数组一起使用的想法,但不确定我添加的大小写是否正确以及如何在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] 删除。
我来说两句