Вектор единства в заявлениях If Else - PullRequest
0 голосов
/ 15 мая 2018

Я начинающий, когда дело доходит до кодирования, поэтому, пожалуйста, потерпите меня. Я пытаюсь создать механику бумеранга для 2-го платформера, где бумеранг меняет направление, когда достигает определенной точки, в которой я могу установить его в инспекторе. Я думал об этом так: если вычесть координаты бумеранга и точку назначения, я получу расстояние между ними, поместу его в оператор if и сравню, чтобы увидеть, больше ли положение бумеранга и равно ли оно точке так что он может изменить свое направление. Однако я получаю эту ошибку, которая говорит

Оператор

нельзя применить к операндам с плавающей точкой и вектору 2.

ниже - мой код бумеранга:

public Transform Target;

public float speed; // speed it travels

public Vector2 returnDistance; // The point in where boomerang switches 
direction

private bool keepGoing = false; // Update the frame to make it keep going


// Use this for initialization
void Start () {

    //rb2d = GetComponent<Rigidbody2D>();

}

// Update is called once per frame
void Update () {

    float checkDistance = Vector2.Distance(transform.position, 
    returnDistance); // check the distance between two points 

    Debug.DrawLine(Target.position, transform.position, Color.red);

    if (Input.GetMouseButton(0) || (keepGoing == true))
    {

        transform.Translate(Vector2.right * speed * Time.deltaTime); // move 
        the boomerang to the right
        keepGoing = true;

    }

    if (checkDistance >= returnDistance)
    {
        transform.Translate(-Vector2.right * speed * Time.deltaTime); // move 
        the boomerang to the left
        keepGoing = true;
    } 
  }
}         

Так как мне поступить так, чтобы я не мог взять значение, которое я установил в инспекторе для поворотного момента бумеранга, и поместить его в оператор if?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Вы должны сравнить переменную checkDistance с некоторым значением с плавающей запятой (близким к нулю, но не 0f) - 0,1f или 0,01f и т. Д. (Вы должны выяснить это путем тестирования).

UPD: я думаю, что должен расширить свой ответ, чтобы прояснить проблему здесь. Вы пытаетесь сравнить float и [float; float]. Очевидно, это не имеет смысла. Поэтому вы должны сравнить два значения с плавающей запятой.

Если вы хотите, чтобы бумеранг летел на определенное расстояние от того, кто его бросает, вы можете установить расстояние от вашего персонажа до бумеранга с некоторым значением с плавающей точкой (максимальное расстояние броска).

Или, если вы хотите, чтобы бумеранг возвращался после того, как он достигнет некоторой точки в пространстве, вы должны сделать, как я писал в начале, - сравнить расстояние от бумеранга до этой точки в пространстве с некоторым значением с плавающей запятой (достаточно близко, чтобы считать, что бумеранг действительно попал в мишени)

0 голосов
/ 15 мая 2018

Вы сказали "Я пытаюсь создать механику бумеранга для 2-го платформера, где бумеранг меняет направление, когда достигает определенной точки" . Тогда вы можете использовать Vector2.sqrMagnitude .

Вот пример использования этого вектора

public static float SqrMagnitude(Vector2 a)
{
     return a.x * a.x + a.y * a.y;
}

Так что в вашем случае это может быть что-то вроде этого

 Vector2 dir = P2 - P1;
 float length = dir.magnitude;
 dir -= length;

Надеюсь, это поможет.

0 голосов
/ 15 мая 2018
If ((Checkdistance -  returndistance) > 0f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...