HEXA BLOG
ヘキサブログ
プログラム
ホーミングミサイル
こんばんは、平尾です!
最近寒かったのでコタツを設置、早速居眠りして変な汗をかきました…
コタツは心地良いですが風邪をひかないように要注意ですね!
今日はホーミングミサイルの実装方法について説明したいと思います。
といっても考え方は非常にシンプルです
自分の向いている方向とターゲットの方向を取得
自分の向いている方向からターゲットまでの角度(差分)を取得
ターゲットへ回したい角度だけ回す
といった感じです。
C#(Unity上)で実装したソースはこちらになります
using UnityEngine; using System.Collections; public class Bullet : MonoBehaviour { private GameObject _target = null; // ロックオンしたターゲット private float _speed = 6.0f; // 1秒間に進む距離 private float _rotSpeed = 180.0f; // 1秒間に回転する角度 public GameObject Target { set { _target = value; } get { return _target; } } // Update is called once per frame void Update() { if (_target == null) { return; } // ターゲットまでの角度を取得 Vector3 vecTarget = _target.transform.position - transform.position; // ターゲットへのベクトル Vector3 vecForward = transform.TransformDirection(Vector3.forward); // 弾の正面ベクトル float angleDiff = Vector3.Angle(vecForward, vecTarget); // ターゲットまでの角度 float angleAdd = (_rotSpeed * Time.deltaTime); // 回転角 Quaternion rotTarget = Quaternion.LookRotation(vecTarget); // ターゲットへ向けるクォータニオン if (angleDiff <= angleAdd) { // ターゲットが回転角以内なら完全にターゲットの方を向く transform.rotation = rotTarget; } else { // ターゲットが回転角の外なら、指定角度だけターゲットに向ける float t = (angleAdd / angleDiff); transform.rotation = Quaternion.Slerp(transform.rotation, rotTarget, t); } // 前進 transform.position += transform.TransformDirection(Vector3.forward) * _speed * Time.deltaTime; } }
このソースで肝になるのは、指定角度だけ向けるところでしょうか。
ターゲットまでの残り角度を求め、指定角度が残り角度の何%か(t=0.0f~1.0f)を求めます。
何%かを計算したら、Quaternion.Slerp() で現在の向きからターゲット方向への補間を行い、
最終的な向きを求めています
簡単ではありますが、Web上で実行出来るものをアップしました。
画面クリックで弾を発射するだけのプログラムです。
(※実行には別途 Unity WebPlayer のインストールが必要になりますのでご注意下さい。)
角度を扱うにはクォータニオン
とても便利なので是非覚えていって下さい
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (875)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年