UE4でLeapmotionつかってみるついでに指からびーむだす(指から弾を出す編)
[前回]
UE4でLeapmotionつかってみるついでに指からびーむだす(前半) - toorsoo's diary
前回の続きで、今度は指からビーム出していきます!
プロデューサーさん!ビームですよ!ビーム!
ビーム pic.twitter.com/E8sRqGpmwp
— Toorsoo (@toorsoo) November 15, 2014
ひとまずは、
指先から指の向きに弾を飛ばす事をやっていきたいと思います。
弾を飛ばした後にビームに置き換えていく感じです!
順序的にはこんな感じで作っていきます。
- 弾のブループリントを用意
- 発射タイミングで指の位置に弾を生成
- 弾をビームにする
ではまずは弾のブループリントを用意から!
弾のブループリントには以下の事をやってもらいます。
- 弾は今向いている方向に自ら飛んで行く
- 一定時間経てば自分で消える
自前で作るのもいいのですが、UE4には上記のようなことがパラメータを設定するだけでできてしまう、
「Projectile Movement」というとても便利なコンポーネントがあったので、
こっちを使ってみます。
まずはプループリントをアクターで作成、名前は「MyBeam」と付けました。
ここに必要なコンポーネントを追加します。
① Projectile Movement
② Sphere
③ StaticMesh(確認用!)
上記3つのコンポーネントを追加します。
③は表示確認用で追加しただけです!後ほどビーム用のパーティクルに置き換える予定です。
次に弾のパラメータを設定です。
先ほど追加したProjectile Movementの詳細ウィンドウを開き、値を入れましょう!
① Projectile
InitialSpeed に任意の値を設定。(今回 2000にしました)
初期速度になります。
② Velocity
弾が発射される向きになります。
初期ではXに 1.0 が入っていると思うので、触らないで大丈夫だと思います。
Velocityの方向にInitilizeSpeedの方向で飛んで行くイメージです。
上の設定では X方向に 2000.0のスピードで弾が飛んで行くことになります。
次はこのブループリントの寿命を設定しましょう
デフォルトタブを開き、Actorメニューからパラメータ設定です。
①Can be Damagedにチェック
②Initial Life Span に寿命の秒数を入力
今回は2秒で自動的に消えるように設定しました。
これで弾のブループリントの作成は一旦完了です!
次は弾の発射です。
前回の記事でLeapmotionの値を取得する事ができていましたが、
原点からのそのままの位置だったのでこのままだと使いづらいです!
なので、手の大きさの変えたりオフセットの位置をずらしてみます。
まずは変数を追加します。
下2つを追加してみましょう。
・初期座標からの位置のオフセット位置
・手の大きさ
・初期座標からの位置のオフセット位置
Vector型 LeapcontrollerOffset
・手の大きさ
float HandSize
を追加しました。
一度コンパイルして値を設定します。今回は
こんなかんじに設定していますー
これをLeapmotionから取得した値に適応してみます。
①手のスケーリング
②オフセットで座標をずらす
少し見づらいですが、上のような感じでノードを配置します。
これで実行!
こんな感じになります。
Leapmotionからの値を取得した時、毎回上のようにノードを配置するのは面倒です。
なので簡単にマクロを作ってしまいます。
配置したノードを選択して、右クリック。
マクロに折りたたむを選択します。
すると、
こんな感じにスマートに処理がまとまりまるので、マクロ名を
「AdjustLeaoPosition」などに変更してやります。
こうしておけば、Leapmotionの値を更に加工する必要が出てきた時に
このマクロを内容を変更すればいいだけなので、後々も楽になるかと思います。
これでそれっぽい位置に手の座標を出すことが出来ました。
次に、指から弾を出してみます。
まずは、
「指の座標・向きに弾を生成する」
関数を作ってみます。
新規関数を作成します。名前はFireFingerBeamとしました。
中身を実装していきます。
まずはイベント以外での指の情報取得の方法なのですが、追加したLeapmotionController コンポーネントからも
取得する事ができます。
以下は指情報を取得するまでのブループリントとその解説です。
①② LeapmotionControllerから Frame情報を取得する
②③ 取得したFrame情報から Fingers情報を取得する
④⑤⑥ Fingersの中にFinger情報が指の数だけ入っているので、ForLoopを使ってアクセス
ざっくりとですがこんな感じになります。
次に取得できた指情報を使って弾の生成です。
SpawnActorノードを使って弾を生成するのですが、それにはtransform情報が必要です。
なので指情報からtransformを作ります
① 必要な情報をFingerデータから取得
②④ さきほど作ったマクロを使って位置情報を Make Transformノードへ
③④ TipPosition, Direction情報を使ってRotationを作成し、Make Transformノードへ
⑤ 作成したTransformを渡して「MyBeam」ブループリントを生成!
これでこの関数を呼び出せば指から弾が発射できちゃうはずです!
とりあえず X ボタンが押された時に FireFingerBeamノードを呼び出してみます。
いざ…、
でました!!!
今回はここで終わr・・・・いやビームでした!
今度は弾をビームに変えてみます!
まずビームなのですが、パーティクルを使います。
新規で「BeamParticle」的な名前のパーティクルを追加します。
次に 弾のブループリント内の表示を変更します。
表示用に作っていたStaticMeshは削除してしまって大丈夫です!
① ParticleSystem コンポーネントを追
② StaticMesh削除
③ Particlesから先ほど作った 「BeamParticle」を選択
これで弾の表示はパーティクルに置き換わりました。
次にパーティクルでビームの作成ですが……
っと思ったら記事長くなってしまったので次の記事に書きたいと思いますごめんなさい……ッ!
なので次で本当に指からビームとか出ます。
LeapmotionじゃなくてParticleのりボンとかSpawnPerUnitの話になるとおもいます~~