Unity3d游戏开发中使用可空类型(Nullable Types)
你怎么确定一个Vector3,int,或float变量是否被分配了一个值?一个方便的方式就是使用可空类型!
有时变量携带重要信息,但仅仅有在特定的游戏事件发生时触发。比如:一个角色在你的游戏可能闲置,直到他被告知去一个指定的目的地。
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;
}
}
看到这里,unity3d教程 可空类型有两个属性我们能够使用: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!
}
Unity3d游戏开发中使用可空类型(Nullable Types)的更多相关文章
- 游戏开发中IIS常见支持MIME类型文件解析
游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...
- [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...
- [Unity3D]Unity3D游戏开发之伤害数值显示
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念 ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...
- Unity3D 游戏开发构架篇 ——角色类的设计与持久化
在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等 ...
- Unity3D游戏开发之连续滚动背景
Unity3D游戏开发之连续滚动背景 原文 http://blog.csdn.net/qinyuanpei/article/details/22983421 在诸如天天跑酷等2D游戏中,因为游戏须要 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
随机推荐
- TCP、UDP数据包大小的限制
版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa 原创文章,转载请标明出处. https://blog.csdn.net/caoshangpa/article/de ...
- 基于html5背景图片自适应代码
基于html5背景图片自适应代码是一款背景不随滚动条滚动,会根据分辨率不同自动匹配对应的背景图片.效果图如下: 在线预览 源码下载 实现的代码. css代码: .jawbone-hero .jaw ...
- shell中date使用总结-基于自动定期备份mysql实践
------------------------时间的格式 date [OPTION]... [+FORMAT] echo `date 空格 +'时间格式串'` 调用date必须加符号反引号``,表示 ...
- IIS7 https 发生413错误 未显示页面,因为请求实体过大
参考文档: http://msdn.microsoft.com/zh-cn/library/cc737382(v=ws.10).aspx http://www.java123.net/v/12 ...
- [wdt]watchdog
board/ti/am335x/board.c board/ti/am43xx/board.c driver/watchdog/omap_wdt.c include/configs/am43xx_ev ...
- jquery笔记一——小问题+小技巧
1.table行单击选中radio(传说中input[type=radio]比input:radio要快) <tr class="rowSelect"> <td& ...
- [数据结构]最大流之Ford-Fulkerson算法
本文主要讲解最大流问题的Ford-Fulkerson解法.可以说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现.该方法依赖于三种重要思想:残留网络,增广路径和割. 在介绍着三种概念之前 ...
- JVM调优总结(一):基本概念
一.数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身: 而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对 ...
- oracleinsert的时候返回插入的ID
//---------------- 声明部分 ---------------- create or replace package Pro_Test_User is PROCEDURE Ins_Te ...
- getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解
getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应的尺寸.文档里并没说这里返回的就是像素,要注意这个函数的返回值是float,像素肯定是int. getD ...