ドアが左右に回転して開くをむりやりc# で

コライダのオブジェクトにアサインする

 

スクリプト

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

public class door : MonoBehaviour {


	public Transform _RdoorRoot;//右ドアのルート入れる
	public  Transform _LdoorRoot;//左ドアのルート入れる
	bool doorCheckBool = false;//ブーリアン
	float stTime;//コライダにヒット開始時間

	public Transform from;//元の角度
	public Transform to;//90度の角度を入れたnullをアサイン
	public Transform _to;//−90度の角度を入れたnullをアサイン
	public float speed;//回転速度

	void Update () {
		if (doorCheckBool) {
			_RdoorRoot.rotation = Quaternion.Slerp (from.rotation, to.rotation, (Time.time - stTime) * speed);
			_LdoorRoot.rotation = Quaternion.Slerp (from.rotation, _to.rotation,  (Time.time - stTime) * speed);
		}
	}
		
	void OnTriggerEnter(Collider other) {//コライダ入ったら
		doorCheckBool = true;//ブールをtrueにするとUpdateで作動する
		stTime = Time.time;//現在の時間を記録しておく
		GetComponent<BoxCollider>().enabled = false;//1回作動させたらコライダーをオフにして使用できなくする
	}
		
}

 

配置方法

実行結果

ドラッグして位置決め

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

実際には決まった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単位で動きます

 

実行結果