ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

UE4 BluePrintメモ その1

UE4のBluePrintでよく使う割にはよく忘れる手法をメモしていく…
こうしてブログに書くことで覚える筈なんだ…
(ハードルを下げるために、2,3つ程度溜まったら投稿することにする)

ボタン押しっぱなし

f:id:pafuhana1213:20140907144408p:plain
RetriggerableDelayノードのDurationの値でボタン押しっぱなし時の
処理(↑の場合だとFireImpulse)の呼び出し時間間隔を調整

f:id:pafuhana1213:20140907144440p:plain
フラグで管理版。Tickを使用するので、ボタン押しっぱなし時の処理は
毎フレーム呼ばれることになる

Mouse left button down to shoot automatically - UE4 AnswerHub


物体の姿勢制御に関して

Set Actor Rotation

おそらく、一般的な手法
f:id:pafuhana1213:20140908220654j:plain

Add Controller XXX Input

Characterをベースとしたブループリント限定?
対応するフラグを有効にする必要あり
f:id:pafuhana1213:20140908220700j:plain
f:id:pafuhana1213:20140908221057j:plain

下の手法の方が簡単だけど、複雑な挙動を実装する場合は不向きな気がする
ローカルの回転軸とは異なる軸で回転させたい時とか…

クォータニオンか回転行列をバリバリ使いたい…(C++で実装するかぁ…)

UE4のパーティクル システムのお勉強始めました その2

UE4のパーティクル システムのお勉強始めました - ぼっちプログラマのメモ
からの続きです。前回も書きましたが、あくまで自分用まとめ(ここ重要)
※触っていて、「あ~なるほどね」と感じた箇所を主に纏めています。
 エフェクトを触る取っ掛かりになれば幸いです

前回作成したエフェクトの作り方

f:id:pafuhana1213:20140820230620j:plain
前回の記事ラストで貼った↑のエフェクト。
忘れない内に、どうやって作ったかメモっておきます。

初期状態からの変更点

  • Required -> Emitter -> Materialを「M_Radial_Gradient」に変更
    • 使用するマテリアルの変更
  • Lifetime -> Lifetime -> Maxを「10」に増加
    • パーティクルの生存時間を延ばす
  • Initial Velocity -> Velocity -> Start Velocity -> Max -> Xを「30」に増加
    • 少しX軸方向に散らすように
  • ColorOverLife -> Color -> Points0 -> OutValを「0,0,1」に
    • RGB(0,0,1)~(1,1,1)の色範囲で生成されるように

今回の学習範囲

  • パーティクルライト
  • Collisionモジュール
続きを読む

UE4+OculusRift DK2で75fps安定させるまでにしたこと

※追記(2015/02/01)
UE4+Oculusのまとめ記事を更新しました!


UE4 4.4.1で、OculusRiftDK2(SDK 0.4.1)に対応したので
早速試してみました

UE4 4.4.1のインストール

いつものアップデート手順だと上手くいかないらしいので、
@aizen76さんのツイートを参考にアップデートを行います。


いつもありがとうございます…!

OculusRift側に表示させる方法

UE4はOculusRiftにプラグインで対応している為、Unityのように
シーンに何か配置したり、色々と設定をする必要はありません。

レベルエディター上部にある再生ボタン横の三角印から
スタンドアローンゲーム」を選択し、ゲーム起動後に「Alt+Enter」を押すと
Oculus Rift用の表示モードに移行します。
f:id:pafuhana1213:20140823181550j:plain

FPSテンプレートで試してみる…お、重い…

早速、FPS用テンプレートで動作を確認してみました
f:id:pafuhana1213:20140823181904j:plain
うんうん、動いてる動いて…
f:id:pafuhana1213:20140823182047j:plain
48.01 FPS /(^o^)\

※OculusRiftDK2は75fpsで稼働している為、ゲーム側はそれ以上のfps
 動作する必要があります。60fps動作でも軽く酔います

75fps安定動作までの道のり

まず、PCのスペックを晒しておきます。

  • CPU:Corei5-4670 3.40GHz
  • Mem:12.0 GB
  • GPUGeForce GTX770(4GB)

↑のスペックでの75fps安定動作なので、市販のノートPCなどでは
今回紹介する方法では足りないかもしれません…ご了承下さい…
(一応、超高速化手法はありますが…詳しくは記事後半で)

参考:
UE4シーンの高速化の話 - Togetterまとめ
Achieving good performance and high quality visuals in UE4 through optimization [Draft] - Google ドキュメント

続きを読む

UE4のパーティクル システムのお勉強始めました

題名の通り、UE4のパーティクル システムのお勉強始めました

システムが難解+解説サイトが少ないという心が折れそうな状況ですが、
絵をリッチにする為にがんばる…(ダレカ解説ハヨ…)

今回は、パーティクルシステム作成時に初期配置されている物を
用いて、自分用まとめ(ここ重要)を書いています
f:id:pafuhana1213:20140820210713j:plain f:id:pafuhana1213:20140820211004j:plain
↑初期配置されてるパーティクル

公式マニュアルのリンクまとめ


以下では、各モジュールでよく使いそうなプロパティについて
書いています

続きを読む

LeapMotion V2Betaを使ってみました(実行ファイル付き)

デバイス倉庫からLeapMotionを久々に引っ張りだしたついでに
Unity + OculusRiftDK2 + LeapMotionで、こんな物を作ってみました

実行ファイル:
https://dl.dropboxusercontent.com/u/30427841/UnityChanRiftLiftSkirt.zip


出来はさておき、初めてのLeapMotionアプリだったので、
忘れないうちに自分用メモを書いておきます

※ 題名にもありますが、バージョンはV2 Betaです。
また、UnityPro版を使用したので、Free版とは一部異なるかもしれません…

参考サイト:
手のボーントラッキングが可能になった Leap Motion SDK V2 Beta の Unity サンプルについて調べてみた - 凹みTips

HandContollerの設定

LeapMotionによるトラッキング・手のCGモデル表示は、
プレハブ1つを追加・設定するだけです。簡単です。

まず、LeapMotionパッケージをインポートし、その中にある
HandControllerをシーンに置いてください(LeapMotion/Prefabs/HandController)

次に、HandController内の表示モデルと物理モデルを設定してください
f:id:pafuhana1213:20140805222311j:plain
表示モデルと物理モデルは、Prefabs下のHandGraphicsHandPhysicsにあります。
それぞれ数パターン用意されています。
f:id:pafuhana1213:20140805222900j:plain

設定後に実行すると、トラッキングに応じて手のCGモデルが表示されると思います

ジェスチャーの使い方(スワイプ)

LeapMotionでは検出可能なジェスチャーが幾つか用意されています。
今回は、その中のスワイプを使用しました。
(その他のジェスチャーについては、以下のリンクを参照して下さい)
API Overview — Leap Motion C# and Unity SDK v2.0 Beta documentation

ジェスチャーの検出有効化

まず、検出したいジェスチャーの検出フラグを有効にする必要があります。
スワイプの場合は、以下のコードで有効にすることができます。

private HandController _HandController;

_LeapController = _HandController.LeapController;
_LeapController.EnableGesture(Gesture.GestureType.TYPESWIPE);

ジェスチャー検出情報の取得

以下のコードで、検出したジェスチャーを取得することができます。

var gestures = _LeapController.Frame ().Gestures();
SwipeGesture swipeGesture = null;
foreach(var gesture in gestures)
{
	if(gesture.Type == Gesture.GestureType.TYPESWIPE)
	{
		swipeGesture = new SwipeGesture(gesture);
	}
}

取得したジェスチャー情報(swipreGesture)から、位置・向き・速度・状態などの
様々な情報を取得することができます。詳細は以下のリンクで
SwipeGesture — Leap Motion C# and Unity SDK v2.0 Beta documentation


ここで、注意するべき事が1つあります。
LeapMotionから取得する情報の単位と、Unity上での単位が異なる場合があります。(座標など)
その為、Unityで扱えるように変換する必要があります。(ToUnity関数、ToUnityScaled関数)

Vector3 pos = swipeGesture.Position.ToUnity();

その他


なん…だと…

UE4のDestructible Meshを使ってみる その2

前回の記事からの続き
UE4のDestructible Meshを使ってみる その1(?) - ぼっちプログラマのメモ

自由落下からの破壊…だけではつまらないので、
Destructible Meshに弾を当てて破壊します。

f:id:pafuhana1213:20140731105455g:plain
こんな感じ

方法はたぶん2種類

色々と試した結果、以下の二通りで実現可能です…たぶん。

  • 物理に任せる方法
  • BluePrintのHitイベントを使用する方法

説明には、FPSのテンプレートを使用します。

物理に任せる方法

physics神に全てを任せる方法です。
物理を有効にするだけなので、とても楽ちん。

FPSテンプレートの場合だと、弾のBluePrint (MyProjecttile) 内の
コンポーネントにあるCollisionComponentSimulate Physicsを有効にします。
f:id:pafuhana1213:20140731111623j:plain

以上。これだけ

Hitイベントを使用する方法

↑の方法はとても楽なのですが、物理を有効にしたくない場合は
使うことが出来ません(プレイヤーなど)。
その場合は、BluePrintのHitイベントを使用します。

まず、Hitイベントが発行されるように、コンポーネントにある
CollisionSimulation Generates Hit Eventsを有効にします。

次に、以下の画像のようにノードを組み立てます
f:id:pafuhana1213:20140731113037j:plain

  1. 何かに当たった際に           (イベントHit)
  2. その相手が破壊可能なオブジェクトなら (キャスト)
  3. 相手に対してダメージ1を与える     (Apply Damage)

これでDestructible Meshを破壊することができるのですが、
さらに、破壊後の破片に対しての処理も実装する必要があります…
  (試しに破片に対して撃った際の挙動を比較してください。
   物理版では破片を弾き飛ばしますが、Hitイベント版では破片は動きません)


肝心の実装方法についてですが…まだ分かっていません…ダレカタスケテ!
(分かり次第、追記なり別記事を用意します。中途半端で申し訳ないです…)


Hitイベントは破片でも来ているんだけどなぁ…
Add Impulse系じゃダメなんだよなぁ…何を使えばいいんだろう…

UE4のDestructible Meshを使ってみる その1

TappyChicken2のビル破壊に惚れたので
DestructibleMesh(破壊可能メッシュ)機能を試してみる
今回は↓の動画と同じく「落下→破壊」まで

参考動画

Unreal Engine 4 - Destructible Mesh Tutorial - YouTube

DestructibleMeshの生成・設定

まず、破壊したいStaticMeshにCollisionが設定します
設定は、StaticMeshの編集ウィンドウ上部の「Collision」で行います

次に、StaticMeshの右クリックメニューにある
「Create DestructibleMesh」からDestructibleMeshを生成します
f:id:pafuhana1213:20140712224811j:plain

生成を実行すると、DestructibleMesh設定用の画面が立ち上がります
f:id:pafuhana1213:20140712225406j:plain

画面上部にある「Fracture Mesh」を押すと、
破壊時のアニメーションが自動的に生成されます

f:id:pafuhana1213:20140712230423j:plain

※ 挙動は、画面上部のスライダーを調整することで確認できます
※ 破片の数は、フラクチャー設定の「Voronoi/Cell Site Count」で変更可能です
※ 生成結果が気に入らない場合は、フラクチャー設定のRandom Seedの値を変更し、
  再度「Fracture Mesh」を実行してください


最後に、「Default Destructible Parameters/Damage Parameters」にある
「Impact Damage」と「Default Impact Damage Depth」を「1」に設定します
これで、アセットの設定は終わりです

DestructibleMeshをシーンに配置する

設定したDestructibleMeshをシーンに配置し、
オブジェクトの「Physics/Simulate Physics」
「Collision/Simulation Generates Hit Events」に有効にします

これで準備完了です。シミュレートや再生を実行すると、
オブジェクトがバラバラになる様子が確認できると思います

f:id:pafuhana1213:20140712231955j:plain

簡単すぎる…UE4ちゃん、ほんとしゅごい…


次回は、発射した弾で破壊したり、操作キャラを接触させて破壊する方法を書く予定

追記:ようやく書きました
UE4のDestructible Meshを使ってみる その2 - ぼっちプログラマのメモ

おまけという名の本編

f:id:pafuhana1213:20140712234511j:plain

\上手に割れました/


使用したスイカのモデル
http://seiga.nicovideo.jp/seiga/im3799255