12
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

[Unity]いろんな画像の貼り付け方

CubeやらImageやらの画像のスクリプトでの貼り付け方

ほとんど自分用です。

今回は色々考慮して画像リンクから画像をはりつけていきます。
PC内のpngファイルなどから直接読み取る場合は以下の記事を参考にしてみてください。
https://qiita.com/r-ngtm/items/6cff25643a1a6ba82a6c
tiruno

Cube(3Dオブジェクト)

以下画像を張り付けたいオブジェクトにアタッチするスクリプト

Test_Cube.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class Cube : MonoBehaviour
{
    //画像リンクから画像をテクスチャにする
    Texture texture;
    //テクスチャをマテリアル化するので生成しておく
    [SerializeField]Material material;
    //画像リンク
    string url = "https://touhoucannonball.com/assets/img/character/img_008.jpg";
    void Start()
    {
        //先にマテリアルのシェーダを変更しておく
        string shader = "Legacy Shaders/Diffuse";
        material.shader = Shader.Find(shader);
        StartCoroutine(Connect());
}

    //テクスチャを読み込む
    private IEnumerator Connect()
    {
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);

        yield return www.SendWebRequest();

        if (www.isNetworkError ||www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            //textureに画像が入るよ
            texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
            //textureをマテリアルにセット
            material.SetTexture("_MainTex", texture);

            gameObject.GetComponent<Renderer>().material = material;
        }
    }
}

こんな感じでできるかと思います。
CubeのみでなくてSphere,Capsule,Cylineder,Plane,Quadもできます。
キャプチャ.PNG

Image(子にImageがあるものも)

Spriteを使って画像の貼り付けを行えます。
以下画像を張り付けたいオブジェクトにアタッチするスクリプト

Test_Image.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Test_Image : MonoBehaviour
{
    //imageはスプライトを使って描画しているので
    Sprite sprite;
    //画像リンクから画像をテクスチャにする
    Texture2D texture;
    //画像リンク
    string url = "https://touhoucannonball.com/assets/img/character/img_008.jpg";

    void Start()
    {
        StartCoroutine(Connect());
    }

    //テクスチャを読み込む
    private IEnumerator Connect()
    {
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);

        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            //textureに画像格納
            texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
            //textureからspriteに変換
            sprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texture.width, texture.height), Vector2.zero);
            //Imageにspriteを張り付ける
            gameObject.GetComponent<Image>().sprite = sprite;
        }
    }
}


キャプチャ.PNG
できました。GUIのやつは基本これで大丈夫だと思います。

RawImage

こちらはTextureを使って画像の貼り付けを行います。
用途によって使い分けましょう。

Test_RawImage.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Test_RawImage : MonoBehaviour
{
    //画像リンクから画像をテクスチャにする
    Texture texture;
    //画像リンク
    string url = "https://touhoucannonball.com/assets/img/character/img_008.jpg";

    void Start()
    {
        StartCoroutine(Connect());
    }

    //テクスチャを読み込む
    private IEnumerator Connect()
    {
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);

        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            //textureに画像格納
            texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
            //そのまま貼り付け
            gameObject.GetComponent<RawImage>().texture = texture;
        }
    }
}

キャプチャ.PNG

見栄えは変わんないです。

おわり

3DオブジェクトはMaterial
ImageはSprite
RawImageはTexture
を変えて画像を変更させる。
ほかにもいろいろとやり方あると思いますけどとりあえずこれで表示はできると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What are the problem?