首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巡视点反转

巡视点反转
EN

Stack Overflow用户
提问于 2019-09-23 02:45:57
回答 2查看 76关注 0票数 0

我正在开发一个小的Unity游戏,目前正在使用一系列的巡逻点来移动一些物体。这是我或多或少使用的代码:

代码语言:javascript
复制
transform.position = Vector3.MoveTowards (transform.position, patrolPoints [currentPoint].position, moveSpeed * Time.deltaTime);

我觉得自己很傻,也许只是烧坏了大脑,但我该如何扭转这一点,让它从巡逻中的最高点到最低点?我试过了,但没有用:

代码语言:javascript
复制
transform.position = Vector3.MoveTowards (transform.position, patrolPoints [currentPoint - 1].position, moveSpeed * Time.deltaTime);
EN

回答 2

Stack Overflow用户

发布于 2019-09-23 09:01:43

你的问题很模棱两可,但我会尝试回答。

假设您的意思是如何向前和向后浏览patrolPoints列表

在脚本的顶部定义您的变量。

代码语言:javascript
复制
//List of patrolpoints
public Transform[] patrolPoints;
//To go forwards or backwards
public bool forwards = true;
//Current position
public int currentPoint = 0;

然后,在您的Update()函数中,我们可以使用您提供的代码

代码语言:javascript
复制
        float moveSpeed = 5.0f;
    transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime);

但是,我们需要一些方法来循环遍历这些位置,因此Update()中前面代码之后编写

代码语言:javascript
复制
        //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()中):

代码语言:javascript
复制
        float moveSpeed = 5.0f;
    transform.position = Vector3.MoveTowards(transform.position, patrolPoints[0].position, moveSpeed * Time.deltaTime);

它使用0作为索引。

编辑:如果您希望在到达end之后向后转发,只要在currentPoint到达lastPoint时将变量切换为false currentPoint即可。因此,对于,update函数将为:

代码语言:javascript
复制
    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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-10-07 02:50:46

感谢您的回复。我知道我来晚了点,哈哈。但是,是的,这是有效的,并帮助我取得进步,谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58052413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档