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

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

CentOS7のセキュリティ2

sshのport番号を変更して、かつ、接続できるipアドレスを自宅に限定したので
そっち方面からの接続は不可になったけど、
/var/log/httpd/error_logをみると、kerbynetとかいう脆弱性が報じられているスクリプトをつかって不正アクセスしようとしているやからがいる
そもそもそんなスクリプトはサーバー上に無いので意味がないのだけど
1日中アクセスを試みているらしい
whoisでip元を確認すると、MSのazureクラウド上かららしい。
こういう場合、クラウド業者にクレームを入れるべきなのかもしれないが、言語的にも面倒くさいね
ipアドレスでhttp接続を拒否するべきかとも思うけど、ipアドレス変えてきてもうざいから、ちょっと放置しとくか

[Thu Jul 30 07:45:51.849266 2020] [cgi:error] [pid 14177] [client 40.114.126.163:3968] script not found or unable to stat: /var/www/cgi-bin/kerbynet
[Thu Jul 30 07:50:40.872064 2020] [cgi:error] [pid 15389] [client 40.114.126.163:3968] script not found or unable to stat: /var/www/cgi-bin/kerbynet
[Thu Jul 30 07:50:41.867206 2020] [cgi:error] [pid 19691] [client 40.114.126.163:3969] script not found or unable to stat: /var/www/cgi-bin/kerbynet

IP	40.114.126.163
AS番号	AS8075 Microsoft Corporation
ISP	Microsoft Corporation
組織	Microsoft Azure Cloud (eastus)
国	United States

CentOSのセキュリティ

SGSの宝くじやゴーストで使用しているSakuraVPSの再設定を行った。

サーバーを停止していたのは、誰かにサーバーを乗っ取られて、管理会社から連絡が来たので止めていたのですが
OSインストールから設定をすべてやり直すが面倒で、長いこととめてました。
やっと環境を再設定しました。

もう誰も使ってないらしいKyotoTycoonを使っていたり、過去の遺物のなりつつあるPerlCGIを使っているので
ググっても情報が古すぎて、かなり失われている
OSがCentOS7になったことで、cpan関係のモジュール入れも非常に難航した

rootでcpanを入れると/root以下にモジュールが入りapacheから読めなくなる
一般ユーザーでログインしてsudoでcpanモジュールを入れる必要がある
/home/ユーザー名の.bashrcに/root/perl5にモージュールを入れる環境変数がセットされていたら
コメントにする必要がある

このへんはWEBから情報が失われつつあるので、自分で残して置かないと今度サーバーを乗っ取られたら復活できなくなる

ま、PHPなりPythonを覚えればいいんでしょうが、もう職業プログラマーになることはないので
いまさらWEB系を勉強し直すのもかったるい

というわけで、宝くじなどが復活したみたいですが、
また乗っ取られては困るので、セキュリティ関係をおさらいしてみた

まず重要なのは、yum updateを定期的に行ってOSのモジュールを最新に保つこと。これをサボると脆弱性バグが狙われる
あと、firewallで適切のポートを開いて管理すること。
SakuraVSP側もポート設定があるが、centos側もfirewallで管理する
以前は、iptablesで管理していたが、centOS7ではiptablesは廃止されて、firewalldになったらしい。
このへんも浦島太郎だった

/var/log/secureのログを見ると不正ログインの履歴が確認できるらしいので、見てみると
うわっ
一日中sshにログインしようとローテーションしている人がいるじゃないか
前回ののっとりもこの手法でやられたのかもしれない
IPの履歴を確認すると、中国とドイツ(ミュンヘンに住んでるウイルヘルムさんとwhoisにはあるが本人かどうかは不明)から何者かがログインしようとしている
パスワード以前にログインできるidが解らないだろうから、それを探しているようだ

まずはsshのポート番号をデフォルトから変更してみた
これでは犯人はポート番号がまず解らない状態になる
普段使わない場合は、sakuraVPS管理画面からSSHのポートは閉じておくべきだろう
使う時だけ開けば安全度は高まる

とりあえず/var/log/secureに不正ログインの履歴が残るは止まったようだ
セキュリティ系はほとんど知識がないので、実践あるのみかもしれない

某アプリ紹介サイトでシミュレーションゲーム新着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のもう終了したゲームのクイズオブワルキューレもフレンドがあったが、ファンのデッキを見るといった仕組みがなかった(それくらいでなぜないの?)