読者です 読者をやめる 読者になる 読者になる

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

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

某アプリ紹介サイトでシミュレーションゲーム新着6位

アプリ紹介サイトのシミュレーションゲーム新着で6位につけました!
記念魚拓

f:id:yasu9780:20170409003344p:plain


http://applion.jp/android/app/com.Meromsoft.SchoolGirlsSimulator/market/


ゲームパッドが左右独立してなかったという致命的なバグと、
メイン武器であるM4A1ライフルがゾンビに当たらないという致命的なバグは修正したので、明日以降に期待。
↑こんな致命的なバグがあって、よくダウンロードされたな|д゚)

新機能で、
テニス部、水泳部とボール遊びと空手部を追加しました。


あと、ユーザーの要望を見ると、

  • 男の追加して
  • 地下室、注射器追加して
  • 血をモップで消したい
  • 笑い声を追加して
  • なにかゴールかミッションを入れて

みたいなのが多い。
某ゲームに似た機能を入れ込むと、某ゲームファンは嬉しいかもしれないが、色々面倒なので、
その方向はやりたくない
実際、某ゲームは動画で見ただけで、実際に遊んだことは一度もない。というかダウンロード自体してない( ゚Д゚)


ゾンビに襲われるとゲームオーバーじゃなくて、自分がゾンビになって攻撃開始
みたいなのは、ありそうで無いアイデアだと思う。コロンブスの卵というか。
パックマンみたいな逆転攻勢ですね。

ユーザーのレビューで吸血鬼はどう?みたいなコメントがあったけど、これも面白い
吸血鬼も襲ったら、相手が吸血鬼になるわけだけど。
空が飛べたり、怪力だったりしたら面白い。
吸った吸血鬼が部下として後ろから従ってくるというのも良い。


考えてみると吸血鬼はすごい好きなジャンルで、
平野耕太HELLSINGとか、ときめきトゥナイトとか(古い)、最近の奴だと『終わりのセラフ』が凄い好き。

www.youtube.com

www.nicovideo.jp

すごく評価が増えている

公開中のSchoolGirlsSimulatorですが、昨日1000DLを超えて1200DLぐらいに到達し、1日120DLぐらいなので、ぼちぼち行こうと思ってましたが、
急に1日1166DLもされて、現在2400DLになりました。更新されたら3000は超えてると思います。
このペースで1日1000DLで増えてくれると有難いですが|д゚)

評価もすごい勢いで増えていて、昨日までで累計40ぐらいだったのが、すでに163もあります。1日で120も増えました|д゚)

凄い参考になるコメントも多いです
全部読んでます。ただ、言語によっては英語に訳しても意味が解らない場合もありますが

When I move character and move camera same time it just bug when I move she move right 
I think u should change control now m4a1 in game can't use but pistol can use just fix
 and do graphics low - quality Melee weapons can't use zombie just fix if u can
  • バーチャルパッドが左右同時に動かすとおかしいよ
  • ライフルのm4a1が当たらないよ
  • 近接武器が当たらないよ
  • 画質下げた方がいいよ

みたいな指摘で、たしかに左パッドで移動しながら、右パッドを動かすと、左パッドが動いてしまいます。
もともと画面内に複数おけるパッドじゃないのを無理やり改造して使ってたので、まともに動ていませんでした。
自分はだいたいxbox360パッドで動かしてるので、気づかなかった|д゚)
hard controlってコメントがやたら多かったののも頷けます


アセットストアでバーチャルパッドを買おうかと思ったんですが、組み込むの面倒ですし、
既存のソースを見ても、なんだかよく解らない。
こういうとき、自作してないとはまるパターン。

結局、次のようなコードで、左右のパッドを区別するようにしました。

        bool isTouchOk()
        {
            Vector3 pos;
            pos = Input.mousePosition;
            if (Input.touchCount >= 2)
            {
                if (Input.touches[0].position.x < 300) pos = Input.touches[0].position;
                if (Input.touches[1].position.x < 300) pos = Input.touches[1].position;
            }
            if (pos.x < 300) return true;
            return false;
        }

パソコンはマウス1個なのでtouchCountは0なので、Input.mousePositionがposに入ります。
スマホの場合、1点押しなら、PCと同様の流れですが、
左手で1点おさえながら、同時に右手で1点押さえると、touchCountが2になるので、それぞれのざ行を見て、300より左なら左パッド、右なら右パッドって感じで区別します。
解像度は横1024固定ですので。

これでパソコンでもスマホでも動きます。3点押しでも0と1を見て動きます。

m4a1の方は、どうやら、弾が自分に当たってたようです(爆
そりゃ弾が前に飛ばないから当たらないわ
ターゲットが離れてればいいんですが、ゾンビに接近した状態で、かつ銃身が長いので、起きる現象みたいで。
あと、弾のトリガーをめちゃくちゃ大きくしました。これでかなり当たりやすくなったので、
長距離狙撃もできそうです。
スマホは操作性が悪いので、パソコンだよ余裕すぎるぐらいのあたり判定で丁度いいと思います。

近接武器もかなりトリガーをでかくしましたが、斜めから見るので、武器が敵に届いているのかそもそも分かりにくいんですよね。
3Dゲームの宿命というか。
近接武器も、見えない弾が飛んで行って敵に当たるような仕組みを入れるべきかも。
オートフォーカスとか、色々と対策案はあるんでしょうけど。

navmeshのbakeがおかしい

f:id:yasu9780:20170407131224p:plain

階段の手前に穴があいたままふさがらない。
上にはなにも乗ってないのに。
一度clearしてbakeしなおしてもだめ。
staticなものが乗ったままでいると、文字通り焼き付いてしまっている模様( ゚Д゚)
clearが本当のclearじゃないのか?


あと、この木はNavgationStaticがOFFになっているので、NavMeshの対象にならないはずなのに
勝手に葉っぱがNavMeshになっている。
clearしてbakeしなおしても消えない

今使ってるのがUnity5.5.0f3なので、5.5.3をインストールしてみようかと思っている。

あと、今使っている5.5.0f3は頻繁にフリーズするし、navigationのbakeも昔よりかなり遅い。Occlusionのbakeもすごい遅い。
理由は解らない。



おそらく原因は以下の記事で書いてることだと思う
tsubakit1.hateblo.jp
staticflagを付けると、勝手にstatic_batchingもチェックが入りますが、Unityが勝手にmeshをコンバインしてしまって、
しかも、そのメッシュは移動できなくなります。

移動させてるのにNavMeshが誤動作しているのはおそらくこのせいでしょう。
勝手にコンバインして、戻す方法が無いとか意味が解らない。
大量にモデル配置してるのに、勝手にコンバインされて、もうぐちゃぐちゃです。ひどすぎる。

初めてのクラッシュレポート tgkillって何?

今までクラッシュが報告されたことは1回もなかったんですが、はじめて1件でました。
プライバシー配慮で一部略ですが、

java.lang.Error: FATAL EXCEPTION [main]
Unity version     : 5.5.0f3

Caused by: java.lang.Error: signal 6 (SIGABRT), code -6 (?), fault addr --------
Revision: '0'
pid: 12470, tid: 12490, name: UnityGfxDeviceW  >>> com.Meromsoft.SchoolGirlsSimulator <<<
    r0 00000000  r1 000030ca  r2 00000006  r3 00000000
    r4 00000006  r5 00000016  r6 000030ca  r7 0000010c
    r8 62b2e25c  r9 00000139  sl 00000007  fp 00000007
    ip fffffff4  sp 62b2e1f0  lr 400c00ad  pc 400cefe8  cpsr 6c69626f

	at libc.tgkill(tgkill:12)
	at libc.pthread_kill(pthread_kill:48)
	at libc.raise(raise:10)
	at libc.00011ff1(Native Method)
	at libc.abort(abort:4)
	at libvcos.vcos_pthreads_logging_assert(vcos_pthreads_logging_assert:128)
	at libGLES_java.khrn_interlock_transfer(khrn_interlock_transfer:98)
	at libGLES_java.glxx_hw_render_state_flush(glxx_hw_render_state_flush:2586)
	at libGLES_java.khrn_render_state_flush(khrn_render_state_flush:68)
	at libGLES_java.khrn_interlock_write(khrn_interlock_write:110)
	at libGLES_java.glxx_hw_start_frame_internal(glxx_hw_start_frame_internal:242)
	at libGLES_java.glxx_install_framebuffer(glxx_install_framebuffer:700)
	at libGLES_java.glintDrawElements_impl(glintDrawElements_impl:510)
	at libGLES_java.0006a2f3(Native Method)
	at libGLES_java.glDrawElements(glDrawElements:116)
	at libunity.005130e0(Native Method)
	at libunity.004fd55c(Native Method)
	at libunity.004ffdc0(Native Method)
	at libunity.004fa190(Native Method)
	at libunity.0038b754(Native Method)
	at libc.__thread_entry(__thread_entry:72)
	at libc.pthread_create(pthread_create:240)

よく解らないな。こういうときゲームエンジンだとブラックボックスで困る。
スレッドレベル並列処理関係の例外っぽい?

とりあえずlibc.tgkillでググる
DSAS開発者の部屋:Android NDKで使えないシステムコール・ライブラリ関数一覧
>NDKのlibcには存在しないためリンクエラーになるシステムコール一覧
>tgkill(2) - スレッドにシグナルを送る

 NDKのせいか?
 スレッドにシグナル送るぐらいの処理すらないとか意味が解らない。

 たいして速くなってないのにクラッシュ誘発するんじゃIL2CPP使えないな。
 次回からIL2CPPはやめるかな。
 いづれにせよ、自分で再現できないんじじゃ対策できないよな


Unity Android でよく見かけるクラッシュログを読んでみよう | クリエイターブログ

カイロソフトの研究

ガラケー自体からの老舗ゲーム会社に新宿のカイロソフトがあります。
まったく遊んだことはなかったのですが、ドット絵の有料アプリゲームメーカーとして有名です。
ドット絵に別に愛着はないのですが、経営シミュレーションに興味があるので、試しに遊んでみました(遊んでいる)。
ゆけむり温泉郷パドック2をやっています。それぞれ、温泉宿とレーシングチームの経営シミュレーションです。


温泉郷
f:id:yasu9780:20170405101656j:plain

パドック
f:id:yasu9780:20170405101700j:plain

※画像はネットからひろったもの

  • 共通点

箱庭的なマップに、施設を配置する
施設には相性があり、近くに相性が良いものを設置すると性能が上がる
道に隣接してないと施設は働かない
ファンという概念があり、サービスを提供することで増える
広報概念があり、ミニコミ誌などマスコミをつかって宣伝することで客が呼び込める


燃料を掘り出して貯蓄するという流れはクラッシュオブクランとも共通する流れ
車を改良すると燃料をより要求される

  • レースという勝負コンテンツ

パドック2はレースができる。
レースに勝ちたいという意思が、パーツを改良したいという気持ちを引き出す
故障していたらレースに出れない→レースに出たい→今すぐ故障を直したいので課金しよう
燃料が無い(燃料産生が遅い)→レースに出たい→燃料買おう

温泉郷はレース的な勝負がないので、なにか課金してまでやろうというモチベーションが出てこない気がする

  • クラッシュオブクランと比較

クラッシュオブクランと比較して、大きく違うと感じるのは、
広報という概念。あとファンの存在

例えばパドック2では、レース後にファンが感動して差し入れを宅急便で送ってくる
温泉郷では、客が帰るときにフロントで「良かったよ」と一言ほめて帰っていく
イベントなどセリフで交流してくる仕組みが、日本的なゲーム性を感じさせる。


ドット絵に関しては温かみを感じるといった評価がある一方で、マップを反対方向から見て確認したいという要望もあり、そこには答えられない。
また、ドット絵は作るのにすごい手間がかかる。回転もできない。拡大すると絵が荒くなる。

クラッシュオブクランは、3Dモデルをキャプチャーして2D絵として表示している。これにより大量のキャラを高速表示できている。

  • 仮想通貨GP

仮想通貨GPは、主に時短に使用できる。これはソーシャルゲームでよくある使い方。
施設をアップグレード中に、時間短縮に要求される。
また、くじ引きにも使用できる(プレミアガチャ)

リワード動画広告を閲覧することでGPが4もらえる。
ちんどん屋をクリックすると動画が見れるという仕組みは遊び心がある。

  • ソーシャル連携

フレンドを増やすとオーブがもらえる
自分の番号を示して追加してもらうほか、ゲーム起動時にフレンド申請をさせる仕組みがある。
別にGreeやモバゲーに加入しないでも、独自にフレンドを増やすしくみがある
フレンドを増やすことにリワードがあり、ユーザーを増やす意味がある。
ただ、フレンドのゲーム画面を見たりはできない模様。
DMMのもう終了したゲームのクイズオブワルキューレもフレンドがあったが、ファンのデッキを見るといった仕組みがなかった(それくらいでなぜないの?)

部活の時間にテニス部がボールを蹴って遊ぶ

www.youtube.com

テニス部の部員がボールを蹴って互いにパスしあうようにしました。
プレイヤーも参加できます。
もうちょっと調整する必要があるかな。
次回のアップデートで仕様を追加します。


仕組み自体は、テニス部員の中で一番のボールに近い部員がボールにかけよっていって
追いついたら別の部員の方向にボールを蹴るってだけです
部員だけじゃなくて、プレイヤーの方向にも蹴ってきます。
(それサッカー部じゃん)


今はテニス部だけですが、プールの中にもボールを置いておいて、
水泳部もボール遊びするようにしようと思います
(それ水球部じゃん)


yasu9780.hatenablog.com

ペットの猫を追加

ペットの猫を追加。
基本、ついてきますが、自宅から離れすぎると自宅に戻っていきます。
猫は家に付くといいますしね( ゚Д゚)
まだ、それだけですが、いづれは餌をやれるようにしたい。
プログラム的にはなにも変わったことはやってないですね。
navmeshAgentで追いかけるか、部屋に戻るかのいづれか。
アセットは$2ぐらいでした。$10でリアルバージョンもありましたが、これで十分かな。アニメーションがものすごいたくさんついてきます。
猫じゃらしで遊ぶモーションもあるのでそのへんもいつか組み込みたい。


二人の方からゾンビが不評なので、ゾンビなしでゲームスタートするモードを追加しました。
tbhは正直言えばの略語らしいです。英語の勉強になりますね( ゚Д゚)

Please don't add zombies here Plssss

The graphics are amazing the game is great 
but its hard to control and the zombie makes it really irritating ,
 please respond or react to this comment
 I just don't like the zombie tbh

設定でゾンビ発生数0/hに設定すると環境情報は保存されるので、次回からはゾンビが出てこないのですが、
初めてプレイする場合は、ゾンビいるといらいらするという気持ちも分かるので。

That's my 2 game in the world

I want to marry this game. This game is beautiful.

このへんのお褒めの言葉はモチベーションが上がりますね!('ω')


類似コンテンツにツンデレシミュレーター2が出るようになったので、ユーザー層が被り始めているようです。
ツンデレシミュレーター2側の類似コンテンツで表示されるようになると、非常にありがたいのですが( ゚Д゚)
まだ出てないようです。

f:id:yasu9780:20170403143035p:plain