Unity-2Dのピンボール用フリッパーを作る


タイトル通り。普通に検索するといろいろ引っ掛かりはするものの・・・

[Unity] ピンボールゲームのフリッパーを実装する
http://qiita.com/Nicky/items/8cb3d1dcac0ac58ba0b1

3Dばっかりなんですよね。Rigidbody・Rigidbody2D、HingeJoint・HingeJoint2Dの差があるのでそのまま2Dに当てはめても当然思ったような動きにはならない。
やるべきことは単純だからあんまり例が引っかからないのかもしれないけどHingeJoint2Dの資料が全然ないのでメモしておく。

横長のスプライトを斜めにして配置、コンポーネントは以下の通り。
・Rigidbody2D
 Gravity Scaleは当然0。
・Hinge Join2D
 フリッパーの最大角度を指定するため「Use Limit」にチェック、「Upper Angle」は「60」を指定。
 Sceneビューの青い●を動かして程よい位置にポイントを設置。
・Capsule Collider 2D
 それっぽい感じで
・下記スクリプト

ただこれだけだと一回フリッパーを開いた後そのままの勢いに負けてフリッパーが下まで押し戻されちゃったりするので角度を固定する工夫は必要だろう。

using UnityEngine;
using System.Collections;

public class Flipper : MonoBehaviour {
	void Start () {
		closeFlipper ();
	}

	void Update () {
		if (Input.GetMouseButtonDown (0)) {
			openFlipper();
		}
		if (Input.GetMouseButtonUp (0)) {
			closeFlipper();
		}
	}
	public void openFlipper(){		
		GetComponent<Rigidbody2D> ().AddForceAtPosition (new Vector2(0,2000),transform.position);
	}
	public void closeFlipper(){
		GetComponent<Rigidbody2D> ().AddForceAtPosition (new Vector2(0,-2000),transform.position);
	}
}

あわせて読みたい