2017-05-08 6 views
0

habe ich ein neues Spiel Objekt:neue Gameobject hinzufügen Bildkomponente

GameObject newObject = new GameObject("ObjectName"); 
newObject.AddComponent<RectTransform>(); 
newObject.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height); 

ich für eine Art und Weise bin auf der Suche ein Bild (Skript) für Farbzwecke hinzuzufügen. Wie kann ich es tun?

Antwort

1

Auf die gleiche Weise, wie Sie RectTransform hinzufügen.

newObject.AddComponent<Image>(); 

Sie müssen auch using UnityEngine.UI hinzufügen zu können, die Bildkomponente finden.

+0

'mit UnityEngine:

using UnityEngine; public class SpriteTest : MonoBehaviour { public Sprite sprite; private void Start() { GameObject newObject = new GameObject("ObjectName"); SpriteRenderer spriteRenderer = newObject.AddComponent<SpriteRenderer>(); spriteRenderer.sprite = sprite; } } 

Oder einfach zeigen eine Textur, können Sie die Haupt-Textur auf das Material eines MeshRenderer außer Kraft setzen .UI' das habe ich vermisst! – David

2

Dadurch wird die Bildkomponente zu Ihrem Gameobject:

newObject.AddComponent<Image>(); 

Weiteren Dinge haben für die Image Komponente in getan werden, um zu zeigen:

.Create eine Leinwand. Dazu gehört das Erstellen des GameObject, das den Canvas-Bereich enthält und dann die Canvas-Komponente daran anfügt. Sie müssen auch andere wichtige UI-Komponenten wie CanvasScaler und GraphicRaycaster an die Canvas anhängen.

.Create Ihre Image Gameobject mit Ihrem new GameObject("ObjectName"); dann newObject.AddComponent<Image>(); rufen Bildkomponente zu diesem Gameobject zu befestigen.

.Machen Sie das Image GameObject ein Kind der Canvas.

Dies ist der gesamte Prozess eine Leinwand und ein Bild als das Kind zu schaffen:

void Start() 
{ 
    //Create Canvas 
    GameObject canvas = createCanvas(false); 

    //Create your Image GameObject 
    GameObject newObject = new GameObject("ObjectName"); 

    //Make the GameObject child of the Canvas 
    newObject.transform.SetParent(canvas.transform); 

    //Add Image Component to it(This will add RectTransform as-well) 
    newObject.AddComponent<Image>(); 

    //Center Image to screen 
    newObject.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; 
} 



//Creates Hidden GameObject and attaches Canvas component to it 
private GameObject createCanvas(bool hide) 
{ 
    //Create Canvas GameObject 
    GameObject tempCanvas = new GameObject("Canvas"); 
    if (hide) 
    { 
     tempCanvas.hideFlags = HideFlags.HideAndDontSave; 
    } 

    //Create and Add Canvas Component 
    Canvas cnvs = tempCanvas.AddComponent<Canvas>(); 
    cnvs.renderMode = RenderMode.ScreenSpaceOverlay; 
    cnvs.pixelPerfect = false; 

    //Set Cavas sorting order to be above other Canvas sorting order 
    cnvs.sortingOrder = 12; 

    cnvs.targetDisplay = 0; 

    addCanvasScaler(tempCanvas); 
    addGraphicsRaycaster(tempCanvas); 
    return tempCanvas; 
} 

//Adds CanvasScaler component to the Canvas GameObject 
private void addCanvasScaler(GameObject parentaCanvas) 
{ 
    CanvasScaler cvsl = parentaCanvas.AddComponent<CanvasScaler>(); 
    cvsl.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; 
    cvsl.referenceResolution = new Vector2(800f, 600f); 
    cvsl.matchWidthOrHeight = 0.5f; 
    cvsl.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight; 
    cvsl.referencePixelsPerUnit = 100f; 
} 

//Adds GraphicRaycaster component to the Canvas GameObject 
private void addGraphicsRaycaster(GameObject parentaCanvas) 
{ 
    GraphicRaycaster grcter = parentaCanvas.AddComponent<GraphicRaycaster>(); 
    grcter.ignoreReversedGraphics = true; 
    grcter.blockingObjects = GraphicRaycaster.BlockingObjects.None; 
} 
1

RectTransform ist vor allem für UI Zwecke verwendet. Wenn Sie eine Leinwand bereits eingerichtet, dann können Sie eine Image Komponente hinzufügen, aber Sie werden es als Kind der Leinwand einstellen wollen:

using UnityEngine; 
using UnityEngine.UI; 

public class ImageTest : MonoBehaviour { 
    public Canvas canvas; 
    public Sprite sprite; 
    public float width = 10; 
    public float height = 10; 

    private void Start() { 
     GameObject newObject = new GameObject("ObjectName"); 
     RectTransform rectTransform = newObject.AddComponent<RectTransform>(); 
     rectTransform.sizeDelta = new Vector2(width, height); 
     Image image = newObject.AddComponent<Image>(); 
     image.sprite = sprite; 
     newObject.transform.SetParent(canvas.transform, false); 
    } 
}; 

Wenn Sie nur das Sprite in der Szene setzen wollen Sie können ein SpriteRenderer verwenden:

using UnityEngine; 

public class TextureTest : MonoBehaviour { 
    public Texture texture; 

    private void Start() { 
     GameObject newObject = GameObject.CreatePrimitive(PrimitiveType.Quad); 
     MeshRenderer meshRenderer = newObject.GetComponent<MeshRenderer>(); 
     meshRenderer.material.mainTexture = texture; 
    } 
}