如何在Unity中正确创建无效的Vector3?

时间:2014-11-11 16:11:33

标签: unity3d optional-parameters

我经常需要将无效位置传递给可选择使用位置的函数(例如RTS单元操作)。但这不编译:

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

那么如何制作一个正确的 invaid Vector3来确定无效/“不关心”的位置?我已经看到像-999999坐标这样的矢量 - 但这是一个令人讨厌的技巧,可能会导致错误(例如在巨大的地图上)。

1 个答案:

答案 0 :(得分:3)

我过去遇到过类似的问题,我发现有两个解决方案。第一个解决方案是为类创建一个包装器。

Class Vector3Wrapper
{
    Vector3 vector;
}

然后我只是将Vector3Wrapper设置为null然后如果它不是null访问它的向量。一个更好的方法是使它成为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!
        }
    }