ゲームにおいて衝突判定を行う際、AABB(軸平行境界ボックス)を定義して無駄な計算を削減するアルゴリズムがよく用いられます。 AABBはxyzの各軸に平行な直方体です。 軸に平行であるため、当たり判定の計算が非常に軽くなります。 複雑なメッシュ形状に対する衝突判定を行う際、メッシュ形状を包含するAABBを事前に定義し、...
Unity
Category
Unityでのネタ的な投稿です。 地面の黒ラインに沿って走行するロボット(ライントレーサー)をUnity上で再現してみました。 黒ラインはカメラ画像から認識するようにします。 今回はカメラを照度センサに見立て、画像全体の輝度からロボットをラインに沿って走行するようにフィードバック制御します。 ロボットの実装 自律移動型...
Unityに関するメモ書きです。 Unityのインスペクタ上で値を設定する上で不便に感じていたことがあります。 例えば、以下のように2つのクラスで意味のある値(マジックナンバー)を設定することを考えてみます。 // 定数シンボルの定義 public class TestClass1 : MonoBehaviour { ...
Unityのタイマー関連の情報はTimeクラスのstaticメンバより取得できます。 以下のように使用されることが多いでしょう。 float delay = 1; void Update() { // 最初のdelay秒は何もしない delay -= Time.deltaTime; if ( delay > 0 ...
今日からゴールデンウィークが始まったということで、Departure from the Void(縦スクロールシューティングゲーム)のリメイク作業を進めています。 現在はステージ2の敵キャラのモーション作成&配置を行っています。 以下、開発途中の画面です。 進捗は3分の1くらいです。 完成までの道のりはまだまだ長いです...
UnityのC#スクリプトにて、シリアライズ可能なフィールドはインスペクタから編集することができますが、プロパティはpublicにしても属性を指定しても編集できません。 プロパティはフィールドとは違い、内部的にはメソッドとして扱われるためです。 メソッドはシリアライズできないため、プロパティも必然的にシリアライズできな...
Unityではシリアライズ可能なフィールドは以下のようにインスペクタから編集することが出来ます。 MonoBehaviourを継承したクラスには属性が指定されているため、シリアライズすることが出来ます。 シリアライズ可能なクラスでは、publicまたは属性が指定されたフィールドがインスペクタ上に表示され、編集可能になり...
ゲームで使用しているオブジェクトのデータをファイルに保存する方法のメモ書きです。 ファイルに保存する方法はいろいろありますが、C#に備わっているシリアライズ/デシリアライズの機能を用いると便利です。 .NET FrameworkにてXMLとしてシリアライズ/デシリアライズできるXmlSerializerクラスが用意され...
UnityのWWWクラスには元々タイムアウトの機能が実装されていません。 そこで、何とかして簡単にタイムアウト機能を実装して使えないかどうか考えました。 あまり良い方法が思いつきませんでしたが、以下のようにMonoBehabiourを継承したクラスを実装し、GameObjectにアタッチして使えばひとまずは実現できます...
LeapMotionのAPIを用いてあらかじめ用意されているジェスチャーを行ってみたいと思います。 シーンの作成から実際にジェスチャーを検知するまでの手順をメモ書き程度にまとめました。 前提条件 LeapMotionSDKがUnity上で動くことが前提です。 上記を満たしていない場合、こちらにセットアップ手順を記してお...