public class Character : MonoBehaviour { Vector3targetPosition; voidMoveTowardsTargetPosition() { if(targetPosition != Vector3.zero) { //Move towards the target position! } } public voidSetTargetPosition(Vector3 newPosition) { targetPosition = newPosition; } } 在这种情况下,我们希望这个角色走向目标位置,仅仅在它被设定的时候。在上面的代码中,我们通过检查targetPosition是否不等于其默认值(0,0,0)来实现.但现在我们有一个问题:如果你想要你的角色moveto(0,0,0)呢?你不用怀疑这个值,因为它确实可能会在游戏中出现! 幸运的是,有一个诀窍来:可空类型.它避免了通过比较任意值来确认一个变量是否被初始化。 使用可空类型 创建可空类型,仅需在任何一个值类型(如Vector3,Rect,int,float)的变量声明后,添加一个“?”。
public class Character : MonoBehaviour { //Notice theadded "?" Vector3?targetPosition; voidMoveTowardsTargetPosition() { if (targetPosition.HasValue) { //Move towards the target position! //use targetPosition.Value for the actual value } } public voidSetTargetPosition(Vector3 newPosition) { targetPosition = newPosition; } } 看到这里 可空类型有两个属性我们可以使用:HasValue(如果已经指定了变量则为true,否则false),和Value(变量的实际分配值)。
//First, check if the variable has been assigned a value if (targetPosition.HasValue) { //movetowards targetPosition.Value } else { //targetPosition.Value is invalid! Don't use it! }