前提・実現したいこと
Unityを使ってスマホ向けの2Dゲームを作りたいです。
タップしている個所にオブジェクトが当たると磁石のように全てくっつけるような挙動をさせたいです。
試すべきAPIなどご助言頂けると嬉しいです。
◆TOPIX
・カメラにはPhyics 2D Raycasterをつけています。
・オブジェクトには、Capsule Collider 2D(Is Triggerにチェック)、Rigidbody 2D(Kinematic)をつけています。
発生している問題・エラーメッセージ
以下の手法を試してみましたが思い通りの挙動になりませんでした。
・OnMouseDrag()を使う場合(コード後述)
→2個目以降のオブジェクトがくっつかない。
(調べたところ、本メソッドはドラッグ用のメソッドのため意図した挙動でした)
・OnMouseOver()を使う場合(OnMOuseDrag()と同じスクリプト)
→3つの問題が発生する。
- 2つ目のオブジェクトをくっつけたとき、2つのオブジェクトが完全には重なり合わず何故か振動する。
- 3つ目以降のオブジェクトがくっつかない。
- タップを離すと、離した位置でポインタ?が残る。
・EventTrigger-> PointerEnterを使う場合
→transform.Translate(0,dy,0)が利いているのか、オブジェクトが上下で振動する。
該当のソースコード
言語:C#
◆くっつけたいオブジェクトの挙動:
dy = -0.1f;
transform.Translate(0, dy, 0);
◆OnMouseOver()メソッド:
void OnMouseOver() { screenPoint = Camera.main.WorldToScreenPoint(transform.position); offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); float screenX = Input.mousePosition.x;// + Random.Range(-5, 5); float screenY = Input.mousePosition.y;// + Random.Range(-5, 5); float screenZ = screenPoint.z; Vector3 currentScreenPoint = new Vector3(screenX, screenY, screenZ); Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint);// + this.offset; transform.position = currentPosition; }
◆PointerEnterで呼ぶメソッド
上述にdy = 0;を追記。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。