2014-11-11 5 views
1

Мне часто нужно передать недействительное местоположение на функции, которые могут быть использованы в качестве местоположения (например, действие RTS-устройства). Но это не компилируется:Как я могу правильно создать недопустимый Vector3 в Unity?

public abstract void CastSpell(Spell spell, Vector3 targetLocation = null); 

Так как я могу сделать правильный invaid Vector3 для определения/недопустимый «не важно» места? Я видел такие вещи, как вектор с координатами -999999, но это неприятный трюк, который может вызвать ошибки (например, на огромных картах).

ответ

3

У меня была аналогичная проблема в прошлом, я обнаружил, что существует два решения. Первым решением было создание оболочки для класса.

Class Vector3Wrapper 
{ 
    Vector3 vector; 
} 

Тогда я бы просто установить Vector3Wrapper к нулю, то, если он не был нулевой доступ его вектор. Лучший способ - сделать его Nullable. Ниже приведен пример.

http://unitypatterns.com/nullable-types/

public class Character : MonoBehaviour 
{ 
    //Notice the added "?" 
    Vector3? targetPosition; 

    void MoveTowardsTargetPosition() 
    { 
     //First, check if the variable has been assigned a value 
     if (targetPosition.HasValue) 
     { 
      //move towards targetPosition.Value 
     } 
     else 
     { 
      //targetPosition.Value is invalid! Don't use it! 
     } 
    } 
+0

Не могли бы вы расширить свой ответ? Я не хочу, чтобы вы потеряли хороший ответ, потому что это ответ только на ссылку. – FunctionR

+0

Я немного расширил его, я просто не хотел переписывать информацию с сайта и утверждать ее как свою. – marsh

+1

+1. И не волнуйтесь, пока вы на сайте, тогда все хорошо. – FunctionR

Смежные вопросы