クリックした場所にオブジェクトを表示するプログラム。アイソメトリックグリッドに沿ってアライメントしてくれます。
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); } }
プレハブ(Prefab)
スプライトで作ったプレハブを用意します。UGUIコンポーネント(Imageなど)では動作しません。
Hierarchyウィンドウで スプライト(ここでは仮に 2D Objects → Sprites→Circle)を作成し、
作成されたゲームオブジェクトをProjectフォルダにドラッグ&ドロップします。
作成したプレハブを、先ほどのコンポーネントにアタッチします。
動作例
クリックした場所にオブジェクトを表示してくれます。
youtu.be