AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

学校シミュレーター進捗

  • ドアの自動開閉
  • 分身生成
  • ドラッグ中の死体を投げる処理
  • カメラ用のトリガーを校舎内であちこち設定
  • 壁の不具合を調整


現在、ジャンプ機能を作ってますが、これがなかなか手ごわい。
navMeshを切りつつ、着地判定をしつつ、飛ばしつつ、ボタン押してないなら重力落下もさせないといけない(´・ω・`)
現状、ジャンプボタン押すと地面にめり込む



ドアの自動開閉も、引き戸なんで本来は、入る時は、右のドアを左に。出るときは左のドアを右に。
みたいに、ドアの表と裏で違う処理をしないいけないけど、入る時に、左のドアのトリガーに引っかかって出ると思ってしまったり、逆もあるので。
本来一方通行で判定しないといけないんでしょうけど、非常にややこしい。
もう面倒くさいので、両方に自動的に開くようにした。
もう引き戸じゃないけどw
本家だと、ドアの前に立つとOpenのコマンドが出て、openして初めて開くので自動ドアではないですね。
ただ、ドアをしめておいても、NPCはすぐに開けられるので、開け閉めする意味がないような気がします。
NPCが開けられないなら、殺す前にドアを閉めておいて逃げられないようにすることができるんでしょうけど。


分身作成はragdollをInstantiateですね。

f:id:yasu9780:20170218160811p:plain
100体生成でPCで30fps。androidだと10fps切るのかな? まだ試してない


死体投げは、投げるモーション実行→右手connect切り離し→AddForceって手順で投げましたが、
ジャイアントスイングしたら飛ぶ距離が変わると面白いのかもしれません。
HiSchoolSimulatorの実況動画でぐるぐる死体を回して投げてる人がいたので。
回してる間は、RigidBody的にはVelocityがあるはずなんですよね。それが飛ぶ距離に反映されれば、本当の意味でゲーム的。
投げモーションを再生してAddForceだと、ただの紙芝居ですもんね。

カメラ用のトリガは、地道な作業ですが、これをやっておけばカメラが壁を検出してヤンデレちゃんに寄るので、カメラに写ってない状態を避けられる。
カメラワークは非常に難しいけど、操作性にも直結するので大事だと思う。

実際に歩き回ってると、こんなところに隙間が!とかここ地面見えてるよとか、ここドアの下に隙間がある!
みたいに建築上の不具合を発見する。ゲームシーンビューだと小さいので気づかないが。
気分が建築現場の作業員( ゚Д゚)



100体生成時のprofiler数値

 CPU 29.61ms GPU35.02ms

CPU Usage
 物理計算 16ms 人体RigidBody 101体
MeshSkinning 2.6ms 人体 101体

GPU Usage
meshSkinning 5ms(202DrawCalls) 人体 101体(1体あたり2drawCalls)
batchRenderer 3ms(137drawCalls) 髪の毛 101髪+背景


SetPassCall 45なんで、SkinnedMesh増えても数に比例して増えてない
髪の毛はmeshなんで、同じ髪型ならbatchingされて効率いい

GPUUsageは低いのに、Other項目がやたら大きい。これは何をしてるんだろ?
CPUは圧倒的に物理エンジンが動いてる。meshSkinning自体は100体でも大したことない