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

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

ちゃんとTime.deltaTimeを使わないとダメ!絶対

SchoolGirlsSimulatorに関して、High School Simulatorさんからカメラの移動が遅いというコメントをいただきました。

High School Simulator 201750 分前
I downloaded the game, the camera moves very slowly 😕, but the game is great ☺
返信 1      
 
 1rafeel 
1rafeel33 分前
thank you for the advice.
Improve the rotation mechanism of the camera.
返信      
 
 High School Simulator 2017 
High School Simulator 201733 分前
+1rafeel Ok 😊
返信      
 
 1rafeel 
1rafeel2 分前
There was a mistake in camera rotation processing.
Advice was greatly appreciated.THX


ソースを確認したところ、

horizontalAngel += ax2 * 2;
horizontalAngel = Mathf.Repeat(horizontalAngel, 360);
verticalAngel -= ay2 * 2;
verticalAngel = Mathf.Clamp(verticalAngel, -60, 60);

みたいにTime.deltaTimeを使わずに回転していました。
これだと、機種のFPSによる違いが吸収されないので、遅くなったり、早すぎたりしてしまう。
キャラの移動や回転はTime.deltaTimeを使ってたのですが、カメラで抜けてました。


早速以下のように修正。cameraRotateSpeedは100に設定。
そもそもアナログジョイスティックなので、かなり早くしていても、指の加減で遅く回転することもできるので、
最大だと早いぐらいでもいいでしょう。

horizontalAngel += ax2 * Time.deltaTime * cameraRotateSpeed;
horizontalAngel = Mathf.Repeat(horizontalAngel, 360);
verticalAngel -= ay2 * Time.deltaTime * cameraRotateSpeed;
verticalAngel = Mathf.Clamp(verticalAngel, -60, 60);


非常に助かりました。
基本的な操作性がダメだと、そのアプリは完全に死亡ですからね。
ありがとうございました


あ。AngleとAngelのつづり間違ってるw 直した。

GooglePlayDevelopperConsoleに登録中

登録作業中。
ビルドは一応 IL2CPPでやっとこうと思うけど、なんか不具合とか出たらいやだなあ。2fpsぐらいしか変わらない感じだし。

基本は英語版にして、日本語版を追加って感じで。これは大富豪アプリも同じだけど。
登録データは用意できたんで、あとは最終チェックでバグ潰し(これがなかなか終わらない)
動画をYouTubeにアップもありますね


f:id:yasu9780:20170316045529p:plain

3D対応HMD

サンコーレアモノショップがHDMI入力のHMDを販売しているが、口コミを見るとなかなか表示がきれいらしい。解像度は720P表示だけど。
SonyのHMZと比較して、何がいいかって、軽い。
HMZはPlaystationVRもそうだけど、非常にでかく、非常に重い。長時間つけておくのは無理なレベル。
軽いというのは凄い利点だと思う。

ただし、この商品は3Dには対応していない。(もちろんモーションセンサーも無いからVRではない)


ちょっと調べると、似たようなデザインで、DMM.MAKEが3DのHDMI入力に対応した製品を販売している。値段も変わらない。
もしEYE THEATERを買うぐらいなら、こっちの方が良いでしょう(3Dいらないならいいけど)


SONYはHMZシリーズを終息させている模様。もう新型は出ないのか。PlaystationVRがほぼ上位互換だし、そっちに全力を挙げるのでしょう。


中国製だと4K対応のVRなHMDも現れている。現状、オキュラスやVIVEは、解像度が低いの問題だが、VRなHMDの解像度が低い問題も数年で解決されそう。
スマホで4KもSONYが出しているし。
正直スマホで4Kなんているの? と思うが、VRに関しては4Kはより望ましいと思う。
ビデオカードには大変だろうが、これも数年でなんとかなるような気がする。ハードの並列増加で解決できるはずだし。



最近の液晶TVは3D非対応が多い。3Dは完全にオワコンになってしまった気がする。
3D好きとしては寂しい。
学校シミュレーターはVR対応にしているが、3D対応にもしてみたい。


3D対応の場合、サイドバイサイド表示ができれば、スマホの映像出力を3D対応TVかプロジェクターに入れることで、立体視視聴ができるようになる。
ここで必要なのは、どうやってサイドバイサイド表示するか?

カメラを二つ用意して、Viewportを分割して、左右で二つ表示するのは簡単だ。VR対応はこれでできる。

問題は、3Dのサイドバイサイドでは、横を圧縮して縦長な画像になっているということで、これはVRの2画面表示とは完全に違う。

具体的に説明すると、1024x600が元の解像度とすると、VR対応は、液晶に左右に、半分ずつ表示するが、ピクセル単位のアスペクト比は1:1のまま。
しかし、サイドバイサイドは、横を半分にする必要がある。ピクセル単位でアスペクト比1:2にする必要がある。
TVやプロジェクターは、入力された映像の横を2倍に引き延ばして表示するため。普通のVR対応で2画面にすると、横に太った映像になってしまう。

このサイドバイサイド対応で描画する方法が、今のところよくわからない。
RenderTextureを経由すればできるのか? GoogleVRライブラリならできるのか?

3Dtextがオブジェクト貫通しないようにする

3DTextだと、壁の向こう側にあっても必ず画面に表示されてしまう。
以下の記事を見るとshaderを書き換えれば仕様を変えられる模様


haraken.hatenablog.com

上記記事を参考に、Unity公式からビルトインShaderをダウンロードして、font.shaderを書き換えた。


Cull Backだと、裏側から見たときに文字が表示されないので、Cull Offのままで、ZTestとZWriteだけ修正した。

Cull Off
ZTest LEqual
ZWrite On


f:id:yasu9780:20170315195507p:plain

キャラの名前が以前は背後から見ても体を貫通して表示されていたのが、体のオブジェクトで遮られるようになった。


ちなみに体を表示するシェーダーは、Cull Backだと、内側から描画されない。例えば、髪の毛の内側とか、スカートの内側が非表示になる。
厳密には2PASSにして、Cull Front→Cull Back と表面、裏面を描画するのだろうけど、それだとDrawCallが2倍になってしまうみたい。
なので、Cull Offで現状ちゃんと表示されている。これならDrawCallは増えないみたい?(このへんの仕様はよく解らない)
厳密にいうと、CullOffだと、裏面が表面に被って表示される場合が出てくるはずだけど、現状特に問題は無いように見えます。

Cull Offでも、上記画像の左側でスカート内部がちゃんと描画されている。

アプリの内容・操作説明

アプリ公開に向けて動いています。
とりあえず第1稿。
英語版も作らねば


 授業に出たり、売店でお菓子を買ったり、同級生と話したり、学校生活を体験できます。
 ゾンビもやってくるので仲間を守るために撃退してください。
 ゾンビに襲われるとゾンビになってしまいます!
 (ゾンビが生まれてこないモード設定もできます)

 同級生を攻撃すると目撃者が先生に報告に走ります。報告を受けた先生はあなたを追ってきます。
 先生に捕まるとゲームオーバーです。
 先生に知られないためには、目撃者を出さないか、目撃者を始末してください。
 背後で起きたことは見えていません。
 (ゾンビが近くにいると、事故とみなされてとがめられません)

★ボタン操作

 画面左側をドラッグ:主人公に移動
 画面右側をドラッグ:主人公の視点を移動

 ボタンB:膝を落として移動
 ボタンX:キック攻撃(武器を持っている場合は武器攻撃)
 ボタンR:Fly(飛行移動)
 ボタンL:自分または同級生の情報を見る

 ボタンAは状況によって変わります。
  「(A)SitDown」のように表示されるので、「Aボタン」を押すとメッセージの行動ができます。

  TALK 会話(褒めると高評価。けなすと低評価。持っている物を渡たすこともできる)
  PICKUP 落ちている物を拾える(同級生が持っているものを奪うこともできる)
  ITEM MENU 持っている物を落とす、投げる、食べる
  DRAG 死体や同級生を引っ張って移動できる
  DROP 持っている物や、つかんでいる人を離す
  RIDE 自転車やバイクに乗る
  GETOFF 自転車やバイクから降りる

 Setup:設定画面
 Share:TwitterFacebookなどソーシャル連携でゲーム画面画像とメッセージを共有できます。
 Home:ホーム画面に戻ります(Setup内でゲームのセーブができます)

 攻撃方法は、Xボタンで持っている武器で攻撃する方法と、武器を投げて(落として)ぶつける方法があります。

★学校の時間割
 1時限目 8:00~8:30
 2時限目 9:00~9:30
 3時限目 10:00~10:30
 4時限目 11:00~11:30
 昼休み 11:30~13:00
 5時限目 13:00~13:30
 6時限目 14:00~14:30
 部活動 14:30~18:00
 下校時間 18:00

・授業が終わる時に席に座っていれば出席になる知力がアップします。
・校内には自動販売機や売店があり、お菓子や飲料を購入できます。
・1時間ごとにゾンビが発生するため、同級生や教師を守るためにゾンビを倒してください。
 武器は、校門前や売店前に落ちています(弾丸は売店で追加購入できます)
・同級生や教師と会話することで互いの評価が変わっていきます。
 ゾンビを倒すことでも、学内で信頼されていきます。

★設定画面

 ・設定画面で、ゲーム時間の進行を速くしたり、1時間後に進めたりできます。
 ・血を見るのが嫌な人はBloodNGで血しぶきがでなくなります。
 ・ワープ機能:自分の席、売店、屋上、プールなど、学内の各所に瞬間移動できます。
 ・コスチュームや髪型・髪色・瞳色などを変更できます
  (更衣室の自分のロッカーでも変更できます)
 ・ゲームパッドの右アナログパッドのAXISを変更可能
 ・1時間ごとに生じるゾンビの数を設定可能

ゲームパッド推奨
 USBホスト機能のあるスマホでは、ゲームパッドを接続して操作できます。
 (右アナログパッドがうまく操作できない場合は、設定画面でAXISを切り替えてみてください)

★VR機能
 まだ開発中ですが、VR機能を試せます。操作にはゲームパッドの接続が必要です。
 設定画面で「VR On」にすると、画面が左右二分割されるので、VRヘッドセットにスマホをセットして下さい。
 頭を動かすとカメラ視点が連動します。


英語版

You can experience "school life", attend the class, buy sweets and talk with classmates.
Additionally, zombies are comming, so please repel to protect your friends.
Becoming a zombie when attacked by zombies !
(You can also set the mode in which zombies are not born.)

Witnesses will report to the teacher when you are attacking classmates.
The teacher who received the report will follow you.
When you are catched by teachers and the game is over.
In order not to be known to the teachers, please do not send eyewitness or remove witnesses.
They can not see what happened behind the scenes.
(When a zombie is in the vicinity, it is regarded as an "accident" )

How to game

Drag left side of screen : move to main character
Drag right side of screen : move the point of view of the main character

Easy as operation buttons are displayed on the screen even if you do not remember them.

Button B: Move by dropping your knees.
Button X: Kick attack / Weapon attack
Button Y: Message friends to follow me/Call me/ByeBye/Spawn yourself
Button R: Fly (flight movement)
Button L: See Information of yourself or a classmate.

Button A changes depending on the situation.
Since it is displayed as "(A) SitDown", you can act on messages by pressing "A button".

TALK: Conversation (praise or disparaged) / You can pass your item.
PICKUP: Pickup falling item / Take away classmate has
ITEM MENU: Drop, Throw,and Eat(Drink).
DRAG: Can move by pulling dead body or a classmate(living).
DROP: Can separate item or classmate or zombie.
RIDE: Ride on bike or motorcycle.
GETOFF: Getoff bike or motorcycle.

There are attack ways to use with the weapon(X button) and to throw(drop) a weapon.

Setup: Setting game options
Share: Share game image and message with social media (Twitter, Facebook, etc).
Home: Return to home menu (You can save the game status in Setup.)

School timetable

1st lesson 8:00 ~ 8: 30
2nd lesson 9:00 ~ 9: 30
3rd lesson 10:00 ~ 10: 30
4th lesson 11:00 ~ 11: 30
Lunch break 11:30 ~ 13: 00
5th lesson 13:00 ~ 13: 30
6th lesson 14:00 ~ 14: 30
Club activities 14:30 ~ 18: 00
Leaving school 18:00

  • If you sit at the chair at the end of the lesson, you will attend and intelligence will be up.
  • There are vending machines and shops inside the school, so you can purchase sweets and drinks.
  • Since zombies occur every hour, please defeat zombies to protect classmates and teachers (number of occurrences can be changed)

Weapons are falling in front of the school gate and before the shop (bullets can be purchased additionally at the shop)

  • Evaluation changes with each other by talking with classmates and teachers.

Even if you kill a zombie, it will be trusted within the school.

Setting game

  • You can speed up the progress of the game time or proceed one hour later.
  • People who dislike to see blood are BloodNG option disenable splash of blood by attacking.
  • Change position : You can instantly move to various parts of the campus such as your own seat, shop, rooftop, pool etc.
  • You can change costume, hairstyle, hair color, eyes color etc (You can also change your own locker in changing room)
  • AXIS on the right analog pad of the game pad can be changed
  • Set number of zombies occurring every hour (0-3/hour)

Game pad recommended

In a smartphone with a USB host function, you can operate by connecting the game pad.
(If you can not operate the right analog pad well, try switching AXIS on the setting screen)

VR mode (alpha edition)

Still developing ,you can test the VR mode. To operate the game pad connection is necessary.
When you set "VR On" on the setup game, the screen is divided into two left and right, so please set the smartphone to the VR headset.
Move the head and the camera viewpoint will be linked.

VRモード実験

f:id:yasu9780:20170311194916p:plain

VRモードを実験してみた。
カメラを二つにして左右視差を作って表示。カメラ視点移動を右アナログパッドから重力センサーに変更。

スマホ実機でも動かしてみたけど、さほどFPSは落ちませんね。ほぼ変わらないかも。
2画面だけど表示領域は増えてないし。50体のキャラの描画に負荷がかかってるからカメラ二つになっても大差ない感じか。
SkinnedMeshやAnimatorの計算処理は、最後の描画カメラが増えてもいっしょだしね。

視線変更できるのは面白いけど、ぐるぐる回らないいけないので、右パッドでも視線が回るようにしたい。
あと、上を見上げるとカメラが地面にめり込んで、Occlusionで、部屋自体が非表示になったり。
カメラの操作処理もだいぶ手を入れないいけない。
FPSならこのへんが簡単なんだけど、TPSはいろいろ面倒だねえ(´・ω・`)



GoolgeVRも試してみたけど、色々仕様が複雑だし、視線入力を使わないんだなら、わざわざ使う必要ないかなと思う。
別に樽上に歪ませる意味がないでしょう。
これが、視野角を向上させるために特殊なレンズを搭載したヘッドセットを用意して、レンズで歪んだ周辺画像が元の画像にになるように
あらかじめ周辺部を歪ませておく。みたいなことをやるなら、大いに意味があると思うんだけど。
っていうか、こういう処理をやるCardboardを作ってほしい。
どこかの研究所のレベルではやっている記事を見たけど。
オキュラスとかHTC VIVEはやってるんだろうけど。


要するに、視野角を向上させる特殊レンズ+レンズ歪みを補正してあらかじめ歪ませるグラフィックライブラリの二つがあれば実現できるだよね。
レンズは100円ショップで調達できないから、量産効果が無いと安くならないかもしれないけど。