19
}
这里只设置了gameobject的3个属性,眼力好的同学一定会发现这些对象都是“死的”,因为少了脚本属性,它们不会和玩家交互。设置脚本属性要复杂的多,编译好的脚本随着主程序下载到本地,它们也应该通过配置文件加载,再通过C#的反射创建脚本对象,赋给相应的gameobject。
最后是Scene和asset代码:
C#代码
001
public class Scene {
002
003
public List<Asset> AssetList {
004
005
get;
006
007
set;
008
009
}
010
011
}
012
013
public class Asset {
014
015
public const byte TYPE_JSON = 1;
016
017
public const byte TYPE_GAMEOBJECT = 2;
018
019
public Asset() {
020
021
//default type is gameobject for json load
022
023
Type = TYPE_GAMEOBJECT;
024
025
}
026
027
public byte Type {
028
029
get;
030
031
set;
032
033
}
034
035
public string Name {
036
037
get;
038
039
set;
040
041
}
042
043
public string Source {
044
045
get;
046
047
set;
048
049
}
050
051
public double[] Bounds {
052
053
get;
054
055
set;
056
057
}
058
059
public double[] Position {
060
061
get;
062
063
set;
064
065
}
066
067
public double[] Rotation {
068
069
get;
070
071
set;
072
073
}
074
075
public List<Asset> AssetList {
076
077
get;
078
079
set;
080
081
}
082
083
public bool isLoadFinished {
084
085
get;
086
087
set;
088
089
}
090
091
public WWW www {
092
093
get;
094
095
set;
096
097
}
098
099
public GameObject gameObject {
100
101
get;
102
103
set;
104
105
}
106
107
}
代码就讲完了,在我实际测试中,会看到gameobject一个个加载并显示在屏幕中,并不会影响到游戏操作。代码还需要进一步完善适合更多的资源类型,如动画资源,文本,字体,图片和声音资源。
动态加载资源除了网络游戏必需,对于大公司的游戏开发也是必须的。它可以让游戏策划(负责场景设计),美工和程序3个角色独立出来,极大提高开发效率。试想如果策划改变了什么NPC的位置,美工改变了某个动画,或者改变了某个程序,大家都要重新倒入一遍资源是多么低效和麻烦的一件事。
声明: 本文由( zqcyou )原创编译,转载请保留链接: Unity3D教程:Json实现资源动态加载