Unity中可以扩展的相机属性●清除标记:决定场景的哪个部分需要清除。你可以创建多个相机并赋予它们不同的深度。如果当前相机没有设置天空盒,它将缺省使用在渲染设置中的天空盒。武器相机的Clear Flags应该被设置为仅深度。为了使UI显示在所有其他相机视的顶部,你还需要设置Clear Flags和Depth only并确定相机的深度比其他相机的高。图7-53景深相机正交相机。......
2023-10-17
本小节将介绍的是Unity数据库与存储的相关内容。
1)PlayerPrefs存储数据
适用范围如下:
(1)适用设备:Mac OSX、Linux、Windows、Windows Store Apps、Windows Phone 8、Web players。
(2)存储机制:Key-Value。
(3)可存储变量类型:int、float、string。
2)PlayerPrefs数据存储路径
①Mac OSX:~/Library/Preferences
②Windows:HKCU\Software\[company name]\[product name]
③Linux:~/.config/unity3d/[CompanyName]/[ProductName]
④Windows StoreApps:%userprofile%\AppData\Local\Packages\[ProductPackageId]>\LocalState\playerprefs.dat
⑤WebPlayer
⑥Mac OS X:~/Library/Preferences/Unity/WebPlayerPrefs
⑦Windows:%APPDATA%\Unity\WebPlayerPrefs
3)PlayerPrefs常用方法
4)XML数据生成和解析
(1)XML指可扩展标记语言(EXtensible Markup Language)。
(2)XML是一种标记语言,很类似HTML。
(3)XML的设计宗旨是传输数据,而非显示数据。
5)XML结构
每个标签内部可以有多个属性。标签可以层层嵌套,形成一个树形结构。
例如:
以上Alarm(元素节点)、lock(属性节点)、Time(元素节点)、StringValue(文本节点)都是节点(Node),但是只有<Alarm>...</Alarm>和<Time>StringValue</Time>是元素(Element)。
6)XML常用的类
(1)XmlDocument——XML文件类。
(2)XmlNode——XML节点类。
(3)XmlAttribute——XML属性类。
(4)XmlElement——XML元素类XmlNode XmlDocument XmlElement。
7)Xml数据生成步骤
在Unity引擎中如何生成本地XML数据?
第一步:引用C#的命名空间System.Xml。
第二步:生成XML文档(XmlDocument类)。
第三步:生成根元素(XmlElement类),添加给文档对象。
第四步:循环生成子元素添加给父元素。
第五步:将生成的XML文档保存。
8)Xml数据生成示例
9)Xml序列化
序列化是将对象状态转换为可保持或传输的格式的过程。我们可以把对象序列化为不同的格式,比如,Json序列化、XML序列化、二进制序列化等,以上这些不同的格式也都是为了适应具体的业务需求。
10)反序列化示例
11)JSON数据生成和解析
(1)System.Json:
①JSON是纯文本;②JSON是一种轻量级的数据交换格式;③JSON具有层级结构(值中存在值):
数据在键值对;数据由逗号分隔;花括号保存对象;方括号保存数组。
(2)LitJson.JsonMapper:
①把对象转化成JSON格式字符串:JsonMapper.ToJson;②把JSON格式字符串转化成对象:JsonMapper.ToObject。(www.chuimin.cn)
12)什么是SQLite
①SQLite是一款轻型的数据库。
②SQLite的设计目标是嵌入式的。
③SQLite占用资源非常低。
④SQLite能够支持Windows/Linux/Unix等主流的操作系统。
作用:INSERT INTO语句用于向表格中插入新的行。
语法1:INSERT INTO表名称VALUES(值1,值2,…)
语法2:INSERT INTO table name(列1,列2,…)VALUES(值1,值2,…)
作用:DELETE语句用于删除表中的行。
语法:DELETE FROMPerson WHERE LastName=Wilson
作用:Update语句用于修改表中的数据。
语法:UPDATE表名称SET列名称=新值WHERE列名称=某值
作用:SELECT语句用于从表中选取数据。
语法:SELECT列名称FROM表名称
13)Unity当中使用SQLite
导入mono.data.sqlite.dll到Assets文件夹代码添加库:using Mono.Data.Sqlite;
使用SQLiteConnection对象,进行数据库连接,此操作可以创建空的数据库。
具体代码如下:
14)执行SQL语句的三种方式
(1)int ExecuteNonQuery()。返回受影响的行数(常用于执行增删改操作)。
(2)object ExecuteScalar()。返回查询到的第一个值(常用于只查询一个结果时)。
(3)SqliteDataReader ExecuteReader()。返回所有查询的结果(SqliteDataReader对象)。
15)数据库封装:为何要封装?
(1)方便项目管理。
(2)方便开发人员的快捷的使用。
(3)防止高度保密数据外泄。
(4)连接数据库。
(5)通过Sql语句查询数据。
(6)通过表名查询全表数据。
(7)关闭数据库连接,释放资源。
…
16)平台选择不同的存储路径
在直接使用Application.dataPath来读取文件进行操作,移动端是没有访问权限的。
Application.streamingAssetsPath
直接使用Application.streamingAssetsPath来读取文件进行操作,此方法在PC/Mac电脑中可实现对文件实施“增删查改”等操作,但在移动端只支持读取操作。
使用Application.persistentDataPath来操作文件,该文件存在手机沙盒中,因为不能直接存放文件。
(1)通过服务器直接下载保存到该位置,也可以通过Md5码比对下载更新新的资源。
(2)没有服务器的,只有间接通过文件流的方式从本地读取并写入。
Application.persistentDataPath文件下,然后再通过Application.persistentDataPath来读取操作。
注:
在PC/Mac电脑以及Android跟iPad、iPhone都可对文件进行任意操作,另外在IOS上该目录下的东西可以被iCloud自动备份。发布到安卓端需要经过特殊处理。同样需要上述的三个类库和libsqlite.so文件,但不需要重新建表和重新。插入数据内容。当Android端安装应用程序时,需要一个*.apk的安装文件,此文件内保存着我们从Unity开发平台导入的*.sqlite文件,所以我们可以通过www来下载该sqlite文件,从而通过IO流写入到Android本地的persistentDataPath沙盒路径。该文件保存着所有表格和数据,无需再次创建和插入,通常使用的都是这种方式,较为便捷。
17)Android端连接本地数据库
注意:
二进制文件需要放在Plugins→Android→assets中,然后根据下面的路径就可以在Android中读取。
有关虚拟现实理论基础与应用开发实践的文章
Unity中可以扩展的相机属性●清除标记:决定场景的哪个部分需要清除。你可以创建多个相机并赋予它们不同的深度。如果当前相机没有设置天空盒,它将缺省使用在渲染设置中的天空盒。武器相机的Clear Flags应该被设置为仅深度。为了使UI显示在所有其他相机视的顶部,你还需要设置Clear Flags和Depth only并确定相机的深度比其他相机的高。图7-53景深相机正交相机。......
2023-10-17
图8-32Ball脚本创建1)概要前面创建了一个游戏项目,并且创建了玩家角色和小球这些游戏对象,还通过添加游戏脚本实现了小方块的弹跳。图8-33游戏开始状态图8-34Ball项文本变为蓝色图8-35多出一个小球对象将Player和Floor游戏对象也做成预设。图8-37创建文件夹并修改其名称图8-38移动Player预设和Floor预设至Prefabs文件夹将预设Ball Prefab拖拽到Prefabs文件夹下。图8-39保存文件夹回到Assets图8-40游戏对象命名5)发射小球在窗口顶部菜单中依次单击GameObject→Create Empty。......
2023-10-17
在Assets→Audio文件夹下,右击Create→AudioMixer。只要在主角受伤时播放音效就可以了,开枪的声音同理。刚刚制作的AudioMixer还没有用到,现在我们开始制作,双击AudioMixer,添加一个SoundEffect。在AudioMixer添加一个Music用来控制背景音乐,SoundEffect用来控制音效,Master用来同时控制二者。图8-261enemies放到怪物的AudioSource的output图8-262添加组件图8-263新建脚本MixLevel图8-264把代码放至Canvas回到MasterMixer,单击volumn,选择exposed。图8-267添加music、sound脚本代码回到UI界面里面的slider条,按照不同的slider条功能添加不同的函数。......
2023-10-17
Unity是一个非常流行和强大的游戏引擎,它支持众多的平台和设备。图7-75Game视图效果注意:对于Unity 2D游戏,Unity编辑器会自动处于2D模式。图7-77将playership精灵图片拖入场景视图在结构视图中,单击Unity为你创建的playership游戏对象,在检视器中查看它的属性。通过Unity的2D精灵表单编辑器,能够轻易管理这些精灵表单。......
2023-10-17
实例化预设使用上面章节中描述的创建预设的方法。一旦你创建了预设,你就可以简单快速地得到一个预设的拷贝,称为实例。为了创建任何预设的一个实例,从工程视图中拖动一个预设到层次或场景视图中。添加组件和脚本当你选中任何预设或物体时,你可以通过使用组件来向其中添加一些额外的功能。脚本也是组件的一种类型。缺省情况下脚本也包含在组件菜单中。你可以通过Components→Camera-Control来找到它。......
2023-10-17
导航系统在Unity手册中的定义:The Navigation System allows you to create characters which can navigate the game world.It gives your characters the ability to understand that they need to take stairs to reach second floor,or to jump to get over a ditch.导航系统允许你创建一个在游戏世界中能导航的角色。图7-137在Object面板中设置类型图7-138创建off mesh links4)Off Mesh Links地形之间可能有间隙,形成沟壑,或者是高台不能跳下,导航网格处于非连接的状态,角色无法直接跳跃,要绕一大圈才能到达目的地。图7-144Agent的绿框和角色分离......
2023-10-17
图8-120公有变量初始化这里要注意的是,Tank Mask的选取必须是Players,否则后面子弹的爆炸将不会作用于坦克。图8-121FireTransform的transform设置2)发射子弹接下来就要实现子弹的发射功能,并且子弹可以蓄能,蓄能越久射击距离也就越长,因此也就需要有一个蓄能状态的指示。首先,选中Hierarchy层级下的Tank,为它新建一个子对象Create Empty,命名为FireTransform。该对象主要是规定子弹的射出位置。测试完毕之后,把Hierarchy层的Tank删除掉,保存当前场景。......
2023-10-17
图9-71创建游戏管理器的逻辑脚本游戏胜负逻辑是与GameManager等脚本关联起来的。图9-76添加Look At Target组件运行游戏,发现收集物状态UI已经可以正常显示,面向摄像机了。图9-78添加Wall Mover组件图9-79组件关联在Scripts文件夹内右键Create→C# Script,重命名GoalZone,用于处理到达终点的逻辑。找到VR Win Panel→Exit Game Button上的Button组件,设置On Click事件调用为Game Manager UI→GameManager.ExitGame方法。图9-84设置完成的效果显示成功拾取到4个盾牌收集物到达GoalZone,也会弹出VR Win Panel的UI,可以进行一样的操作。......
2023-10-17
相关推荐