Пример #1
0
        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;
        }
Пример #3
0
        /**
         * @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);
        }