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

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

壁もおけるようにする

壁も配置できるようにしてみた。
経路探索をやっていないので、壁を迂回することはできないので、壁殴りが発生する。
壁が無ければ、アーチャーは戦士にタコ殴りにされるが、壁をつかってチートしているので、
戦士をせん滅できる。
http://27.120.88.154/rts3.gif
経路探索した方がいいのかな?
自前のwaypoint探索を使うか。
ただ、軍団が増えた場合に遅くなるかな?
壁をうまく配置して勝つというゲーム性が作れれば面白くなる。
あと、爆弾とかもいいと思う。
自陣に引き込んで爆弾で一網打尽。

あと、相手を全滅させるだけじゃなくて、王様という大本営をつくって、そこを倒られると負けも必要かも。
クラクラでいうところのホームタウン。

集団VS集団の戦い

次は、集団と集団で戦うゲームを作ろうと思います。

http://cdn-ak.f.st-hatena.com/images/fotolife/y/yasu9780/20170323/20170323102626.png?1490232822


今のところ種類は、戦士・弓使い・魔法使いの3種があります。
これを画面、下の方で選択して、マップ上でタッチすると、そこに配置できます。
すでに配置しているキャラをタッチして、新しい場所をタッチすると、そっちにキャラが移動します。

キャラの配置は3種類のマップで保存できます。
自軍は青軍ですが、青軍に保存している配置マップを、赤軍にコピーして互いに対戦できます。


対戦の様子。
弓は射程は長いけど、攻撃力で劣ります。また戦士は弓使いよりHPが高くタフです。
戦闘中はなにもできないので、ゲーム性は純粋に初期配置です。
http://27.120.88.154/rts.gif

任意の配置マップをサーバーに保存できるようにして、
他の人の配置と戦えるようにしたいと思います。
一応、ネットワーク対戦という感じになります(リアルタイムではないので、すれ違い型の対戦)


ランダム性と物理エンジンの未使用って感じで対戦を行えば、おそらく初期配置だけを保存しておくだけで、
対戦の再現ができると思います。
これはクラッシュオブクランもおそらくそうだと思うんですが。
他の人が自分の軍団と対戦させた結果が見れるようにすれば、面白いと思います。

http://27.120.88.154/rts2.gif

HTCがVR事業に注力

vrinside.jp

上海の工場を売却してVRに投資らしい

Googleから請け負ったPixelとPixel XLの製造も、さほどHTCの助けにはなっていないようだ

スマホ自体はもう今後商売にならないっぽいよね。
もう需要がいきわたった感じ。

例えば、Intelに対してAMDRyzenで追いついてきてるけど、むしろIntelがもう成長できないとこまで来てるんだよね。
プロセスルール変えても1CPUのクロック上がらないし。
WindowsのPCもいきわたってるから、もうあんまり売れないし。
いつか、スマホも同じ状態になる。
スマホなんて、結局、部品を組み合わせてAndroidを入れるだけの組み立てビジネスだと思うし。人件費ダンピング中国企業に値段では勝てないだろうし。


HTCが、社運をかけてVIVEをやるなんてなんかかっこいい。
オキュラスは親会社がFacebookだけど、なんか大学の延長って感じで商売っ気が少ないので、隙はあると思う。

ASUSとかBENQとか台湾はけっこういいメーカーが多いな。
日本のITメーカーよりよほど存在感があると思う。

ちゃんと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ライブラリならできるのか?