神代クロ のすべての投稿

スターウォーズ/フォースの覚醒を見た(ネタバレ)

starwars7スター・ウォーズ/フォースの覚醒をAmazonビデオで見ました。

5月4日はスターウォーズの日だしね。

前知識全く無しで見始めたけど、過去のエピソードをなぞってるなあと思いました。帝国vsレジスタンスや、身内の暗黒面堕ち、ドロイドに情報託したり、デススターの大型版スターキラーのコア破壊に、親子対決など。

最初、裏切り者ストームトルーパーのフィン(FN-2187)が主人公なのかと思ってたけど、レイの方が主人公なんだね。女性が主人公でも黒人が主人公でも珍しいと思うけど。

ハン・ソロ懐かしい。老けたけど、あんまり変わってないなあ。相変わらず密輸業者やってるし。しかし息子(ベン)がダースベイダーに傾倒しだしたからルーク・スカイウォーカーに預けたら、ルークの弟子を皆殺しにして暗黒面に堕ちたとか悲惨すぎる。終盤でソロ自身も息子に殺されちゃうし。洋画って前作の主要キャラ躊躇なく殺すよね。

ルークは傷心の旅に出てるのに、その行き先の地図があのかよ!って吹いたけど、実はジェダイの遺跡を探しに行ってたんだね。ルークにはまだオビワンやヨーダが憑いてるんだろうか。

ポー生きててよかった。序盤で活躍したのにそれっきりだと寂しいしね。

BB-8可愛かった。ダルマみたいな形状だけど、なんか必死に走ってる感が良かった。

そういえばフィンもレイも普通にライトセーバー使えてて、なんか有り難みが薄いね。しかもいきなりレン(ベン)と対等にやり合えてるし。まあレンは前半は迷いが、後半はチューバッカに付けられた傷があったからでもあるけど。ともかくこの2人が新たなジェダイになっていくのか。

宇宙船同士のバトルは迫力あってよかった。後で見返そう。

まとめ

正直、スターウォーズでなくても成り立つストーリーではあったかな。ルークが戻ってくる次回以降に期待。

スター・ウォーズ/フォースの覚醒 [Blu-ray]

Unityで作成したスマホアプリの軽量化方法11個

スマホゲーム(Android版)を作成した時に行なった軽量化の方法です。

アプリサイズの軽量化(容量削減)と処理速度の軽量化(高速化)があるけど、ごっちゃに書いてます。とりあえず忘れないためのメモとして。

Unity5.3.xです。

指標

●アプリサイズ確認方法(Windows)
C:\Users\(username)\AppData\Local\Unity\Editor\Editor.log
ビルドすると使用ファイル1つ1つのサイズまで記録される。使ってないアセットや画像が入ってないかもチェック。

●実行速度など確認方法
デバッグ実行中にエディターのGameタブにあるStatsをクリック。ここに表示されるFPSなどで速度をチェック。あとSetPassを減らすのが高速化への道。マテリアルをまとめると減るらしい。

1.スカイボックスのサイズ縮小

使用したスカイボックスがモバイル用ではなかったので、テクスチャの設定で縮小しました。あと床はどうせ見えないので、床テクスチャを削除。

スカイボックスは2種類使っていて、それぞれテクスチャを6枚→5枚に減らし、4MB→1MBに縮小したので、合計48MB→10MB!(圧縮前サイズ)

容量的にこれがいちばん効果あった。まあ、そもそもモバイルでスカイボックス使うべきじゃないけど。

2.動かないオブジェクトをStaticにする

処理削減で高速化します。

3.画像サイズを4の倍数にする

これ最初知らなかった。4の倍数にしないと画像が圧縮されません。

4.画像をシーン毎にSprite Packerでまとめる

Sprite PackerはかつてPro版にしかなかった機能で、スプライトのグループを指定すれば自動でまとめてくれる便利なやつです。大量にある画像を1つずつちまちま読み込むような無駄がなくなります。

SetPassもこれで減ります。

5.画像のミップマップを生成しない

GUI用の画像はミップマップ生成すると画質がガタガタになっちゃうので。そして生成するとその分容量も増えちゃうので。

6.GameObject.Find()をキャッシュする

Find()関数は重たいので、Update()の中でいちいちFind()呼ぶのは良くないみたい。なのであらかじめStart()の中でFind()して、その結果を変数に入れて(キャッシュして)、それをUpdate()で使います。

GetCommpornent()関数も重いらしいけど、今回はキャッシュしなかった。

7.フレームレートを30fpsにする

うちの古いノートPCだとフレームレート自動にしたらファンが唸りだすので、スマホでもフレームレート落としたほうがバッテリー節約されるはず。

Application.targetFrameRate = 30;

なんか自動のままの方がバッテリーに優しいと書いてる記事も見かけたけど気にしない。

8.解像度を下げる

スマホでキャプチャ撮ったら画像でかくてびびった。解像度が高ければその分描画処理も重くなるので、見栄えに影響ない程度に解像度を下げました。

具体的にはuGUIのCanvasとScreen.SetResolution()の両方とも1280×720にした。

9.影はハードシャドウを使う

ソフトシャドウよりハードシャドウの方が軽いです。

影は他にもShadow Resolution(解像度)やShadow Distance(距離)など影響ありそうなパラメータが多いです。

10.ベイク

ベイクすれば影の処理をゴッソリ軽減できるけど、今回のゲームはマップ自動生成なので使えず。ただ意外とベイクは容量食う。

11.SSAO使わない

うっかり使っちゃったのは俺だけか……結構解決するのに時間かかったんだけどね。

まとめ

やること多くて大変だ。たぶん他にももっとあるはず。

以下は公式から(2021/8/3)
モバイルゲームのパフォーマンスを最適化しよう:専門家が語るグラフィックスとアセットに関するヒント

MRTGでサーバー監視(さくらのVPS設定8)

mrtgMRTGを使ってサーバの状況をグラフィカルに確認します。昔からあるツールなので、見たことあるかも。

まあ、さくらのVPSには最初から同じような機能が付いてるから、わざわざ入れる必要ないんだけどね。

CentOS6.7です。

まずは必要なパッケージをインストール。

# yum install net-snmp net-snmp-utils mrtg

SNMP設定

SNMPの設定をしていきます。これが実際にサーバを監視するツールです。

# vi /etc/snmp/snmpd.conf

コメントアウト
com2sec notConfigUser   default       public
↓
#com2sec notConfigUser   default       public

有効化して書き換え
#com2sec local     localhost       COMMUNITY
#com2sec mynetwork NETWORK/24      COMMUNITY
↓
com2sec local     localhost       (任意の名前)
com2sec mynetwork 127.0.0.0/24    (任意の名前)

有効化
#group MyRWGroup  any        local
#group MyROGroup  any        mynetwork
↓
group MyRWGroup  any        local
group MyROGroup  any        mynetwork

有効化
#view all    included  .1                               80
↓
view all    included  .1                               80

有効化して書き換え
#access MyROGroup ""      any       noauth    0      all    none   none
#access MyRWGroup ""      any       noauth    0      all    all    all
↓
access MyROGroup ""      any       noauth    exact  all    none   none
access MyRWGroup ""      any       noauth    exact  all    all    all

SNMPを起動します。

# service snmpd start
# chkconfig snmpd on

動作確認します。エラーとか出てなければOK。

# snmpwalk -v2c -c (任意の名前) localhost system

設定ファイルに反映させます。

# cfgmaker (任意の名前)@127.0.0.1 > /etc/mrtg/mrtg.cfg

MRTG設定

MRTGの設定をしていきます。これはSNMPの結果などをグラフィカルに表示してくれます。

# vi /etc/mrtg/mrtg.cfg

有効化して任意のパスに書き換え
# WorkDir: /home/http/mrtg
↓
WorkDir: /var/www/mrtg

有効化
# Options[_]: growright, bits
↓
Options[_]: growright, bits

末尾に以下を全部追加。おまじない。

# トラフィック量
Target[eth0]: 1:(任意の名前)@127.0.0.1:
SetEnv[eth0]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
MaxBytes[eth0]: 12500000
Title[eth0]: eth0 -- centos
PageTop[eth0]: <h1>eth0</h1>

# CPU使用率
Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:(任意の名前)@127.0.0.1
MaxBytes[cpu]: 100
Unscaled[cpu]: dwmy
Options[cpu]: gauge, absolute, growright, noinfo, nopercent
YLegend[cpu]: CPU Load(%)
ShortLegend[cpu]: (%)
LegendI[cpu]: 1 min CPU Load Average
LegendO[cpu]: 5 min CPU Load Average
Legend1[cpu]: 1 min CPU Load Average(%)
Legend2[cpu]: 5 min CPU Load Average(%)
Title[cpu]: CPU Load Average
PageTop[cpu]: <H1>CPU Load Average</H1>

# メモリ使用量
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:(任意の名前)@127.0.0.1
# Mem total
MaxBytes1[mem]: 1937120
# Swap total
MaxBytes2[mem]: 8191992
Unscaled[mem]: dwmy
Options[mem]: gauge, absolute, growright, noinfo
YLegend[mem]: Mem Free(Bytes)
ShortLegend[mem]: Bytes
kilo[mem]: 1024
kMG[mem]: k,M,G,T,P
LegendI[mem]: Real
LegendO[mem]: Swap
Legend1[mem]: Real Memory[MBytes]
Legend2[mem]: Swap Memory[MBytes]
Title[mem]: Memory Used
PageTop[mem]: <H1>Memory Used</H1>

設定が完了したので手作業で3回実行します。データが3つ以上ないと表示されないらしいので。

# env LANG=C mrtg /etc/mrtg/mrtg.cfg
# env LANG=C mrtg /etc/mrtg/mrtg.cfg
# env LANG=C mrtg /etc/mrtg/mrtg.cfg

mrtg.cfgで指定した任意のパスにインデックスページを作成します。

# indexmaker --columns=1 /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html

デフォではWebからアクセス出来ないようになっているので、アクセス許可します。

# vi /etc/httpd/conf.d/mrtg.conf

Alias /mrtg /var/www/mrtg

↓とりあえずAllow from ALLを追加した
<Location /mrtg>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ALL
    Allow from ::1
</Location>

設定完了したのでApache再起動します。

# service httpd restart

以下のURLからサーバ状況が確認できるようになりました。5分おきに更新されます。

http://www????.sakura.ne.jp/mrtg/

ちなみに、cronの設定はここにありました。

/etc/cron.d/mrtg

デスクトップパソコンDELL XPS 8900買った

xps8900いま使っているXPS 8300が購入から4年半経っていて、結構重たかったりするので、買い換えることにしました。

同じXPSシリーズの8900です。カスタマイズしたせいか、注文から到着まで11日間もかかったよ。

スペック

CPU:Core i7-6700K 4.2GHz
MEM:24Gbyte
GPU:NVIDIA GeForce GTX 960 2GB
SSD:256GB + HDD:2TB
DRV:ブルーレイディスクドライブ
WLAN:802.11ac
OS:Windows10 Home 64bit

CPUは4世代後のに、メモリは2倍に、GPUはRadeonの1GBからGeForceの2GBに、ハードディスクはSSDとのデュアルに、Windowsは7から10になりました。

あとデスクトップなのになぜかWi-Fiが付いてるw 今はLANケーブルでつないでるけど、そういえばWi-Fiの方が速度早かったな……

使ってみた

前のPCからデータやらライセンスやらを取り出して、新しいPCに入れていきました。設定完了するまでやっぱり半日くらいかかったよ。

起動直後にアプリが3回連続で落ちて、なんだこの不安定なのは! と思ったけど、それ以降安定してる。よくわからないけど大丈夫そうかな。

Windows 10使うのは初めてだけど(仮想環境ではちょっと触った)、特に使いづらいとかはないね。スタートボタンとか滅多に触らないし。

ただフォントが汚い。設定で変えれるところは変えたけど、そのうち全部変える。

起動が早くなった。買ったばかりだから当然なんだけど、今回はSSDを入れたので、今後もずっと軽いはず。今までのPCは動作が安定するまで起動から10分くらいかかったからね(汗)

GPUも性能アップしてるので、SteamとかのPCゲーが捗りそうだ。

ちょっと高かったけど、これで気持よくPCが使えます。

3D迷路を探索するスマホゲームを公開!

03だいぶ時間かかりましたが、ようやくスマホゲームが完成したので、公開しました。

ゲーム内容は動画を上げたので見てみて下さい。迷路をひたすら走る、シンプルなゲームです。

プレイ動画

開発経緯

おととしくらいからちまちまUnityを触っていて、横スクロールのアクションゲームがカタチになりつつありました。その頃の開発状況はこちら。しかし、何人かの知り合いに見せたところ、なぜかみんな「スーパーマリオ?」とか言うので作るの止めたw

そんな訳で他のジャンルのゲームを作ることに。色々考えて3D迷路に決めました。簡単そうだし。 ……簡単じゃなかったけどね。

ゲーム開発はもちろん、アプリを公開する手続きがよくわからず何度もビルドし直したり、プレイ動画を作成してYouTubeに投稿したり、初めてのことが多くて結構時間かかっちゃいました。

ともかく

完成したので、よろしければプレイしてみて下さい。完全無料です。

https://play.google.com/store/apps/details?id=com.yagasuri_games.rabbitmaze

Let’s Encryptで無料SSL(さくらのVPS設定7)

今日、こんなニュースを見かけました。
「Let’s Encrypt」、無料TLS証明書の発行数が100万件を突破

Let’s Encryptは無料でサイトをSSL化できるサービスです。そういえば試してみようと思いつつ忘れてたよ。いい機会なので使ってみました。

サーバはCentOS6.5のApache2.2です。

利用方法

Let’s Encrypt の使い方というサイトを見ればやり方載ってるけど、いちおう書いてみる。

まずはインストール。

# git clone https://github.com/letsencrypt/letsencrypt
# cd letsencrypt/
# ./letsencrypt-auto --help

webサーバを一旦を止めて、Port80経由でドメイン所有者だと認めてもらいます。それからメールアドレス登録と利用規約への同意。

# service httpd stop
# ./letsencrypt-auto certonly -a standalone -d (ドメイン名)

これで証明書が発行されたので、webサーバに設定します。

# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:443

<virtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/(ドメイン名)/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/(ドメイン名)/privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/(ドメイン名)/chain.pem
    ServerAdmin webmaster@(ドメイン名)
    DocumentRoot /home/(ユーザー名)/public_html
    ServerName (ドメイン名)
    ErrorLog logs/(ドメイン名)-error_log
    CustomLog logs/(ドメイン名)-access_log common
</VirtualHost>

こんな感じかな。念のため設定チェックしてからwebサーバ起動。

# httpd -t
# service httpd start

もう使えるようになった。簡単すぎる。

まとめ

仕事でSSL証明書扱ってますが、いちいちCSRとか作ったり、サイトで色々入力するのが面倒だったんだけど、このサービスだと自動生成だから良いね。

ただベータサービスだからなのか、証明書の期限が3ヶ月と短い。まあバッチ用意すれば自動で更新する事も可能なので、特に問題ないけど。

今回SSL化したサイトはそのうち公開します。

バレットガールズ クリア(ネタバレ)

bulletgirlsバレットガールズクリアしました。

これも積んでた1本。定価(6,800円)よりは安く買ったけど、今ならPSストアのセールで1,511円で買えてしまうという……

つい、イラストと3Dモデルの可愛さに惹かれて買っちゃったんだよね。

ストーリー

救護部に入るつもりだったは、入部届を間違えて出してしまい、レンジャー部に所属することに。救護部に転部するためには、レンジャー部で好成績を修めないといけない。そんな訳で転部のために頑張ることになります。でもこれって実質転部させないための決め事だよね。

ともかく部活動開始! と思ったら、いきなり「明日から夏休み」とか言い出してびっくりした。いくらなんでも置いてけぼりすぎるだろ……空白の数ヶ月間で人間関係の構築は既に終わっていて、部員たちと和気あいあいとしてるし、ポカーンとしたわ。

その後なんとなく人間関係は把握したけど、各キャラに対する思い入れは全然湧かなかったよ。

事あるごとに優理奈が嫌みを言ったり、ケンカをけしかけたりするのでムカつくなあと思ってたら、実は他校からのスパイで内部崩壊を狙ってましたとか言いだしてびっくりした。ただの嫌な女だと思ってたよ。

そんな優理奈をスパイから解放し、本当の仲間として迎えるために、部員たちが頑張るラストバトル。んーちょっとノリがついて行けなかったな。

戦闘システム

普通のTPSにちょっとお色気要素を入れたゲームなのかな? と思ってたら全然違った。お色気がメインだった。

戦闘で出来るアクション少ないし、武器も少ないし、マップも数種類しかない。さらにマップ内にほとんど障害物が無いので、戦術とか関係なしにお互い撃ちまくってやられまくる。途中で回避の重要性と、回避+攻撃のオートエイムが有用だと知って何とか進めるようになったけど、やっぱ単調だな。

敵は大抵3人1組で棒立ちしてて、隣で味方がやられてるのに棒立ちのままだったり。もしくは人間業とは思えない超スピードで走りだして攻撃してくる。この辺でゲーム性というのは諦めたよ。

敵を撃つと服が脱げていくというおバカなシステム。ちゃんと狙っていけば全裸にまでなるけど、大抵そのまえに倒してしまう。このバランスがゲーム性か、と思って頑張ってたら、実はバズーカや手榴弾で一発全裸になるという。頑張る必要なかった。

サポートキャラが選べるけど、何の意味があったのかわからず仕舞い。数十秒ごとに「お花を摘みに行ってました」とか言われてもね……

途中にあるスニーキングミッション。敵の視野の広さがわからず苦労した。一番ゲームオーバーになった任務だね。中庭を抜ける所で敵が目の前にいるのにどうすりゃいいんだ、と思ったら、普通に目の前を通り過ぎれたという……どうなってんだこれ。

尋問システム

戦闘任務をクリアすると尋問特訓が始まります。こっちはお色気というよりエロシーン

最初なにやればいいのかサッパリわからず時間切れになってたけど、アイテムを購入してそれで女の子をつつきまくるという、そういうエロゲでした。

スティックとボタン操作では間に合わないので、Vitaの液晶を手でタップしまくるのが良いみたい。すげー手が疲れるけど。

なかなかエロくて良かった。

まとめ

直前にキルゾーン:マーセナリーをプレイしてたので結構辛口になっちゃったけど、正直ゲームとしてはいまいちなデキです。

3Dモデルの出来は良いのに勿体ないね。

もうすぐ続編のバレットガールズ2が出るけど、同じようなものなら買わないな、と考えてたんだけど、なんかPV見るとちょっと面白そうで迷うw まあ様子見かな。

Fireタブレットを4000円引きで買った!

firetabletFire タブレット 8GB、ブラック買いました。昨年末から続いてるプライム会員限定の4,000円引きセールで4,980円です。

この値段ならKindleオーナーライブラリーを使えば4ヶ月ほどで元が取れる。あんまり読む本無いなあと思ってたけど、最近ラインナップ増えてきたみたいなので、まあ損はしないね。

実は既にKindleホワイト持ってるけど、処理が重かったり、解像度が低かったり、暗い所で使えなかったりで、最近全然触ってなかったんだよね。バッテリーの持ちは評価してるけど。

使用感

初期設定に20分くらいかかった。自動でやってくれるからいいけど、長いな。

普段iPad Airを使ってるせいか、縦長な形状に違和感。16:9だからこっちの方が一般的なんだけどね。あと小さいのに結構ずっしりくる重さ。

サクサク動作するので操作に不満なし。Amazonビデオ提供してるから当然だろうけど、動画再生しても処理落ちしない。思った以上に性能いいな。

ESファイルエクスプローラーがあったので使ってみたら、普通にWi-FiでNASに接続できるね。これでデータのやり取りも簡単だ。

ただバッテリーの減りが早い気がする。これは単に色々いじってるせいかな。

ちなみにこの第5世代FireタブレットのOSはAndroid 5.1.1相当らしい。

自作ゲームが……

NAS経由で、開発中のAndroidゲームをインストールしてみた。

ちゃんと処理落ちせず動作するんだけど、影がぐちゃぐちゃになってる。しばらくUnityの設定をいじってみたけど解決せず。何でだろう……

追々調べていこう。

まとめ

安いのにしっかりしたタブレットで良いね。本読む専用にと考えていたけど、アプリ入れていけば普通のタブレットとして使えそうだ。

Fire タブレット 8GB、ブラック

Unityでスクリプトから画像を読み込んで表示する【uGUI】

Unityで画像を表示するのは
GameObject>UI>Image
で簡単にできます。

ただ必要な画像を全部シーンに置いて行ったら邪魔になるので、C#で動的に作成してみようかなと。ちょっと手間取ったのでメモ。

Unity 5.3使ってます。

まずは器のゲームオブジェクトを作成。引数はオブジェクト名。

GameObject work_image = new GameObject("WorkImage");

作ったゲームオブジェクトをCanvasの子にします。これしないと表示されない。

work_image.transform.parent = GameObject.Find("Canvas").transform;

画像の位置(アンカーポジション)を追加して画面の真ん中にします。

work_image.AddComponent<RectTransform>().anchoredPosition = new Vector3(0, 0, 0);

縮尺がおかしいのでちゃんと等倍にする。

work_image.GetComponent<RectTransform>().localScale = new Vector3(1, 1, 1);

スプライト画像追加。ここではResourcesフォルダにあるcounterファイルから読み込み。ちょっと横着したけど、これ本当はスライスしたスプライトの塊なので、Resources.LoadAll()で中身全部取得してから、counter_0を追加ってやった方が良いね。

work_image.AddComponent<Image>().sprite = Resources.Load<Sprite>("counter");

アスペクト比は元の画像の比率を維持。

work_image.GetComponent<Image>().preserveAspect = true;

画像のサイズを元画像と同じサイズにする。

work_image.GetComponent<Image>().SetNativeSize();

これで画面の真ん中に画像(数字の0)が表示されました。ここまでできれば、後は普通に使えるね。

RTMからTodoistに乗り換えた

Remember The Milk

Todoリストは6年前からRemember The Milk(RTM)を使っていました。しかしこれ、全く進化しないんだよね。

不満点としては、スマホアプリが1日1回しか同期しない(無料版)。かと言ってサイトを直接見てもスマホ対応してないから見づらい。いまいち全体が把握しづらい。あとたまに半日以上メンテで繋がらなくなって困る。といったところ。

そんな訳で他のTodoリストを探してたんだけど、Todoistに乗り換えることに決めました。

Todoist

気に入った点としては、リストがカラフルで見やすい。初期画面に「期限切れ+7日間」が選べるので、直近の事が把握しやすい。スマホアプリがiOS、Android両方あって無料版でもちゃんと同期してくれる。日付が日本語で入力できるし、自動日付認識機能もあって入力が簡単。

ただ不満点もあって、プロジェクト内での表示が登録順?なので、いちいち「日付順に並び替え」をする必要がある。前日にある毎日繰り返しのタスクを完了させると、なぜか今日を飛ばして明日に入ってしまう。完了したタスクの日付が見えない(無料版)。とまあ結構多かったりします。

有料版にしかない機能は諦めるとして、使い勝手はそのうちアップデートで改善されるだろうと期待して使ってみます。