めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【Unity】Texture2Dの画像から一部を切り抜く

Texture2Dの画像から一部を切り抜く方法です!

このガウガウくんの画像の一部を切り取っってみましょう!

f:id:maplesyrup-cs6:20190527173934p:plain
かわいいですね


やり方

まず、シーンににRawImageを配置します。Create>UI>RawImageで配置できます。
そのRawImageに以下のコードを貼り付けます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GetClipTexture : MonoBehaviour
{
 public Texture2D tex;

    void Start()
    {
        RawImage rawImage = gameObject.GetComponent<RawImage> ();
        rawImage.texture = getCenterClippedTexture(tex);
    }

    // Update is called once per frame
    void Update()
    {      
    }

    Texture2D getCenterClippedTexture(Texture2D texture)
    {
        Color[] pixel;
        Texture2D clipTex;

        pixel = texture.GetPixels(180, 300, 100, 90);
        clipTex = new Texture2D(100, 90);

        clipTex.SetPixels(pixel);
        clipTex.Apply();

        return clipTex;
    }
}


インスペクタのTexのとこに切り取りたい画像をセットします。

f:id:maplesyrup-cs6:20190527173343p:plain
テクスチャをセット


セットする画像のインスペクタから、Read and Write Enabledにチェックを入れておいてください。これをしないと画像を読み込んでくれません。

f:id:maplesyrup-cs6:20190527174100p:plain
Read and Write Enabledにチェック


実行してみましょう。はいかわいい。

f:id:maplesyrup-cs6:20190527174325p:plain
かわいいですね


コードの解説

        pixel = texture.GetPixels(180, 300, 100, 90);

GetPixels (x, y, width, height) で画像を切り取ることができます。(正確には、指定した範囲のピクセル色情報の取得)
引数は、x軸の切り取り開始位置、y軸の切り取り開始位置、x軸の切り取り幅、y軸の切り取り幅です。

原点 (0,0)はテクスチャの左下になります。

        clipTex = new Texture2D(100, 90);

縦幅と横幅を指定して新しくテクスチャ2Dを生成。上記の切り取りコードの切り取り幅と同じにしないとエラーが出ます。

        clipTex.SetPixels(pixel);

先ほど切り取ったTexture2Dのデータを先ほど作ったテクスチャ2Dに貼り付けてます。

        clipTex.Apply();

貼り付けたものを反映しています。

以上です。