投射物

投射物


<基本的な考え方>
鉛直方向の運動も水平方向の運動も、それぞれ別の一次元の運動で考える事が出来る

投射物の鉛直運動の公式
ay = -9,8m/s^2
vfy = viy * ay * t
Δy = viy * t + 1/2 * ay * t^2

ayという加速度に-9.8が入っていることが重要
たとえばジャンプする物体があった場合、初速度viyがジャンプ力となる
ジャンプすると足元に地面が無くなった瞬間から-9.8の運動がかかりジャンプ力に対して影響を与える

投射物の動きを作るサンプルコード


極座標20m/s^2@60°でゲームオブジェクトを撃ちだす
オブジェクトは放物線を描いて飛ぶ

鉛直の加速度には-9.8が入っていて水平方向の加速度には0が入っている点に注目
-9.8によりオブジェクトは下に落ちていく。加速度に値を入れた場合、それは風であったり、空気抵抗であったりを表現できる?(要検証)

using UnityEngine;
using System.Collections;

public class PhysicsTest6 : MonoBehaviour {

  float angle=60;
   float scalar=20;

  float aX = 0f;
   float aY = -9.8f;
   float viX,vfX,viY,vfY,t;
   Transform _transform;

  void Start () {
       _transform = transform;
       viY = Mathf.Sin(angle * Mathf.Deg2Rad)*scalar;
       viX = Mathf.Cos(angle * Mathf.Deg2Rad)*scalar; 
   }
   
   void Update () {
       t= Time.deltaTime;

      vfX = viX + aX * t;
       float deltaX = 0.5f * (viX + vfX) * t;
       viX=vfX;

      vfY = viY + aY * t;
       float deltaY = 0.5f * (viY + vfY) * t;
       viY=vfY;

      _transform.Translate(new Vector3(deltaX,deltaY,0));
   }
}

狙った高さにジャンプさせるコード


プラットフォーマーゲームを作るとしてジャンプした時の最大の高さを自分で狙った値にするには vf^2=vi^2+2*a*Δx
最終速度^2=初速度^2+2×加速度×変位 の式を利用します

初速度vi=0
a=-9.8
Δx=狙ったジャンプの高さ(とりあえず10とする)
求める値vf

vf=Math.Sqrt(0 * 0 + 2.0f * Math.Abs(-9.8) * 10);

このコードでジャンプの最終速度が得られる





  • 最終更新:2013-12-15 20:20:35

このWIKIを編集するにはパスワード入力が必要です

認証パスワード