Unity, C# 移動するモデルの位置を 指定した位置へ自動修正 7月26日
青タイルをクリックしたままドラッグすると移動する 以前作成したマウスのドラッグでモデルを移動させるものを、 指定の範囲内にモデルが移動すると自動で位置を修正するようにする。 動作 http://buturi.heteml.jp/student/2016/katayama/Unity/0726.html 操作 青タイルをクリックしたままドラッグすると移動する ↓ 白とピンクのタイル上のどこかで放す 位置を自動で修正し、タイルの1枚と重なる
まず右図のように Scale1×1のCubeを10個作成し色を付け並べる Cube1(0,0,0)、Cube2(0,0,1)、Cube3(0,0,2)・・・ としたとき頂点座標は右図になる
private static Vector3 pos; と、 void OnMouseUp() を追加し、 OnMouseDrop() 内に http://buturi.heteml.jp/student/2016/katayama/pptx/0719.pptx にあるスクリプトに右の private static Vector3 pos; と、 void OnMouseUp() を追加し、 OnMouseDrop() 内に pos = currentPosition; を追加する。 Staticにすることで OnMouseDrop()と、OnMouseUp間で 値を共有できるようになる。 OnMouseUp()は ユーザーがマウスボタンを離したときに呼び出さる。 public class move : MonoBehaviour { private static Vector3 pos; void OnMouseUp() if (-0.5 <= pos.x && pos.x < 0.5){ if (-0.5 <= pos.z && pos.z < 0.5) transform.position = new Vector3(0, 0, 0); if (0.5 <= pos.z && pos.z < 1.5) transform.position = new Vector3(0, 0, 1); if (1.5 <= pos.z && pos.z < 2.5) transform.position = new Vector3(0, 0, 2); } if (0.5 <= pos.x && pos.x < 1.5) { 略 } if (1.5 <= pos.x && pos.x < 2.5) { 略 } 今回 pos を private な static 変数にしているためこのクラスでしか値を共有できない クラス外で値を共有し、できることを次回やる