Unityの野球ゲームで、投手に変化球を投げさせたい場合の簡易的な方法を書きました。
あくまで簡易的なので若干リアルさには欠けるかもしれません。
#手順
PlaneとSphereを用意します。
Sphereとカメラの距離はある程度空けておきます。
##ボールをど真ん中に投げてみる
まずはボールを真ん中に投げてみます。
SphereにRigidBodyコンポーネントを追加し、スクリプトは以下の通りで試してみます。
powerは1000ぐらい。
public class BallTest : MonoBehaviour
{
public Rigidbody _rb;
public int power;
Vector3 direction = Vector3.back;//カメラの方向に投げてみる
void Start()
{
_rb.AddForce(direction * power);
}
}
powerは丁度いいですが、球が転がってしまったので力を与える方向(direction)を修正します。
Vector3 direction = new Vector3(0,0.2f,-1.0f);
##球に変化を与える
飛ばした球がColliderに当たった際に変化方向に力を加えるという方法でいきます。
以下のように空のオブジェクトを作成しBoxColliderを追加。ボールの軌道の被るように配置します。
isTrrigerはONにします。
最初はスライダーをかけてみます。
Sphereオブジェクトのtagは"Ball"に変更しておきます。
int changePower = 100; //変化させる力
Vector3 sliderDirection = new Vector3(1.0f, -1.0f, 0); //変化の方向
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Ball")
{
Rigidbody ball_rb = other.gameObject.GetComponent<Rigidbody>();
ball_rb.AddForce(sliderDirection * changePower);//ボールに力を加える
}
}
Colliderの位置を前後させることで曲がり始めのタイミングをずらせます。
Z軸に力を加えるとブレーキをかけることもできます。
##様々な変化をさせてみた
せっかくなので投手を準備して色々な変化球を試してみました。
directionをいじれば様々な変化球を実現できます。
投手のアセットはこちらを使用しました。