#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();