【问题标题】:How to move the character in a certain way?如何以某种方式移动角色?
【发布时间】:2018-07-24 19:43:04
【问题描述】:

有办法。角色从中点开始。如果HorizontalAxis > 0,它应该向右移动,如果< 0,它应该向左移动。我做过这样的事情-

方式:

public Transform[] PatrolPoints;
public Transform Way;
public int CurrentPoint;
public int NeedPoint;

if (transform.position == PatrolPoints[CurrentPoint].position && CurrentPoint < PatrolPoints.Length-1) 
{
    //PatrolPoints[CurrentPoint];
    NeedPoint = CurrentPoint + 1;
}       
else if(transform.position == PatrolPoints[NeedPoint].position && CurrentPoint != PatrolPoints.Length - 1)
{
    CurrentPoint++;
}
else if(transform.position == PatrolPoints[PatrolPoints.Length - 1].position)
{
    NeedPoint--;
}
if (CurrentPoint != PatrolPoints.Length - 1 && moveAxis > 0)
{
    transform.position = Vector3.MoveTowards(transform.position, PatrolPoints[NeedPoint].position, moveAxis * moveRate * Time.deltaTime);
    //An error occurs here
}
    else if(CurrentPoint > 0 && moveAxis < 0)
{
    transform.position = Vector3.MoveTowards(transform.position, PatrolPoints[NeedPoint - 1].position, -moveAxis * moveRate * Time.deltaTime);
}

数组的长度 - 3 个元素。 从中间点到右边,人物一般都是左右走的,但是一到最后一点,就报错了——

数组索引超出范围

期间的错误变量是:

需要点:-1;

当前点:2;

而且从中间到左边,角色根本不走。

【问题讨论】:

  • 如果您指定以下内容会很好: 1. 错误发生在哪一行 2. 该行中每个变量的值是多少 3. 数组的长度
  • @Bijan 对不起。更新了问题。
  • 出错的那一行不应该是[NeedPoint + 1]吗?

标签: unity3d


【解决方案1】:

这是解决方案:

字符从中点开始。然后它应该移动到 如果 Horizo​​ntalAxis > 0,则向右,如果

我假设“向右移动”意味着增加数组中的索引,而“向左移动”意味着减少数组中的索引

public Transform[] PatrolPoints;
public int NextPointOnLeft = 0; // because player starts at 1
public int NextPointOnRight = 2; // because player starts at 1

if (HorizontalAxis < 0)
{
    if (transform.position == PatrolPoints[NextPointOnLeft].position)
    {
        if(NextPointOnLeft > 0)
        {
            --NextPointOnLeft;
        }
        // EDIT: NextPointOnRight = NextPointOnLeft + 1;
    }
    // EDIT:
    NextPointOnRight = NextPointOnLeft + 1;
    transform.position = Vector3.MoveTowards(transform.position, PatrolPoints[NextPointOnLeft].position, moveRate * Time.deltaTime);
}
if (HorizontalAxis > 0)
{
    if (transform.position == PatrolPoints[NextPointOnRight].position)
    {
        if(NextPointOnRight < PatrolPoints.Length-1)
        {
            ++NextPointOnRight;
        }
        // EDIT: NextPointOnLeft = NextPointOnRight - 1;
    }
    // EDIT:
    NextPointOnLeft = NextPointOnRight - 1;
    transform.position = Vector3.MoveTowards(transform.position, PatrolPoints[NextPointOnRight].position, moveRate * Time.deltaTime);
}

如果您需要不同的解决方案,请说明您需要什么

【讨论】:

  • 谢谢。有用。但是当角色在第一个点和第二个点之间时,他可以绕过第一个点到零点,当零点和第一个点之间的距离可以达到第二个点时,第一个点。我需要角色只沿着这条线走。 imgur.com/a/nDlACXE
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2017-02-06
  • 2013-11-16
  • 1970-01-01
  • 2016-07-13
  • 2019-05-20
  • 1970-01-01
相关资源
最近更新 更多