LoginSignup
16
14

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-12-15

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
を変えて画像を変更させる。
ほかにもいろいろとやり方あると思いますけどとりあえずこれで表示はできると思います。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14