【Unity】ジグソーピースをハメる

2019/7/15更新
2021/9/10ドラッグ記事刷新に伴い修正・追記


ピースオブジェクトをドラッグ操作できるようにして、
所定位置で固定する方法を試してみましたが、
コラインダーの衝突判定では、オブジェクトの設置が大変なので、
所定位置を座標で判断できるようにしてみます。

また、ピースが所定位置を通過するとハマってしまうので、
ドロップ時に所定位置にあれば、ピースがハマるように改良してみます。

改良点
・ピースがハマる所定位置をつくる
・所定位置の範囲をつくる


所定位置は、ImagePosオブジェクト座標の-300、0、0を使います。
この位置を中心にオフセットを設定して、範囲内でドロップしたら
所定位置にピースが移動するようにしてみます。

float objx = transform.localPosition.x;
float objy = transform.localPosition.y;

if (-360 <= objx && objx <= -240)
{
if (60 >= objy && objy >= -60)
{
transform.localPosition = new Vector3(-300, 0, 0);
}
}

こんな感じでいいかなと思います。

これでピースの挙動はできたので、ドロップした時に呼び出せるようにしてみます。

ドロップのメソッドは、OnMouseUpを使います。
一度、OnMouseDragやOnMouseDownのメソッドを使用すると
マウスを離す時にOnMouseUpを呼び出す事ができます。

//ドロップ処理
private void OnMouseUp()
{
float objx = transform.localPosition.x;
float objy = transform.localPosition.y;

if (-360 <= objx && objx <= -240)
{
if (60 >= objy && objy >= -60)
{
transform.localPosition = new Vector3(-300, 0, 0);
}
}
}

ドロップ時にポジションのオフセット内なら
指定のLocal座標に移動させる感じでっす。

スクリプトが出来たのでPLAYしてみます。

ドラッグ中・離した所・ピースがハマった所が分かりにくいので
Textで表示してみました。

所定位置の範囲が広いので、オフセットを調整すればピースのハマる感じが
変わるかと思います。ちなみにオフセットは60取っています。

シロウトの作ったスクリプトなのでこんな感じでいいかと。
ピースの数に合わせて座標変数を作れば、対応できそうでっす。


前回のピースをハメる方法で嫁さんに試してもらったら
”これって位置に来たら勝手にハマってくれるよ”
と言われ、持って動かせば勝手にハマるからよそ見してても
クリアできるとの事でした。

( ̄~ ̄;) ウーン 作る方は大変なのに…
ありがたいお言葉頂戴いたしました。
(。>_<。) えーん



追記
前記事のドラッグ処理を刷新したので、それに合わせて内容を修正しました。

EventTriggerの部分を削除
スクリプトの部分修正

この記事へのコメント