ゲーム化!tomo_manaのブログ

ゲーム化!tomo-manaのブログ

Unityでゲームを作る方法について紹介しています

Unity/C# クリックした場所にオブジェクトを表示するプログラム(アイソメトリック・グリッドガイド版)

クリックした場所にオブジェクトを表示するプログラム。アイソメトリックグリッドに沿ってアライメントしてくれます。

ChatGPT-4で出力したコードに、少し改変を加えたものです。

格子グリッド、およびグリッドガイド無し版はそれぞれ以下:

(グリッドガイド版)
tomo-mana.hatenablog.com

(グリッドガイド無し版)
tomo-mana.hatenablog.com

コード

AddGameObjectOnClick3.cs

using UnityEngine;
using System;   // Math

// ChatGPT-4 2023/5/8
// 任意の場所にオブジェクトを配置(格子グリッド版)
public class AddGameObjectOnClick3 : MonoBehaviour
{
    public GameObject isometricPrefab;
    public float gridSize;
    public Vector2 gridOffset;

    void Update()
    {
        if( gridSize <= 0 ){
            return;
        }
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3 gridPos = GetGridPosition(mousePos);

            GameObject newCircle = Instantiate(isometricPrefab, gridPos, Quaternion.identity);
        }
    }

    Vector3 GetGridPosition(Vector3 mousePos)
    {
        // アイソメトリック座標インデックス
        float isoX = (float)Math.Round( (mousePos.x / 2 - mousePos.y) * 2 );
        float isoY = (float)Math.Round( (mousePos.x / 2 + mousePos.y) * 2 );
        
        // 格子座標への逆変換
        float x =  isoY/2 + isoX/2;
        float y = (isoY/2 - isoX/2) / 2;
        
        return new Vector3(x, y, 0f);
    }
}

コンポーネント(Inspector)

以下のコンポーネントが作成できます。

作成されるコンポーネント(Inspectorウィンドウ)


"IsometricPrefab" に、スプライトのプレハブをアタッチします。

プレハブ(Prefab)

スプライトで作ったプレハブを用意します。UGUIコンポーネント(Imageなど)では動作しません。


Hierarchyウィンドウで スプライト(ここでは仮に 2D Objects → Sprites→Circle)を作成し、

Hierarchyウィンドウ→右クリックメニュー


作成されたゲームオブジェクトをProjectフォルダにドラッグ&ドロップします。

GameObjectのプレハブ化(Hierarchy→Projectウィンドウにドラッグ&ドロップ)


作成したプレハブを、先ほどのコンポーネントにアタッチします。

プレハブをコンポーネントにアタッチ