Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

AddForceを角度の設定して使用する方法

ふと思い立って、ピンボールゲームを作り出した

 

ピンボールといえば、まずは玉を盤面に打ち出すところからスタート

 

ということで、玉の発射を実装したみた

 

まずは玉の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);

f:id:Harukichi:20191209002706g:plain

◎問題点

 ピンボールの盤面自体は、玉が自重で落下してくるように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);
 

f:id:Harukichi:20191209004405p:plain

 
◆結果
 盤面と平行に-10度に設定して打ち出した結果、玉が地面にあたることもなくまっすく打ち出された!!

f:id:Harukichi:20191209003726g:plain

今日はここまで以上