2016-10-16 2 views
0

Вкратце, я замечаю, что множество предопределенных функций в Unity (простая платформа разработки игр, которые я использую) либо вернут значение (например, координату), или вернет false, если выполняются определенные условия. Я попытался сделать это сам, однако компилятор всегда ищет преобразование как возвращаемый тип и не позволит мне возвращать логическое значение (потому что функция объявлена ​​для возврата преобразования).Я хочу, чтобы функция возвращала определенное значение, else возвращает 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; 
} 

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

+0

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

+1

@GhostCat Ответ всегда был в моем коде все время. Я не понял основную концепцию «вне» ключевого слова. Некоторые предопределенные функции, такие как «Physics.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 в логическое значение ложь, если объект null, true в других случаях. Это странно, но это действительно сработало для меня.

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

bool b = SelectObject(); 
Смежные вопросы