Beispiel #1
0
    public override void OnInspectorGUI()
    {
        Decal decal = target as Decal;

        SerializedObject so = new SerializedObject(decal);

        SerializedProperty matProp = so.FindProperty("material");

        Material mat = matProp.objectReferenceValue as Material;

        mat = DrawAssetChooser("Materials", mat, materials);
        matProp.objectReferenceValue = mat;

        if (mat != null && mat.mainTexture != null)
        {
            string   texPath = AssetDatabase.GetAssetPath(mat.mainTexture);
            Object[] assets  = AssetDatabase.LoadAllAssetsAtPath(texPath);

            List <Sprite> sprites = new List <Sprite>();
            for (int i = 0; i < assets.Length; i++)
            {
                Sprite texSprite = assets[i] as Sprite;
                if (texSprite != null)
                {
                    sprites.Add(texSprite);
                }
            }

            SerializedProperty spriteProp = so.FindProperty("sprite");
            Sprite             sprite     = spriteProp.objectReferenceValue as Sprite;

            if (sprites.Count > 0)
            {
                sprite = DrawAssetChooser("Sprite", sprite, sprites);
                sprite = DrawSpriteList(sprite, sprites);
            }

            spriteProp.objectReferenceValue = sprite;
        }

        EditorGUILayout.Separator();
        if (GUILayout.Button("Build"))
        {
            decal.BuildDecal();
        }

        if (GUI.changed)
        {
            so.ApplyModifiedProperties();
            decal.BuildDecal();
            GUI.changed = false;
        }
    }
Beispiel #2
0
    private void OnEnable()
    {
        string[] matGuids = AssetDatabase.FindAssets("Decal t:Material");
        for (int i = 0; i < matGuids.Length; i++)
        {
            matGuids[i] = AssetDatabase.GUIDToAssetPath(matGuids[i]);
        }

        materials.Clear();
        for (int i = 0; i < matGuids.Length; i++)
        {
            materials.Add(AssetDatabase.LoadAssetAtPath <Material>(matGuids[i]));
        }

        Decal decal = target as Decal;

        if (decal != null && materials.Count > 0)
        {
            SerializedObject so = new SerializedObject(decal);

            bool anyChanged = false;

            Material           mat     = null;
            SerializedProperty matProp = so.FindProperty("material");
            mat = matProp.objectReferenceValue as Material;
            if (mat == null)
            {
                mat = materials[0];
                matProp.objectReferenceValue = mat;
                anyChanged = true;
            }

            if (mat != null && mat.mainTexture != null)
            {
                SerializedProperty spriteProp = so.FindProperty("sprite");
                Sprite             sprite     = spriteProp.objectReferenceValue as Sprite;
                if (sprite == null)
                {
                    string   texPath = AssetDatabase.GetAssetPath(mat.mainTexture);
                    Object[] assets  = AssetDatabase.LoadAllAssetsAtPath(texPath);
                    for (int i = 0; i < assets.Length; i++)
                    {
                        sprite = assets[i] as Sprite;
                        if (sprite != null)
                        {
                            spriteProp.objectReferenceValue = sprite;
                            anyChanged = true;
                            break;
                        }
                    }
                }
            }

            if (anyChanged)
            {
                so.ApplyModifiedProperties();
                decal.BuildDecal();
            }
        }
    }
Beispiel #3
0
    void OnSceneGUI()
    {
        Decal decal = (Decal)target;

        if (decal.transform.hasChanged)
        {
            foreach (GameObject obj in decal.subDecals)
            {
                if (obj == null)
                {
                    continue;
                }
                for (int i = 0; i < obj.transform.childCount; i++)
                {
                    if (obj.transform.GetChild(i) == null)
                    {
                        continue;
                    }
                    DestroyImmediate(obj.transform.GetChild(i).gameObject, true);
                }
                DestroyImmediate(obj, true);
            }
            decal.subDecals.Clear();
            decal.BuildDecal();
            decal.transform.hasChanged = false;
        }
        decal.Update();
    }
Beispiel #4
0
    public override void OnInspectorGUI()
    {
        Decal decal = (Decal)target;

        decal.decal  = AssetField <Material>("Material", decal.decal);
        decal.offset = EditorGUILayout.FloatField("Offset", decal.offset);
        decal.randomRotateOnSpawn = EditorGUILayout.Toggle("Spawn with random rotation", decal.randomRotateOnSpawn);
        decal.layerMask           = LayerMaskField("Affected Layers", decal.layerMask);
        EditorGUILayout.Separator();
        if (GUI.changed)
        {
            decal.BuildDecal();
        }
    }
Beispiel #5
0
    private void OnSceneGUI()
    {
        Decal decal = target as Decal;

        if (decal != null && decal.transform.hasChanged)
        {
            if (decal.GetInstanceID() != lastInstanceID)
            {
                decal.GetComponent <MeshFilter>().sharedMesh = null;
                lastInstanceID = decal.GetInstanceID();
            }

            UnityEngine.Profiling.Profiler.BeginSample("Decal");
            decal.BuildDecal();
            UnityEngine.Profiling.Profiler.EndSample();
            decal.transform.hasChanged = false;
        }
    }
Beispiel #6
0
    void doDecal(GameObject o, Vector3 cellPos)
    {
        Decal decal = o.GetComponent <Decal>();

        if (decal != null)
        {
            o.transform.forward = Vector3.up;
            Collider[] affected = MapUtility.GetGameObjectByPosition(cellPos, 0.5f, 1 << LayerMask.NameToLayer("Decal"));
            decalAffectObjects.Clear();
            int len = affected.Length;
            if (len > 0)
            {
                for (int i = 0; i < len; i++)
                {
                    decalAffectObjects.Add(affected[i].gameObject);
                }

                decal.BuildDecal(decalAffectObjects);
            }
        }
    }