ドラッグして位置決め

このスクリプトは自由座標に移動する

実際には決まったMatrixにスナップするように,数値を丸めたほうが扱いやすい

その際に下のPlaneにグリッドを表示させ,そのグリッドを光らせるなどの対処が必要かど

スクリプト

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

public class dragPoint : MonoBehaviour {
	RaycastHit hit;
	Ray ray;
	Vector3 currentPos;//最終位置保存用変数


	void OnMouseDown(){ //マウスクリック開始時用
		currentPos = this.transform.position;//上昇前の値を入れる
		this.transform.position = currentPos + new Vector3 (0f, 1f, 0f);//Y軸に1だけ上昇させる
		currentPos = this.transform.position;//上昇した値を入れる
	}

	void OnMouseDrag(){//マウスドラッグ時

		ray = Camera.main.ScreenPointToRay(Input.mousePosition);//マウスクリックポジションをrayで取得する
		if (Physics.Raycast(ray, out hit, 100f)){//rayが当たった位置をhitに入れる
			this.transform.position = new Vector3 (hit.point.x, currentPos.y, hit.point.z);//XとZ座標だけをhitの座標にする
			currentPos = this.transform.position;//最終位置を変数に入れておく
		}  

	}

	void OnMouseUp(){//マウスクリック終了時
		this.transform.position = currentPos - new Vector3 (0f, 1f, 0f);//最終位置からY軸に1だけ下降させる
	}
}

追記

21行目を

this.transform.position = new Vector3 (Mathf.Floor(hit.point.x), currentPos.y, Mathf.Floor(hit.point.z));//

のようにMathf.Floorで小数点以下を丸め(切り捨て)ると,1m単位で動きます

 

実行結果