前提・実現したいこと
Unityで2dのMinecraftのようなサンドボックスゲームを作っています。
(座標1つに1×1のブロックを敷き詰めるようになっています)
一つのスクリプトで、ブロックが既に置いてある場合には置けなくしたいのですが、2マス以上の場合の処理がどうしても思い付きません。
サンプルコードか考え方のヒントを教えていただけないでしょうか?
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { public GameObject[] objects; public GameObject[] cursorobjects; public GameObject cursor; public int objectnumber; // Start is called before the first frame update void Start() { } void Update() { if (Input.GetMouseButtonUp(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); Vector3 hitposition = Camera.main.ScreenToWorldPoint(Input.mousePosition + Camera.main.transform.forward); Debug.Log(hitposition); float x = (Mathf.Round(hitposition.x)); float y = (Mathf.Round(hitposition.y)); if (Physics.Raycast(ray, out hit)) { cursor.transform.position = new Vector3(x, y, 0); } else { Instantiate(objects[objectnumber], new Vector3(x, y, 0), Quaternion.identity); } } } }
試したこと
カーソルのようなものを作り、置く前に当たっているかどうかをOntriggerで取ろうとしたのですが、私の考え方ではどうしてもスクリプトが二つ以上になってしまいます。
コードの問題点
このコードだと、クリックした場所一マスの部分に、ブロックがあるかどうかしか取れないので、scaleのxかyの値が2位上になると半分埋まった状態でも、置けてしまいます。
情報の不備などがございましたら、指摘して頂けるとありがたいです。
回答1件
あなたの回答
tips
プレビュー