ぼっちプログラマのメモ

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

UE4ぷちコンに参加しました (パッケージ配布あり)

株式会社ヒストリアさん主催のUE4ぷちコンに参加しました。
詳細: UE4ぷちコン開催のお知らせ | historia Inc - 株式会社ヒストリア
応募作品一覧:
[UE4] 第1回UE4ぷちコン 応募作品一挙公開! | historia Inc - 株式会社ヒストリア

今回提出した作品は、『UnityChan Dash!Shot!Jump!』です
(我ながら酷いネーミングセンスだが、午前3時の頭ではこれが限界)


見て頂ければすぐ分かると思うのですが、とてもシンプルなゲームです。
にも関わらず、最終選考まで残ったみたいです。○ニティ社の圧力こわいです。

満足点
  • スタート画面からゲームオーバーまでの一連の流れを作れた
  • ゲームっぽいものを作れた
  • ユニティちゃんペロペロ
反省点
  • 見た目に拘らなさ過ぎた…UE4ならではの機能も余り使えていない…これではUE4の持ち腐れ…
  • ゲームのリズムが一定過ぎる。○リオカートでいうスターのような無敵ブーストアイテムを追加するなどして、ゲームのリズムを変動させればよかった…
  • ユニティちゃんの可愛さをもっと引き出すべきだった…


このような場に作品を提出するのは初体験だったので、
とても良い刺激になりました。
秋頃に開催予定?の第2回ぷちコンに向けて、より精進していこうと思います。


パッケージ配布

最終選考のニコ生で、パッケージ配布希望という自演臭いコメがあったので
パッケージをアップロードしました。バグを見つけても華麗にスルーして下さい

Dropbox - UnityChan_DSJ.zip (約350MB)

ユニティちゃんライセンス

このコンテンツは、『ユニティちゃんライセンス』で提供されています

UE4のNavmeshを使ってみる

Navmeshを使って、青いオッサンと追いかけっこするまでのメモ書き


参考:

Unreal Engine 4 Tutorial - Basic AI Navigation - YouTube

Character継承のBlueprintを新規作成

Navmesh機能で動くキャラクターを作成し、AnimationやMeshを設定する
参考動画では、BlueprintThirdPersonのMyCharacterの複製から、
カメラ・Blurprintを除いたモノを使用していた

プレイヤーを追従する処理を作成

毎フレーム、プレイヤー座標に向かって移動するように設定する
↑の作成したCharacterのEventGraphに、以下のノードを追加した
f:id:pafuhana1213:20140608184536j:plain

Navmeshの設定

Navmeshによる制御範囲を設定する
ブラシツールのNavMeshBoundsVolumeを選択し、レベル上に配置・範囲を設定
f:id:pafuhana1213:20140608185748j:plain
f:id:pafuhana1213:20140608190023j:plain


これだけで準備OK
実行すると、青いオッサンがプレイヤーを追いかけてきます
f:id:pafuhana1213:20140608190418j:plain

※移動速度を調整した場合は、CharacterのDefaultにある
 Max Walk Speedを弄る

※プレイヤーにではなく、特定の位置に自動移動するのは
 TargetPointで実装可能。詳しくは、動画で

ユニティちゃんをUE4上で操作できるようにする

前回の記事で出す所までは出来たので、今回はゲームパッドで動かす所まで
TP_SideScrollerBPの青いオッサンを参考に、先日の勉強会を思い出しつつ頑張る

とりあえず、青いオッサンの中身を見る…カッコイイ…
f:id:pafuhana1213:20140524150643j:plain

ざっと見た感じ、Unityちゃんを動かす上で必要になるのは、
・モデル・スケルトン(前回の記事で生成済み)
・BlendSpace(1D) (パラメータに応じたモーションブレンド)
・AnimationBluePrint (BlendSpaceのパラメータ操作 + ステートに応じたモーション変更)
・プレイヤー操作用のBluePrint (TP_SideScrollerBPだと、MyCharacter)

の筈。まずBlendSpace1Dから作成

BlendSpace

コンテンツブラウザの右クリックメニューから、BlendSpace1Dを新規作成
(ブレンド用パラメータを複数使いたい場合は、BlendSpcaeを使う)

ケルトンを指定する必要あるので、「unitychan_tail_Skeleton」を選択
すると編集画面が開くので、青いオッサンの方を参考に色々設定する

f:id:pafuhana1213:20140524153836j:plain
(中央のBlendSpaceに、右側にあるアセットブラウザから
AnimSequenceアセットをD&Dすることで、モーションを追加・設定)

プレビュー画面の再生ボタンを押して、Speedの値に応じて
モーションがどう変化するかを確認…うん、動いてる動いてる、かわいい

AnimationBluePrint

ここでは、BlendSpaceで用いるパラメータ:EventGraphと
ステートに応じたモーション遷移:AnimGraph(UnityのMecanimっぽい?)を
青いオッサンから全てパクる

AnimGraph

AnimGraphタブにて、StateMachineを新規作成
作成したノードをダブルクリックすると、その中身に飛ぶことができるので、
後はひたすらステートをゴリゴリ作成していく

f:id:pafuhana1213:20140524161817j:plain
f:id:pafuhana1213:20140524161729j:plain
f:id:pafuhana1213:20140524161921j:plain
f:id:pafuhana1213:20140524162039j:plain
f:id:pafuhana1213:20140524162118j:plain
f:id:pafuhana1213:20140524171709j:plain

今回は、移動・ジャンプに絞っているのでこんな感じ
時々コンパイルしろ!的な警告・エラー文が出るので、その時は左上のコンパイルを実行

EventGraph

これも青いオッサンのアセットと睨めっこしながら作ります

詰まりかけた・悩んだ箇所
  • ノードを囲む白い領域の作成方法

複数のノードを選択後に、cキーを押す(↓を見るまで分からなかった…)
Unreal Engine | Blueprint Editor Cheat Sheet

  • 右クリックメニューにないノードの作成方法

Get Movement ComponentやIsFallingは、右クリックメニューの新規ノード候補にありません

Get Movement Componentの場合はTry Get Pawn Ownerノードから
IsFallingの場合はGet Movement Componentノードから線を引っ張って、
離した際に表示される、新規ノード候補の中にあります

青いオッサンと入れ替える

操作周りは今後することにして、MyCharacterで使用している青いオッサンモデルと
ユニティちゃんモデルに入れ替える

  1. MyCharacterアセットを開く
  2. 右上編集モード選択?のデフォルトを選択
  3. Mesh項のSkeletonMesh、Animation項のAnimBluePrintGeneratedClassをユニティちゃん用のものに差し替える
  4. 実行。そこには元気に歩きまわるユニティちゃんの姿が!

色々と挙動はおかしいですが、とりあえず動かせました
次は操作周りのBluePrintを弄っていこうかしら
f:id:pafuhana1213:20140524170940j:plain

Unityちゃんとアンリアルエンジン4

5/18に行われた「関西Unreal Engine4 勉強会」に参加してきました。
ということで、先日購入したUE4にUnityちゃんを召喚する

とりあえず、↓のサイトを参考にモデルなりモーションデータを持ってくる
UE4でゼロからユニティちゃんを表示させるまで - Let's Enjoy Unreal Engine


無事持ってこれたので、シーン(レベル)に置いてみると
変にリアルなガングロガールがそこに…。まあ、ライト効くから当たり前なんだけど
そしてライティングを無効にすると、微妙な絵になる…

なので、マテリアルの方を弄る
f:id:pafuhana1213:20140518224711j:plain

↑のように、エミッシブ(発光)色に線を引っ張ると…
↓のようにライトを無視したような感じでモデルに色がつくように
f:id:pafuhana1213:20140518225336j:plain

Unityで出した時とはまた違った雰囲気で、マジ天使
次はモーション周りを色々設定していこっと

UnityちゃんとMMD for Mecanim

Unityちゃんに公式モーション以外をつけたいけど、
アセットストアの物は思っていたよりも高いので、MMD for Mecanimを使って
Unityちゃんとにゃんにゃんする


とりあえず、まず
テラシュールウェアさんの紹介記事通りにしてみる…が、上手くいかない
テラシュールウェア [Unity][MMD]MMD for MecanimでMMDモデルを表示する

ので、色々したら動いた
・Rig/AnimationType を Humanoid に
・Animation/Root Transform Position(Y)/Offset を 1 に
(他にも色々弄った気はするけど、この2つだけでいい気がする…)


↓にゃんにゃん
https://dl.dropboxusercontent.com/u/30427841/Unity_web/UnityChan-Nyanyanyanyanyanyanya%21/UnityChan-Nyanyanyanyanyanyanya%21.html

f:id:pafuhana1213:20140506021406j:plain

満足

UnityちゃんとAR (ARマーカのリアルタイム作成)

既に公式で「UnityちゃんAR」があるけど、
何か物足りないので自作してみる

AR表示で使用したライブラリ:vuforia
詳細・導入方法: 「unity AR」でググる

f:id:pafuhana1213:20140421234709j:plain

わーい、できたー
おわり



だと味気ないのでもう少し頑張ってみる

色々調べていると、vuforiaの機能の中に
「ARマーカのリアルタイム作成」というものがあるらしい
使ってみた人があまりいなさそうなので、この機能を導入してみる
vuforia:User Defined Targets(英語)
https://developer.vuforia.com/resources/sample-apps/user-defined-target-sample-app


導入方法:
vuforia:Unity - How do I create a simple UDT app(英語)
https://developer.vuforia.com/resources/sample-apps/user-defined-target-sample-app
google先生の日本語訳

超ざっくり導入方法

  1. 空のシーンに「ARCamera」「UserDefinedTargetBuilder」「ImageTarget」プレハブを追加。ついでにライトも
  2. ImageTarget/Image Target Behavior のTypeをUserDefinedに変更
  3. UserDefinedTargetBuilder のStart~にチェック
  4. SimpleUDTHandler.csというC#スクリプトを作成し、UserDefinedTargetBuilder に追加
  5. ↑のサイトにあるコードをコピペ
  6. "IEnumerable"でエラーが出る場合は、"using System.Collections.Generic;"を追加
  7. ImageTarget下に表示したいGameObjectを追加 (今回はunitychan)
  8. 追加したGameObjectがいい感じになるように調整
  9. おわり(androidios向けにビルドするなり、webカメラ使うなりご自由に)


↓な感じで即席マーカでもAR表示できるようになりました
f:id:pafuhana1213:20140422003707j:plainf:id:pafuhana1213:20140422003646j:plain

ライセンス表示周りの対応が出来ていないので、配布なし

Unityちゃんのドローコールを減らしてみる(CombineMeshes)

Unityちゃんのドローコールがデフォルトで43。
微妙に気になる数値なので、メッシュ結合でドローコールを減らしてみる

メッシュ結合で使用したスクリプトは、↓のサイトから拝借
SkinnedMeshCombiner - Unify Community Wiki
そのまま使うとおかしくなるので、色々と書き換える

・58~64行目付近のfor文をコメントアウト
・72~88行目付近を丸ごとコメントアウト
・Material combinedMat=new Material( Shader.Find( "Diffuse" ) ); を
 Material combinedMat = smRenderers[0].material; に書き換え。
 そして、その下2行をコメントアウト
・r.rootBone = smRenderers [0].rootBone;を最後の方に追加

メッシュ結合出来たのは、服(袖以外)と髪。
他は表示がおかしくなったりしたので、今回はしてないです

f:id:pafuhana1213:20140418234812p:plain

  1. 空のGameObjectを作成して、てきとーな名前をつける(Cloth, Hair)
  2. 作成したGameObject下に、メッシュ結合したいObjectをまとめる(上の画像を参照)
  3. 作成したGameObjectに、↑のスクリプトを追加(RootObjectはunitychan)
  4. 実行

※作成した空のGameObjectのTransoformは、pos,rotは0,0,0。scaleは1,1,1にする。

実行すると、ドローコールが43から23に減っていると思います…たぶん
(色々と試行錯誤しながらの作業だったので、抜けがあるかも…)

ただ、他のサイトでは18まで減らせたと書いてあったので、
まだまだ削減の余地はありそう…困ってからでいいか