Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011
Sign in to follow this  
Zer0Cool

Inspektor Skript Logo

Recommended Posts

da ich eigene Inspektoren für jedes Skript nicht mag, habe ich einmal einen Dekorator erstellt, den man in jedes Skript sehr leicht einbauen kann.
Die Klassen sind bewusst einfach gehalten und enthalten nur das absolut notwendigste.

Beispielanwendung:

public class Example : MonoBehaviour
{
   [Logo(64, 16, "Assets/Textures/myLogo.png", true)]
   ...
   ...
}

Der 1. Parameter definiert die Höhe der Textur, der 2. das Spacing über und unter der Texture (16 / 2) und der 3. Parameter den Pfad zum Texturlogo.
Der 4. Parameter bestimmt, ob das Logo noch einmal in einen Rahmen verpackt wird.

Ergebnis:

LELGi8b.png


Hier die Klassen:

LogoAttribute.cs (kann beliebig im Projektfolder platziert werden)

using UnityEngine;
using UnityEditor;

/// <summary>
/// This class defines the LogoAttribute, so that it can be used in your regular MonoBehaviour scripts.
/// <para>
/// (c) by Zer0Cool for the Unity Insider Forum (forum.unity-community.de)
/// Skype: zer0f0rce
/// Discord: zer0f0rce #8769
/// </para>
/// 
/// Usage:
/// [LogoAttribute(64, 16, "Assets/Textures/mylogo.png", false)]
/// 
/// Hint:
/// This class is used together with <see cref="LogoDrawer"/>.   
/// </summary>
public class LogoAttribute : PropertyAttribute
{
    public Texture2D texture;
    public string assetLogoPath;
    public int height;
    public int padding;
    public bool border;

    public LogoAttribute(int height, int padding, string assetLogoPath, bool border)
    {
        this.assetLogoPath = assetLogoPath;
        this.height = height;
        this.padding = padding;
        this.border = border;
        this.texture = (Texture2D)AssetDatabase.LoadAssetAtPath(assetLogoPath, typeof(Texture));
    }
}


LogoDrawer.cs (muss innerhalb des Projektfolders in einem Editorverzeichnis platziert werden)
 

using UnityEngine;
using UnityEditor;

/// <summary>
/// This class decorates a MonoBehaviour script with a logo.
/// <para>
/// Defines how the <see cref="LogoAttribute"/> should be drawn in the inspector, when inspecting a GameObject with a MonoBehaviour which uses it.
/// </para>
/// <para>
/// (c) by Zer0Cool for the Unity Insider Forum (forum.unity-community.de)
/// Skype: zer0f0rce
/// Discord: zer0f0rce #8769
/// </para>
/// 
/// Usage:
/// [LogoAttribute(64, 16, "Assets/Textures/mylogo.png", false)]
/// 
/// Hint:
/// This class is used together with <see cref="LogoAttribute"/> and has to be placed inside an editor folder.   
/// </summary>
[CustomPropertyDrawer(typeof(LogoAttribute))]
public class LogoDrawer : DecoratorDrawer
{

    private static GUIStyle s_TempStyle = new GUIStyle();

    LogoAttribute logoAttribute
    {
        get { return ((LogoAttribute)attribute); }
    }

    public override float GetHeight()
    {
        float _height;
        if (logoAttribute.border) _height = logoAttribute.height + logoAttribute.padding * 2 + logoAttribute.padding / 2;
        else _height = logoAttribute.height + logoAttribute.padding * 2;

        return _height;
    }

    public override void OnGUI(Rect position)
    {
        // if this is not a repain or the property is null exit now
        if (Event.current.type != EventType.Repaint || logoAttribute.texture == null)
            return;

        //create object field for the sprite
        Rect spriteRect;
        spriteRect = new Rect(position.x, position.y, position.width, logoAttribute.height);
        spriteRect.width = position.width - EditorGUIUtility.singleLineHeight / 2;
        spriteRect.y += logoAttribute.padding;

        s_TempStyle.normal.background = logoAttribute.texture;
        if (logoAttribute.border) GUI.Box(new Rect(position.x, position.y + logoAttribute.padding / 3, position.width, 3), GUIContent.none);
        s_TempStyle.Draw(spriteRect, GUIContent.none, false, false, false, false);
        if (logoAttribute.border) GUI.Box(new Rect(position.x, position.y + GetHeight() - logoAttribute.padding, position.width, 3), GUIContent.none);
    }
}

 

  • Like 1

Share this post


Link to post
Share on other sites

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"

Cool! B)

Hast du es auch geschafft Querstriche einzufügen? Sieht so aus, ist dies auch in der Klasse enthalten bzw. mit ihr möglich? Findet zumindest keine Referenz die das zu machen scheint. 

Share this post


Link to post
Share on other sites

Es gibt eine Klasse die nur diese Striche macht, die ist aber nicht von mir:

Beispielanwendung:

public class Example : MonoBehaviour
{
   [HorizontalLine]
   ...
   ...
}


HorizontalLineAttribute.cs

using UnityEngine;

[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = true, Inherited = true)]
public class HorizontalLineAttribute : PropertyAttribute
{
}


HorizontalLineDrawer.cs

using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(HorizontalLineAttribute))]
public class HorizontalLineDrawer : DecoratorDrawer
{
    public override float GetHeight()
    {
        return 11;
    }

    public override void OnGUI(Rect position)
    {
        GUI.Box(new Rect(position.x, position.y + 4, position.width, 3), GUIContent.none);
    }
}

Leider vertragen sich beide Drawer nicht, daher habe ich meine obere Klasse noch einmal erweitert, sie oben.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×