HEXA BLOG

プログラム

HEXA BLOGプログラム2012.11.19

ホーミングミサイル

こんばんは、平尾です!わーい(嬉しい顔)
最近寒かったのでコタツを設置、早速居眠りして変な汗をかきました…ふらふら
コタツは心地良いですが風邪をひかないように要注意ですね!

2010-10-14-0.png

今日はホーミングミサイルの実装方法について説明したいと思います。
といっても考え方は非常にシンプルですひらめき
1自分の向いている方向とターゲットの方向を取得
2自分の向いている方向からターゲットまでの角度(差分)を取得
3ターゲットへ回したい角度だけ回す
といった感じです。
C#(Unity上)で実装したソースはこちらになりますメモ

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Bullet : MonoBehaviour
  4. {
  5. private GameObject _target = null; // ロックオンしたターゲット
  6. private float _speed = 6.0f; // 1秒間に進む距離
  7. private float _rotSpeed = 180.0f; // 1秒間に回転する角度
  8. public GameObject Target
  9. {
  10. set { _target = value; }
  11. get { return _target; }
  12. }
  13. // Update is called once per frame
  14. void Update()
  15. {
  16. if (_target == null)
  17. {
  18. return;
  19. }
  20. // ターゲットまでの角度を取得
  21. Vector3 vecTarget = _target.transform.position - transform.position; // ターゲットへのベクトル
  22. Vector3 vecForward = transform.TransformDirection(Vector3.forward); // 弾の正面ベクトル
  23. float angleDiff = Vector3.Angle(vecForward, vecTarget); // ターゲットまでの角度
  24. float angleAdd = (_rotSpeed * Time.deltaTime); // 回転角
  25. Quaternion rotTarget = Quaternion.LookRotation(vecTarget); // ターゲットへ向けるクォータニオン
  26. if (angleDiff <= angleAdd)
  27. {
  28. // ターゲットが回転角以内なら完全にターゲットの方を向く
  29. transform.rotation = rotTarget;
  30. }
  31. else
  32. {
  33. // ターゲットが回転角の外なら、指定角度だけターゲットに向ける
  34. float t = (angleAdd / angleDiff);
  35. transform.rotation = Quaternion.Slerp(transform.rotation, rotTarget, t);
  36. }
  37. // 前進
  38. transform.position += transform.TransformDirection(Vector3.forward) * _speed * Time.deltaTime;
  39. }
  40. }

このソースで肝になるのは、指定角度だけ向けるところでしょうか。
ターゲットまでの残り角度を求め、指定角度が残り角度の何%か(t=0.0f~1.0f)を求めます。
何%かを計算したら、Quaternion.Slerp() で現在の向きからターゲット方向への補間を行い、
最終的な向きを求めています右斜め上
簡単ではありますが、Web上で実行出来るものをアップしました
画面クリックで弾を発射するだけのプログラムです。
(※実行には別途 Unity WebPlayer のインストールが必要になりますのでご注意下さい。)
角度を扱うにはクォータニオンexclamation
とても便利なので是非覚えていって下さいわーい(嬉しい顔)ぴかぴか(新しい)

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE 

S