Добавить компонент изображения в новый игровой объект

Я создал новый игровой объект:

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

Я ищу способ добавить изображение (скрипт) для цветных целей. Как мне это сделать?


person David    schedule 08.05.2017    source источник


Ответы (3)


Так же, как вы добавляете RectTransform.

newObject.AddComponent<Image>();

Вам также необходимо добавить using UnityEngine.UI, чтобы иметь возможность найти компонент изображения.

person Johan Lindkvist    schedule 08.05.2017
comment
using UnityEngine.UI это то, что я пропустил! - person David; 08.05.2017

Это добавит компонент Image в ваш GameObject:

newObject.AddComponent<Image>();

Чтобы компонент Image отображался, нужно сделать больше:

1. Создайте холст. Сюда входит создание GameObject, который будет содержать Canvas, а затем присоединение к нему компонента Canvas. Вы также должны прикрепить другие важные компоненты пользовательского интерфейса, такие как CanvasScaler и GraphicRaycaster, к Canvas.

2. Создайте свой Image GameObject с помощью new GameObject("ObjectName");, затем вызовите newObject.AddComponent<Image>();, чтобы прикрепить компонент Image к этому GameObject.

3. Сделайте этот Image GameObject дочерним по отношению к Canvas.

Это весь процесс создания Canvas и изображения в качестве дочернего элемента:

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;
}
person Programmer    schedule 08.05.2017

RectTransform в основном используется для пользовательского интерфейса. Если у вас уже настроен холст, вы можете добавить компонент Image, но вы захотите установить его как дочерний элемент вашего холста:

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);
    }
};

Если вы просто хотите поместить спрайт в сцену, вы можете использовать SpriteRenderer:

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;
    }
}

Или, чтобы просто показать текстуру, вы можете переопределить основную текстуру материала MeshRenderer:

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;
    }
}
person BJennings    schedule 08.05.2017