Kategorie: Wszystkie - texture

przez Mike Ton 8 lat temu

1066

Unity 3D : Scriptable Object

Unity 3D : Scriptable Object

Scriptable Object

Asset

(Icons)
Unity

(gizmos)

Assets/Gizmos

"AudioItem Icon.png"

png named with a normal space between "AudioItem" - name of your class - and "Icon".

128x128

public class AudioItem : ScriptableObject { }

https://forum.unity3d.com/threads/custom-scriptableobject-icons-thumbnail.256246/#post-1693711

AttackShapeEditor.cs

AttackShapeEditor : Editor { ... }

Texture2D

(Thumbnail)

RenderStaticPreview (string assetPath, Object[] subAssets, int texWidth, int texHeight) { ... }

staticPreview.Apply();

(draw)

staticPreview.SetPixel(sx+px, sy+py, col);

var staticPreview = new Texture2D (texWidth, texHeight);

bool

(PreviewGUI)

OnPreviewGUI (Rect r, GUIStyle background) { ... }

// 2D rect to draw in PreviewGUI window

HasPreviewGUI () {...}

return true;

// Default == false (off)

// Ensures Preview Window is displayed in Inspector

OnInspectorGUI () { ... }

if (Event.current.type == EventType.Layout) { ... }

return;

// What does this do???

AttackPattern.cs

(Coroutine)
(MonoBehaviour)

Destructible.cs

TakeDamage(float damage) { ... }

if (Health < 0 && DestructionSequence) { ... }

StartCoroutine(DestructionSequence.SequenceCoroutine(this));

...

Destructible : MonoBehaviour { ... }

HideBehindEffect.cs

HideBehindEffect : DestructionSequence { ... }

SequenceCoroutine(MonoBehaviour runner) { ... }

Destroy(runner.gameObject);

yield return new WaitForSeconds(DestroyOriginalAfterTime);

Instantiate(Effect, runner.transform.position, runner.transform.rotation);

DestroyOriginalAfterTime = 1f;

GameObject

Effect;

[CreateAssetMenu(menuName="Destruction/Hide Behind Effect")]

DestructionSequence.cs

DestructionSequence : ScriptableObject { ... }

IEnumerator

SequenceCoroutine(MonoBehaviour runner);

(AudioEvent)
/Editor

AudioEventEditor.cs

(class)

AudioEventEditor : Editor { ... }

OnInspectorGUI() { ... }

if (GUILayout.Button("Preview")) { ... }

((AudioEvent) target).Play(_previewer);

// if Preview Button pressed, play audio

// If statement creates button !

DrawDefaultInspector();

OnDisable() { ... }

DestroyImmediate(_previewer.gameObject);

OnEnable() { ... }

_previewer = EditorUtility.CreateGameObjectWithHideFlags("Audio preview", HideFlags.HideAndDontSave, typeof(AudioSource)).GetComponent();

private

AudioSource

_previewer;

[CustomEditor(typeof(AudioEvent), true)]

// ??? true == ???

using

UnityEditor;

(ScriptableObject)

SimpleAudioEvent.cs

SimpleAudioEvent : AudioEvent { ... }

override

Play(AudioSource source) { ... }

source.Play();

(config source)

source.pitch = Random.Range(pitch.minValue, pitch.maxValue);

source.volume = Random.Range(volume.minValue, volume.maxValue);

source.clip = clips[Random.Range(0, clips.Length)];

if (clips.Length == 0) return;

(var)

[MinMaxRange(0, 2)]

RangedFloat

volume;

pitch;

AudioClip[]

clips;

[CreateAssetMenu(menuName="Audio Events/Simple")]

AudioEvent.cs

abstract

AudioEvent : ScriptableObject { ... }

void

Play(AudioSource source);

(Attribute)

RangedFloat.cs

struct

RangedFloat { ... }

maxValue;

minValue;

(attribute)

[Serializable]

MinMaxRangeAttribute.cs

public

class

MinMaxRangeAttribute : Attribute { ... }

float

Max { get; private set; }

Min { get; private set; }

MinMaxRangeAttribute(float min, float max) { ... }

Max = max;

Min = min;

Editor

(preview)
PreviewRenderUtility

DrawRenderPreview (Rect r, GameObject previewObject ) { ... }

var mPrevRender = new PreviewRenderUtility();

AssetPreview

(func)

Texture

GenerateIcon(GameObject previewObject){ ... }

return

previewIcon;

previewIcon = AssetPreview.GetAssetPreview (previewObject);

previewObject.SetActive(true);

// ARGH! Must set to active to activate thumbnail

private Texture previewIcon;

GUILayout
// buttons
EditorGUI
EditorUtility
// Create Project Objects/Components