我正在开发一个小的Unity游戏,目前正在使用一系列的巡逻点来移动一些物体。这是我或多或少使用的代码:
transform.position = Vector3.MoveTowards (transform.position, patrolPoints [currentPoint].position, moveSpeed * Time.deltaTime);我觉得自己很傻,也许只是烧坏了大脑,但我该如何扭转这一点,让它从巡逻中的最高点到最低点?我试过了,但没有用:
transform.position = Vector3.MoveTowards (transform.position, patrolPoints [currentPoint - 1].position, moveSpeed * Time.deltaTime);发布于 2019-09-23 09:01:43
你的问题很模棱两可,但我会尝试回答。
假设您的意思是如何向前和向后浏览patrolPoints列表
在脚本的顶部定义您的变量。
//List of patrolpoints
public Transform[] patrolPoints;
//To go forwards or backwards
public bool forwards = true;
//Current position
public int currentPoint = 0;然后,在您的Update()函数中,我们可以使用您提供的代码。
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime);但是,我们需要一些方法来循环遍历这些位置,因此在Update()中前面代码之后编写
//Check if the agent has reached the patrol point
if(transform.position == patrolPoints[currentPoint].position)
{
//Check if going forwards and has not reached last patrol
if (forwards && currentPoint != patrolPoints.Length - 1)
currentPoint++;
//Check if going backwards and has not reached first patrol point
else if (!forwards && currentPoint != 0)
currentPoint--;
}然后将前进和后退布尔值更改为前进和后退。Alternatively如果您想直接返回到开始巡视点,只需使用代码(在Update()中):
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[0].position, moveSpeed * Time.deltaTime);它使用0作为索引。
编辑:如果您希望在到达end之后向后转发,只要在currentPoint到达lastPoint时将变量切换为false currentPoint即可。因此,对于,update函数将为:
void Update()
{
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime);
//Check if the agent has reached the patrol point
if(transform.position == patrolPoints[currentPoint].position)
{
//Check if going forwards and has not reached last patrol
if (forwards && currentPoint != patrolPoints.Length - 1)
currentPoint++;
//Check if going forwards and has reached the last patrol
if (forwards && currentPoint == patrolPoints.Length - 1)
forwards = false;
//Check if going backwards and has not reached first patrol point
else if (!forwards && currentPoint != 0)
currentPoint--;
//And to go back if reached back to the start
else if (!forwards && currentPoint == 0)
forwards = true;
}
}发布于 2019-10-07 02:50:46
感谢您的回复。我知道我来晚了点,哈哈。但是,是的,这是有效的,并帮助我取得进步,谢谢。
https://stackoverflow.com/questions/58052413
复制相似问题