【Unity】3DでSpriteを使いたい

3DでSpriteを使いたい Sprite
3DでSpriteを使いたい

Unity の Sprite を 3D で使いたいと思います。

3DでSpriteを使いたい

3DでSpriteを使いたい
3DでSpriteを使いたい

Sprite

Unity の Sprite は、テクスチャとメッシュを組み合わせた、2D/3Dの両方で画像を表示できる描画システムです。

ドキュメント

公式ドキュメントになります。

スプライト - Unity マニュアル
スプライト は 2D グラフィックオブジェクトです。3D に慣れているユーザーにとっては、 スプライト は実質的には、標準のテクスチャにすぎないかもしれません。しかし、スプライトテクスチャを組み合わせ、処理し、開発を効率的に便利に行うために...

こちらはリファレンスになります。

Sprite - Unity スクリプトリファレンス
2D ゲームプレイにおけるスプライトオブジェクトを示します

画像のインポート

Spriteアセットは画像をインポートして作成します。
UnityのAssetsフォルダ以下に画像ファイルを配置すると自動でインポートされます。

Inspector から Texture Type を Sprite (2D and UI) に変更します。
Sprite Mode は Single に設定します。
Apply ボタンを押して適用します。

画像のインポート
画像のインポート

シーンに配置する

Project ビューの Sprite アセットを Hierarchy ビューにドラッグ&ドロップすると、シーンに配置できます。
SpriteRenderer コンポーネントが付いたゲームオブジェクトになります。
Transform で座標を動かしたりできます。

シーンに配置する
シーンに配置する

Sprite の当たり判定

シーンに HitTest という名前の空のゲームオブジェクトを作成します。
下記のスクリプトを作成して、HitTest ゲームオブジェクトのコンポーネントとして追加します。
シーンに配置した Sprite のゲームオブジェクトに Collider(BoxColliderなど)を追加します。
Unityエディターを再生して、マウスポインタを動かすと、カーソルの場所にあるゲームオブジェクト名がコンソールにログ出力されます。

using UnityEngine;

public class HitTest : MonoBehaviour
{
    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 1000f)) {
            Debug.Log("Hit: " + hit.collider.name);
        }
    }
}

残念ながら、3Dで Sprite の透明部分を省く当たり判定は出来ないようです。
BoxCollider などで近似の当たり判定を作りましょう。
2Dでは、PolygonCollider2D が使えるようです。

まとめ

3Dで、Unity の Sprite を使ってみました。
残念ながら、3Dで透明部分を省く Sprite の当たり判定は出来ないようです。
画像の表示だけなら簡単にできて手軽に利用できます。

コメント

タイトルとURLをコピーしました