Я хочу, чтобы функция возвращала определенное значение, иначе возвращала false

#function #unity3d #return #return-type

#функция #unity3d #Возврат #return-type

Вопрос:

Короче говоря, я замечаю, что многие предопределенные функции в Unity (простая платформа для разработки игр, которую я использую) либо возвращают значение (например, координату), либо возвращают false, если выполняются определенные условия. Я попытался сделать это сам, однако компилятор всегда ищет преобразование в качестве возвращаемого типа и не позволяет мне возвращать логическое значение (потому что функция объявлена для возврата преобразования).

     Transform SelectObject() {
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, out hit, unitLayer))
        return hit.transform;
    else
        return false;
}
 

Как мне вернуть определенный тип данных, но при этом заставить мою функцию возвращать логическое значение (false), когда функция «не выполняет» свою задачу?

Комментарии:

1. Даже предопределенные функции должны быть где-то задокументированы. Может быть, вы хотите посмотреть на некоторые примеры такого поведения. Я не в Unity, но то, что вы здесь описываете, звучит довольно странно. Вы уверены, что нет каких-то неявных преобразований, которые незаметно переводят что-то вроде «нулевого» возврата в false ?!

2. @GhostCat Ответ был прямо в моем коде все время. Я не понял основную концепцию ключевого слова «out». Некоторые предопределенные функции, такие как «Физика. Raycast()» вернет true или false в зависимости от того, были ли выполнены определенные условия, но эти функции также будут передавать дополнительную информацию через другую переменную с ключевым словом «out». Эффективно возвращает логическое значение И некоторую дополнительную информацию.

Ответ №1:

Я некоторое время не использовал Unity, но я думаю, вам просто нужно это сделать:

 Transform SelectObject() {
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    if (Physics.Raycast (ray, out hit, unitLayer))
        return hit.transform;
    else
        return null;
}
 

У Unity есть утилита, которая преобразует объекты, производные от UnityEngine.Object , в логическое значение: false, если объект равен null, true в других случаях.
Это странная вещь, но у меня это действительно сработало.

Я думаю, вы можете неявно преобразовать объекты преобразования в логическое значение следующим образом:

 bool b = SelectObject();