Unity 个人资料.docx
《Unity 个人资料.docx》由会员分享,可在线阅读,更多相关《Unity 个人资料.docx(44页珍藏版)》请在冰豆网上搜索。
![Unity 个人资料.docx](https://file1.bdocx.com/fileroot1/2022-10/10/c5cb5376-ae4b-4239-ba16-10e410d43d33/c5cb5376-ae4b-4239-ba16-10e410d43d331.gif)
Unity个人资料
Unity个人资料
1.Unity3D中使用ScriptableObject进行系列化
ScriptableObject类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。
用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便。
这样除了playerpref和c#文件读取外,另外的一种存取一些数据对象的方法
1.using UnityEngine;
2.
3.public class XMLContains :
ScriptableObject
4.
5.{
6.
7. public string theXML;
8.
9.}
2.下面提供了一种打包成bundle资源,通过www来进行载入的方案:
通常,可以用BuildPipeline.BuildAssetBundle打包资源,这些资源包括模型、纹理、贴图等。
其实也可以打包ScriptableObject,而ScriptableObject中可以存储任何数据类型。
以下为一个完整示例。
1、先创建一个类:
1.using UnityEngine;
2.
3.using System.Collections.Generic;
4.
5.public class SysData :
ScriptableObject
6.
7.{
8.
9.public List content;
10.
11.}
usingUnityEngine;
usingSystem.Collections.Generic;
publicclassSysData:
ScriptableObject
{
publicListcontent;
}
该类只有一个属性content。
当然也可以声明更多属性、事件和方法。
在后面,这个类的实例将作为资源被打包。
2、创建一个编辑器脚本:
该脚本用于实例化SysData,设置一些数据,然后打包。
1.using UnityEngine;
2.
3.using UnityEditor;
4.
5.using System.Collections.Generic;
6.
7.public class Export
8.
9.{
10.
11. [MenuItem("Assets/Export")]
12.
13. public static void Execute()
14.
15. {
16.
17. //实例化SysData
18.
19. SysData sd = ScriptableObject.CreateInstance();
20.
21. //随便设置一些数据给content
22.
23. sd.content = new List();
24.
25. sd.content.Add(new Vector3(1,2,3));
26.
27. sd.content.Add(new Vector3(4,5,6));
28.
29. // SysData将创建为一个对象,这时在project面板上会看到这个对象。
30.
31. string p = "Assets/SysData.asset";
32.
33. AssetDatabase.CreateAsset(sd, p);
34.
35. Object o = AssetDatabase.LoadAssetAtPath(p, typeof(SysData));
36.
37. //打包为SysData.assetbundle文件。
38.
39. BuildPipeline.BuildAssetBundle(o, null, "SysData.assetbundle");
40.
41. //删除面板上的那个临时对象
42.
43. AssetDatabase.DeleteAsset(p);
44.
45. }
46.
47.}
48.
49.
usingUnityEngine;
usingUnityEditor;
usingSystem.Collections.Generic;
publicclassExport
{
[MenuItem("Assets/Export")]
publicstaticvoidExecute()
{
//实例化SysData
SysDatasd=ScriptableObject.CreateInstance();
//随便设置一些数据给content
sd.content=newList();
sd.content.Add(newVector3(1,2,3));
sd.content.Add(newVector3(4,5,6));
//SysData将创建为一个对象,这时在project面板上会看到这个对象。
stringp="Assets/SysData.asset";
AssetDatabase.CreateAsset(sd,p);
Objecto=AssetDatabase.LoadAssetAtPath(p,typeof(SysData));
//打包为SysData.assetbundle文件。
BuildPipeline.BuildAssetBundle(o,null,"SysData.assetbundle");
//删除面板上的那个临时对象
AssetDatabase.DeleteAsset(p);
}
}
3、运行时加载这个数据资源。
1.IEnumerator Start ()
2.{
3. WWW www = new WWW("file:
//" + Application.dataPath + "/../SysData.assetbundle");
4. yield return www;
5.
6. //转换资源为SysData,这个sd对象将拥有原来在编辑器中设置的数据。
7. SysData sd = www.assetBundle.mainAsset as SysData;
8. //如打印sd.content[0],将得到Vector3(1,2,3);
9. print(sd.content[0]);
10.}
IEnumeratorStart()
{
WWWwww=newWWW("file:
//"+Application.dataPath+"/../SysData.assetbundle");
yieldreturnwww;
//转换资源为SysData,这个sd对象将拥有原来在编辑器中设置的数据。
SysDatasd=www.assetBundle.mainAssetasSysData;
//如打印sd.content[0],将得到Vector3(1,2,3);
print(sd.content[0]);
}
4、这其实是把整个对象实例打包,如果ScriptableObject属性中包括其他的类实例,则这些类需加上[Serializable]序列化。
通过这种方法,可以将系统需要的数据(如角色分类、matrix4x4数据等等)打包,加载后直接转换为预定的类型,具有更高的效率。
Unity3D游戏引擎最详尽基础教程
(2012-04-2810:
02:
41)
转载▼
标签:
it
分类:
OpenGLUtity3D
我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?
首先是因为专业,Unity3D非常强大,用它创建一个类似MiniGore这样的3D平面射击游戏简直轻而易举,而就连使命召唤这样的大型3d游戏,如果素材得当也不在话下。
二是因为易用,他的操作非常容易,而使用的脚本语言又是JavaScript或者C#,不仅非常简单,也让各个种类的程序员都非常容易上手。
再次,就是因为免费,如果你不使用Pro或者Mobile的内容的话,Unity3d就是完全免费的。
还有就是对3D模型的兼容性,几乎任何3d模型都可以导入到unity中,可以说是一个很方便的特性。
今天,我就来讲讲Unity3D的基础操作,这可以说是一个新手必读吧,读完之后,你一定会惊叹,原来做一个游戏这么简单。
第一节加入重力
我们先打开Unity3d,新建一个场景(Scene),新建的时候应该会有对话框要求你加入哪些AssetPackage,记得选择PhysicsMaterial,因为后面我们一定要用的哦亲。
如果创建的时候没加,你可以再后来的Asset菜单里加:
之后,我们建立一个Cude,调整一下x和z的大小,我这里调成了25,让它变成一个地板,你也可以放一个texture上去,看起来更加真实,我这里从简,再创建一个sphere,在component中选择Physics中的RigidBody,前提是选中你的sphere物体,之后会看到这个Sphere的inpector中加入一个component叫做RigidBody,调整好Camera运行一下,你就会发现Sphere受到重力的影响自动掉落到地板上。
之后,通过我们之前引入的PhysicsMaterials资源包,你还可以选择这个物体的物理性质,我这里选择Bouncy(跳跳),落下之后,这个物体就会蹦来蹦去的,呵呵
第二节检测碰撞
下面我们通过简单的JavaScript语句来检测碰撞,这在制作游戏中是很有用的,比如说检测到子弹和敌人的碰撞之后,可以使用我们后来要讲到destory命令消灭敌人