void Start() { //read and parse skeleton josn into SkeletonData TextAsset jsonReader = (TextAsset)Resources.Load("skeleton.json", typeof(TextAsset)); TextReader reader = new StringReader(jsonReader.text); Dictionary <String, System.Object> skeletonRawData = Json.Deserialize(reader) as Dictionary <String, System.Object>; SkeletonData skeletonData = ObjectDataParser.ParseSkeletonData(skeletonRawData); //read and parse texture atlas josn into TextureAtlas Texture _textures = Resources.Load <Texture>("texture"); jsonReader = (TextAsset)Resources.Load("texture.json", typeof(TextAsset)); reader = new StringReader(jsonReader.text); Dictionary <String, System.Object> atlasRawData = Json.Deserialize(reader) as Dictionary <String, System.Object>; AtlasData atlasData = AtlasDataParser.ParseAtlasData(atlasRawData); TextureAtlas textureAtlas = new TextureAtlas(_textures, atlasData); //use the above data to make factory UnityFactory factory = new UnityFactory(); factory.AddSkeletonData(skeletonData, skeletonData.Name); factory.AddTextureAtlas(textureAtlas); //add 20 centaur into scene at some random positions. System.Random random = new System.Random(); for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { Armature armature = factory.BuildArmature("centaur/charactor", null, "charactor_all"); armature.AdvanceTime(0f); float r0 = (float)random.NextDouble() + 0.5f; float r1 = 0; //(float)random.NextDouble(); float r2 = (float)random.NextDouble(); ((armature.Display as UnityArmatureDisplay).Display as GameObject).transform.position = new Vector3((float)j + r0 * 20f, 1, r2 * 15f); WorldClock.Clock.Add(armature); armature.Animation.GotoAndPlay("run", -1, -1, 0); } } //add 20 bird into scene at some random positions. for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { Armature armature = factory.BuildArmature("bird/charactor", null, "charactor_all"); armature.AdvanceTime(0f); float r0 = (float)random.NextDouble() + 0.5f; float r1 = (float)random.NextDouble() + 1; float r2 = (float)random.NextDouble(); ((armature.Display as UnityArmatureDisplay).Display as GameObject).transform.position = new Vector3((float)j + r0 * 20f, (float)i * 3f + r1 * 5f, r2 * 15f); WorldClock.Clock.Add(armature); armature.Animation.GotoAndPlay("fly", -1, -1, 0); } } }
/// <summary> /// - Create a factory instance. (typically only one global factory instance is required) /// </summary> /// <version>DragonBones 3.0</version> /// <language>en_US</language> /// <summary> /// - 创建一个工厂实例。 (通常只需要一个全局工厂实例) /// </summary> /// <version>DragonBones 3.0</version> /// <language>zh_CN</language> public BaseFactory(DataParser dataParser = null) { if (BaseFactory._objectParser == null) { BaseFactory._objectParser = new ObjectDataParser(); } if (BaseFactory._binaryParser == null) { BaseFactory._binaryParser = new BinaryDataParser(); } this._dataParser = dataParser != null ? dataParser : BaseFactory._objectParser; }
/** * @private */ protected override AnimationData _ParseAnimation(Dictionary <string, object> rawData) { var animation = BaseObject.BorrowObject <AnimationData>(); animation.frameCount = (uint)Math.Max(ObjectDataParser._GetNumber(rawData, ObjectDataParser.DURATION, 1), 1); animation.playTimes = (uint)ObjectDataParser._GetNumber(rawData, ObjectDataParser.PLAY_TIMES, 1); animation.duration = (float)animation.frameCount / (float)this._armature.frameRate;//Must float animation.fadeInTime = ObjectDataParser._GetNumber(rawData, ObjectDataParser.FADE_IN_TIME, 0.0f); animation.scale = ObjectDataParser._GetNumber(rawData, ObjectDataParser.SCALE, 1.0f); animation.name = ObjectDataParser._GetString(rawData, ObjectDataParser.NAME, ObjectDataParser.DEFAULT_NAME); if (animation.name.Length == 0) { animation.name = ObjectDataParser.DEFAULT_NAME; } // Offsets. var offsets = rawData[ObjectDataParser.OFFSET] as List <object>; animation.frameIntOffset = uint.Parse(offsets[0].ToString()); animation.frameFloatOffset = uint.Parse(offsets[1].ToString()); animation.frameOffset = uint.Parse(offsets[2].ToString()); this._animation = animation; if (rawData.ContainsKey(ObjectDataParser.ACTION)) { animation.actionTimeline = this._ParseBinaryTimeline(TimelineType.Action, uint.Parse(rawData[ObjectDataParser.ACTION].ToString())); } if (rawData.ContainsKey(ObjectDataParser.Z_ORDER)) { animation.zOrderTimeline = this._ParseBinaryTimeline(TimelineType.ZOrder, uint.Parse(rawData[ObjectDataParser.Z_ORDER].ToString())); } if (rawData.ContainsKey(ObjectDataParser.BONE)) { var rawTimeliness = rawData[ObjectDataParser.BONE] as Dictionary <string, object>; foreach (var k in rawTimeliness.Keys) { var rawTimelines = rawTimeliness[k] as List <object>; var bone = this._armature.GetBone(k); if (bone == null) { continue; } for (int i = 0, l = rawTimelines.Count; i < l; i += 2) { var timelineType = int.Parse(rawTimelines[i].ToString()); var timelineOffset = int.Parse(rawTimelines[i + 1].ToString()); var timeline = this._ParseBinaryTimeline((TimelineType)timelineType, (uint)timelineOffset); this._animation.AddBoneTimeline(bone, timeline); } } } if (rawData.ContainsKey(ObjectDataParser.SLOT)) { var rawTimeliness = rawData[ObjectDataParser.SLOT] as Dictionary <string,object>; foreach (var k in rawTimeliness.Keys) { var rawTimelines = rawTimeliness[k] as List <object>; var slot = this._armature.GetSlot(k); if (slot == null) { continue; } for (int i = 0,l = rawTimelines.Count; i < l; i += 2) { var timelineType = int.Parse(rawTimelines[i].ToString()); var timelineOffset = int.Parse(rawTimelines[i + 1].ToString()); var timeline = this._ParseBinaryTimeline((TimelineType)timelineType,(uint)timelineOffset); this._animation.AddSlotTimeline(slot,timeline); } } } this._animation = null; return(animation); }