ふと思い立って、ピンボールゲームを作り出した
ピンボールといえば、まずは玉を盤面に打ち出すところからスタート
ということで、玉の発射を実装したみた
まずは玉のPrefabを所定の位置に生成
GameObject CurrentBall = Instantiate(ball, StartPos.position, StartPos.rotation);
玉のRigidbodyを取得
rg = CurrentBall.GetComponent<Rigidbody>();
AddForceをForceMode.ImpulseにてZ方向の奥の方へ打ち出す
rg.AddForce(new Vector3(x, y, z -AddPower) , ForceMode.Impulse);
◎問題点
ピンボールの盤面自体は、玉が自重で落下してくるように10度傾けているが、普通にZ軸のみに力を加えて打ち出すと、盤面の地面の部分と平行に打ち出されないので、地面にあたって跳ね返ってレールから飛び出してしまう
◎改良点
盤面と水平に打ち出せるように、角度を先に指定する
角度をラジアン値に変換
float rad = ForceAngle * Mathf.Deg2Rad;
三角関数を使用して、x,y,zそれぞれの成分を算出
float x = 0f;
float y = Mathf.Sin(rad);
float z = Mathf.Cos(rad);
算出した値にパワーを与える
rg.AddForce(new Vector3(x, y, z) * -AddPower, ForceMode.Impulse);
◆結果
盤面と平行に-10度に設定して打ち出した結果、玉が地面にあたることもなくまっすく打ち出された!!
今日はここまで以上