HTSpriteSheet allows the creation of a particle and play an animated sprite from spritesheet.
Inheritance: MonoBehaviour
コード例 #1
0
    /// <summary>
    /// Update this instance.
    /// </summary>
    void Update()
    {
        // play
        foreach (HTSequence seq in sequences)
        {
            if (Time.time - startTime > seq.waittingTime && !seq.play)
            {
                if (seq.spriteSheet != null)
                {
                    GameObject effet = (GameObject)Instantiate(seq.spriteSheet, myTransform.position, myTransform.rotation);
                    effet.transform.parent        = myTransform;
                    effet.transform.localPosition = new Vector3(seq.offset.x * -1, seq.offset.y, seq.offset.z);
                    effects.Add(effet);
                    seq.play = true;
                    inPlayingCount++;
                    // Inspector copy
                    if (Application.isEditor && Application.isPlaying && editorMode)
                    {
                        HTSpriteSheet ss = seq.spriteSheet.GetComponent <HTSpriteSheet>();
                        ss.offset       = effet.transform.position - myTransform.position;
                        ss.waittingTime = seq.waittingTime;
                        ss.copy         = true;
                    }
                }
            }
        }


        // Destroy
        if (autoDestruct)
        {
            int endCount = 0;
            if (inPlayingCount == sequences.Count)
            {
                foreach (GameObject effect in effects)
                {
                    if (effect == null)
                    {
                        endCount++;
                    }
                }
                if (endCount == inPlayingCount)
                {
                    Destroy(gameObject);
                }
            }
        }

        Camera_BillboardingMode();
    }
コード例 #2
0
    void OnDrawGizmos()
    {
        bool childSeq = false;

        foreach (HTSequence seq in sequences)
        {
            if (seq.spriteSheet != null)
            {
                HTSpriteSheet sprite = seq.spriteSheet.GetComponent <HTSpriteSheet>();
                Gizmos.color = seq.color;
                Gizmos.DrawWireCube(transform.position + seq.offset, new Vector3(sprite.sizeEnd.x / 2, sprite.sizeEnd.y / 2, 0));
                childSeq = true;
            }
        }

        if (!childSeq)
        {
            Gizmos.DrawWireCube(transform.position, new Vector3(1, 1, 0));
        }
    }
コード例 #3
0
    public override void OnInspectorGUI()
    {
        HTSpriteSequencer t;
        GUIStyle          boldStyle     = new GUIStyle();
        GUIStyle          foldOutStyle  = EditorStyles.foldout;
        GUIStyle          paddingStyle  = new GUIStyle();
        GUIStyle          paddingStyle2 = new GUIStyle();

        foldOutStyle.fontStyle = FontStyle.Bold;
        boldStyle.fontStyle    = FontStyle.Bold;
        paddingStyle.padding   = new RectOffset(30, 0, 0, 0);
        paddingStyle2.padding  = new RectOffset(60, 0, 0, 0);


        string assetPath = "";

        t = (HTSpriteSequencer)target;

        #region Sequencer
        // Sequencer
        EditorGUILayout.Space();
        t.editorMode   = EditorGUILayout.Toggle("Editor mode", t.editorMode);
        t.name         = EditorGUILayout.TextField("Name", t.name);
        t.billboarding = (HTSpriteSheet.CameraFacingMode)EditorGUILayout.EnumPopup("Camera facing", t.billboarding);
        // playmode disable the autodestruc
        if (Application.isPlaying && Application.isEditor && t.editorMode)
        {
            t.autoDestruct = false;
        }
        else
        {
            t.autoDestruct = EditorGUILayout.Toggle("Auto destruct", t.autoDestruct);
        }
        EditorGUILayout.Space();

        // button
        Rect rec = EditorGUILayout.BeginHorizontal();
        rec.x      = 5;
        rec.width  = 150;
        rec.height = 20;
        if (!Application.isPlaying)
        {
            if (GUI.Button(rec, "Add spritesheet prefab"))
            {
                HTSequence seq = new HTSequence();
                seq.color = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
                t.sequences.Add(seq);
            }
        }
        else
        {
            if (GUI.Button(rec, "Replay"))
            {
                t.KillAllSequences();
            }
        }

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space();
        EditorGUILayout.HelpBox("Spritesheet prefab list", MessageType.None);
        EditorGUILayout.Space();
        #endregion

        #region Sequences
        // Sequences
        int count = 1;
        //foreach (HTSequence seq in t.sequences){
        for (int i = 0; i < t.sequences.Count; i++)
        {
            HTSequence seq = t.sequences[i];

            //folding name
            EditorGUILayout.BeginVertical();
            string name = "Spritesheet ?";
            if (seq.spriteSheet != null)
            {
                name = seq.spriteSheet.name;
            }

            seq.foldOut = EditorGUILayout.Foldout(seq.foldOut, name);
            EditorGUILayout.Space();

            // properties
            if (seq.foldOut)
            {
                EditorGUILayout.BeginVertical(paddingStyle);
                // spritesheet prefab
                seq.spriteSheetRef = (GameObject)EditorGUILayout.ObjectField("Spritesheet Prefab ", seq.spriteSheetRef, typeof(GameObject), false);

                // Gizmos color
                seq.color = EditorGUILayout.ColorField("Gizmos color", seq.color);

                // prefab creation process
                if (seq.spriteSheetRef != seq.oldSpriteSheetRef && seq.spriteSheetRef != null)
                {
                    // Dynamic gameObject creation
                    GameObject tmp = (GameObject)Instantiate(seq.spriteSheetRef, new Vector3(0, 0, 0), Quaternion.identity);
                    tmp.name = t.name + "_s" + i + "_" + seq.spriteSheetRef.name;

                    // deleting the current prefab
                    if (seq.spriteSheet != null)
                    {
                        string tmpPath = AssetDatabase.GetAssetPath(seq.spriteSheet.GetInstanceID());
                        AssetDatabase.DeleteAsset(tmpPath);
                        assetPath = GetAssetRootPath(tmpPath);
                    }
                    else
                    {
                        assetPath = "Assets/UserSpriteSheetEffects/" + t.name + "/";
                    }

                    // create directory
                    CreateAssetDirectory(t.name);

                    // Dynamic prefab creation
                    seq.spriteSheet = PrefabUtility.CreatePrefab(assetPath + tmp.name + ".prefab", tmp, ReplacePrefabOptions.ConnectToPrefab);
                    seq.spriteSheet.GetComponent <HTSpriteSheet>().billboarding = HTSpriteSheet.CameraFacingMode.Never;
                    DestroyImmediate(tmp);

                    // for test if you must create a new prefab
                    seq.spriteSheetRef    = seq.spriteSheet;
                    seq.oldSpriteSheetRef = seq.spriteSheetRef;
                }

                #region SpriteSheet properties
                // spritesheet propertie
                if (seq.spriteSheet != null)
                {
                    HTSpriteSheet spriteSheet = seq.spriteSheet.GetComponent <HTSpriteSheet>();

                    if (!Application.isPlaying && spriteSheet.copy && t.editorMode)
                    {
                        seq.offset       = spriteSheet.offset;
                        seq.waittingTime = spriteSheet.waittingTime;
                        spriteSheet.copy = false;
                    }
                    spriteSheet.foldOut = EditorGUILayout.Foldout(spriteSheet.foldOut, "Spritesheet properties");

                    if (spriteSheet.foldOut)
                    {
                        EditorGUILayout.BeginVertical(paddingStyle);
                        // Frame per second
                        spriteSheet.framesPerSecond = EditorGUILayout.IntField("Frames per second", spriteSheet.framesPerSecond);
                        // One shot
                        spriteSheet.isOneShot = EditorGUILayout.Toggle("One shot", spriteSheet.isOneShot);
                        if (!spriteSheet.isOneShot)
                        {
                            EditorGUILayout.HelpBox("0 = infite loop", MessageType.Info);
                            // life
                            spriteSheet.life = EditorGUILayout.FloatField("life", spriteSheet.life);
                        }

                        EditorGUILayout.Space();
                        EditorGUILayout.Space();

                        GUILayout.Label("Sprite properties", boldStyle);
                        //size
                        spriteSheet.sizeStart = EditorGUILayout.Vector2Field("Start size", spriteSheet.sizeStart);
                        spriteSheet.sizeEnd   = EditorGUILayout.Vector2Field("End size", spriteSheet.sizeEnd);
                        EditorGUILayout.Space();
                        // Rotation
                        spriteSheet.randomRotation = EditorGUILayout.Toggle("Random rotation", spriteSheet.randomRotation);
                        if (!spriteSheet.randomRotation)
                        {
                            spriteSheet.rotationStart = EditorGUILayout.FloatField("Start rotation", spriteSheet.rotationStart);
                        }
                        spriteSheet.rotationEnd = EditorGUILayout.FloatField("End rotation", spriteSheet.rotationEnd);

                        EditorGUILayout.Space();
                        EditorGUILayout.Space();

                        GUILayout.Label("Color properties", boldStyle);
                        spriteSheet.addColorEffect = EditorGUILayout.Toggle("Add color effect", spriteSheet.addColorEffect);
                        if (spriteSheet.addColorEffect)
                        {
                            spriteSheet.colorStart = EditorGUILayout.ColorField("Start color", spriteSheet.colorStart);
                            spriteSheet.colorEnd   = EditorGUILayout.ColorField("Start color", spriteSheet.colorEnd);
                        }
                        EditorGUILayout.EndVertical();
                    }
                }
                #endregion

                #region Sequence properties
                // sequence properties
                EditorGUILayout.Space();
                seq.offset       = EditorGUILayout.Vector3Field("Offset", seq.offset);
                seq.waittingTime = EditorGUILayout.FloatField("Wait before start", seq.waittingTime);
                EditorGUILayout.EndVertical();

                // remove button
                rec        = EditorGUILayout.BeginHorizontal();
                rec.x      = 30;
                rec.width  = 60;
                rec.height = 20;
                if (GUI.Button(rec, "Remove"))
                {
                    if (seq.spriteSheet != null)
                    {
                        AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(seq.spriteSheet.GetInstanceID()));
                    }
                    t.sequences.Remove(seq);
                }
                #endregion

                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space();
                EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space();

                EditorGUILayout.EndVertical();
            }
            count++;
        }
        #endregion

        // Update
        if (GUI.changed)
        {
            EditorUtility.SetDirty(t);
            if (Application.isPlaying)
            {
                t.KillAllSequences();
            }
        }
    }