2017-05-08 61 views
0

我创建了一个新的游戏对象:图像组件添加到游戏物体新

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

我正在寻找一种方式来添加图像(脚本)颜色的目的。 我该怎么办?

回答

1

与添加RectTransform相同的方式。

newObject.AddComponent<Image>(); 

您还需要添加using UnityEngine.UI能够找到图像组件。

+0

' .UI'这就是我错过的! – David

2

这增加了图像部件到您的游戏对象:

newObject.AddComponent<Image>(); 

更多的事情是为了完成对Image组件显示:

.Create的画布。包括创建将保存Canvas的GameObject,然后将Canvas组件附加到它。您还必须将其他重要的UI组件(如CanvasScalerGraphicRaycaster)附加到Canvas

.Create您Image游戏物体与new GameObject("ObjectName");然后调用newObject.AddComponent<Image>();到图像组件附加到游戏物体。

。制作Image GameObject是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; 
} 
1

RectTransform主要用于UI目的。如果你有一个帆布已经成立,那么你可以添加一个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的材料主要材质:采用UnityEngine

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