Python Q学習で迷路を解くプログラム作った(コード公開)
大学の講義の最終レポートとして作った。
参考サイトは以下の辺り。
1つめの参考サイトでQ学習についてざっくりと理解した上で、2つめの参考サイトで公開されてるコードを個人的に分かりやすいように改変した。参考サイトと違い可視化をしていない(ようなもの)のでかなりシンプルになっている。
詳細が気になる方はこれの解説をしたレポートを上げるのでDMなりコメント欄なりで連絡ください。
UE4 VPS上にSVNサーバを立ててUE4でソースコントロールしたい(構築編)
チーム開発ではバージョン管理が必須。UE4ではGitではなくSVNを使うのが一般的。そしてチーム開発していくならリポジトリをサーバーに公開し、アクセスできるようにしておかねばならない。一般的には個人でポート開放し、サーバを立てるのだろうが、私は今ポート開放が出来ない環境に住んでいる。そこで、レンタルサーバーを借りて、その上にSVNサーバーを立てることとした。
今回はその手順を二回に分けて説明する。
続きはこちら。
参考サイト
How to Install SVN Server on Ubuntu 16.04 & 14.04 LTS - TecAdmin
VPS契約+Linuxサーバー構築
今回はVPSに初期手数料のかからないConoHaを採用。別に他のVPSでも問題はない。多分。
今回はUbuntu 16.04、1GBプランで作業を進める。
Apacheをインストールする
rootでログインし、OSを更新してからapacheをインストール。
$ sudo apt-get update $ sudo apt-get install apache2
SVNサーバーをインストール
続いてSVNサーバーをインスールする。
$ sudo apt-get install subversion libapache2-mod-svn libapache2-svn libsvn-dev
apacheを再起動。
$ sudo a2enmod dav
$ sudo a2enmod dav_svn
$ sudo service apache2 restart
ここで人によってはsudo: unable to resolve hostが表示される。
その際はまず以下のコマンドで/etc/hostsを確認
$ sudo cat /etc/hosts sudo: unable to resolve host xxxxxx 127.0.0.1 localhost 127.0.1.1 hostname.domainname hostname . . .
この時表示されるxxxxxxを覚えておき、vimで /etc/hostsを編集。
127.0.1.1 hostname.domainname hostname
の直後に、
127.0.1.1 xxxxxx
を追加し上書き保存。
念の為catでちゃんと変更されているか確認しておく。
$ sudo cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 hostname.domainname hostname 127.0.1.1 xxxxxx . . .
これでsudo: unable to resolve hostは表示されなくなるはず。
Apacheの設定ファイルを書き換える
$ vim /etc/apache2/mods-enabled/dav_svn.conf
以下を入力し上書き保存する。
<Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location>
参考サイトでは
Alias /svn /var/lib/svn
としていたが、これを入力すると後々うまくいかない。理由はわからん。
SVNレポジトリの作成
$ sudo mkdir -p /var/lib/svn/ $ sudo svnadmin create /var/lib/svn/myrepo $ sudo chown -R www-data:www-data /var/lib/svn $ sudo chmod -R 775 /var/lib/svn
SVN用のユーザーを作成する
$ sudo htpasswd -cm /etc/apache2/dav_svn.passwd xxxxxx
xxxxxxはユーザー名。これを打つとパスワード入力が求められる。入力したパスワードがユーザー名と紐付けられる ほかにユーザーを追加したい時は、
$ sudo htpasswd -m /etc/apache2/dav_svn.passwd username
と入力する。
apacheを再起動。
$ sudo service apache2 restart
ブラウザで確認する
ブラウザでURL"http://(IPアドレス)/svn/UErepo"を検索し以下の画面が表示されれば成功。
続き。
GitHubアカウント取った/VS2017でリポジトリ作成時エラー
といっても昔大学の講義の時に取ってたのだが。当面はSiv3D/OpenSiv3Dでの開発に利用すると思う。
VS2017でリポジトリ作成時、以下のエラーメッセージが表示された。
リモート リポジトリの複製を作成中にエラーが発生しました: Git failed with a fatal error. unable to access 'github.com/ai2playgame/...…': SSL certificate problem: self signed certificate in certificate chain
一応このままでもgithub上にリポジトリ作成は出来ているのだがpushができなくなる。
解決するにはコマンドプロンプトに以下のコマンドを入力すればよい。
$ git config --global http.sslVerify false
後はこのサイトの指示に従えばちゃんとcommit出来るはず。
毎日1コミット続けていきたいなあ
UE4 GameModeとGameStateの罠
便利なGameModeとGameStateだが、少し引っかかったことがあったのでメモ。
GameModeBase継承クラスを作ってそれにGameState継承クラスを登録したら以下のようなエラーを吐いた。
LogGameState: Error: Mixing AGameState with AGameModeBase is not compatible. Change AGameModeBase subclass (BP_○○GameMode_C) to derive from AGameMode, or make both derive from Base
GameModeBaseクラスにGameState継承クラスを持たせることは出来ないらしい。つまりGameStateクラスを持つことが出来るのはGameModeBaseを継承したGameModeクラスだけだということ。図で表すとこんな感じ。
要注意。
UE4 Niagaraを触ってみる(4) StaticMeshの形にパーティクルをスポーンさせる②
続き。以下の記事を一通り進めた前提で話を進めるのでまだ見ていない方はそちらからどうぞ。
Lerpノードについて
Niagara Module Scriptを追加。ここではある0.0-1.0の入力を元にパーティクルの位置と色を線形に補間するモジュールを作成する。
ここでLerpノードに要注意。NiagaraのLerpノードは少し分かりづらい。
これがNiagara版Lerpノード。
これがマテリアルのLerpノード。
マテリアルで言うところのAlpha値は、NiagaraではCに相当する。最初見た時は分かり辛いので要注意。ここでは特に説明しないがNiagaraの算術演算系のノードはかなり癖のある見た目のものが多いので慣れが必要(ifとか)。
色と位置を線形補間するModule Scriptを作成する
全体図はこちら。
Map Getで
- Module.beforePos
- Module.afterPos
- Module.beforeColor
- Module.AfterColor
- Module.alpha
を追加。alphaでbefore ○○ と after ○○を線形補間する。
alpha値を0.0から1.0にClampし、その値で位置と色を線形補間(Lerp)。
こうして得た位置と色をParticles.Position、Particles.Colorに設定する。
Emitterの修正
前回記事で作成したEmitterを元に編集する。まず、以下のモジュールを削除。
- Particle -> Static Mesh Location
- Particle -> Color
続いて、Particle Spawnに2つ目のSample Static Meshを追加しStaticMeshを設定する。Niagaraでは同じモジュールが追加された時両者を区別するため001と言ったプレフィックスが自動で付く。
Particle Updateに先程作成したModuleを追加。まず、BeforeColorとAfterColorを設定。
beforePosにはSampleStaticMeshで取得したメッシュの位置を使い回したい。こういった時は画像の赤で囲った下三角マークをクリックし、Link Inputs -> Particle AttributeからInitial.SampleStaticMesh.MeshPositionを選択する。
これでSampleStaticMeshモジュールで取得したMeshPositionをそのままbeforePosに流用できる。
同じようにafterPosをInitial.SampleStaticMesh001.MeshPositionとリンクさせる。
alpha値はカーブで編集したい。青で囲んだ下三角マークをクリックしDynamic Inputs -> float from Curveを選択。これでalpha値をカーブに合わせて設定することが出来る。
ブログ用④ pic.twitter.com/TzgLUEIylq
— ai (@ai_9684_dct) July 22, 2018
完成!
おまけ
今のままではafterが上に表示されてしまい非常に分かりづらい。というわけでエミッター編集画面での表示順を変更する方法を。
Niagara Module Script編集画面のDetail->Variable MetaDataではパラメータに様々なメタデータを設定できる。そのうちのEditor Sort Priorityという数字はエミッター編集画面での表示優先順位を表しており、若い数字ほど上に表示される。もし同じ値の場合は名前の昇順で並び替えられる。
Editor Sort Priorityを設定してやれば、
この様に見やすく並び替えることが出来る。
UE4 Niagaraを触ってみる(4) StaticMeshの形にパーティクルをスポーンさせる①
YouTubeで見つけて以来ずっと作りたかったNiagaraエフェクトが出来た。
ブログ用① pic.twitter.com/BIK3aHSJK4
— ai (@ai_9684_dct) July 22, 2018
というわけで今回はこれの解説を。長くなるので記事を2回に分けて投稿。
環境
UE4.20.0
Sample Static Meshモジュールについて
Niagara Moduleとして予め用意してあるStaticMesh関連のモジュールはいくつかある。その内使用するのは"Sample Static Mesh"と"Static Mesh Location"。まずはこの2つがどのようなモジュールかをみていく。
Content Browserから Niagara Content -> Modules -> Spawn -> MeshInterfaces -> SampleStaticMeshで"Sample Static Mesh"の中身を見ることが出来る。
これが"Sample Static Mesh"の中身。
Map Getで Module.○○ ピンを追加するとエミッター編集画面でそのパラメータを編集することが出来る。
ここではModule.StaticMeshで取得したStaticMeshからそのMesh上のランダムな位置の法線、色、位置等の情報を取得し、それを "Particles.Module.Mesh○○" という形でMap Setしている。これで他のモジュールからParticles.SampleStaticMesh.Mesh○○という形で入力として与えたStaticMeshの情報を取得することが出来るようになる。
Static Mesh Locationモジュールについて
続いてStaticMeshLocationを見てみる。
全体図。ここでは全体は解説せず、必要な部分だけを抜き出して解説する。
Map GetでParitcles.SampleStaticMesh.MeshPosition、つまりSample Staic Meshの入力として与えたStaticMesh表面の位置等を取得している。
ごちゃごちゃ色々な処理が書かれているが重要なのは赤で囲んだ部分だけ。コメントで囲まれた部分で調整されたParitcles.SampleStaticMesh.MeshPositionをParticles.Position、つまりパーティクルそのものの位置としてSetしている。
StaticMeshの形にパーティクルをスポーンさせる
Niagara Emitterを新規作成。不要な以下のモジュールを削除する。
- Paritcle Spawn -> Add Velocity
- Particle Spawn -> Sphere Location
- Particle Update -> Acceleration Force
続いてParticle Spawnに"Sample Static Module"と"Static Mesh Location"モジュールを追加する。この時追加する順番を間違えないように。
Sample Static MeshのStatic Meshパラメータに好きなメッシュを設定する。今回はスターターコンテンツに入っている椅子を設定した。
ブログ用② pic.twitter.com/v2DCZZqYr9
— ai (@ai_9684_dct) July 22, 2018
分かりづらいが椅子の形にパーティクルが配置されている。ただこれでは分かりづらいので次の項でパラメータを調整していく。
パラメータを調整する
今のままでは何度もパーティクルがスポーンされて良くない。最初に一回だけポンと出現させて消えてほしい。
これには"Spanw Burst Instantaneous" モジュールを使うとよい。CascadeのSpawnモジュール、にあったBurstに相当するものでSpawn Countに与えた数だけ最初にパーティクルをスポーンさせる。
Emitter Update -> Spawn Rateを削除し"Burst..."モジュールを追加。Spawn Countを2000に設定する。
ブログ用③ pic.twitter.com/WJBnk8UT4z
— ai (@ai_9684_dct) July 22, 2018
何度もBurstが繰り返されてしまっている。今回は1回だけBurstして終わってほしい。これはEmitter Update->Emitter Life CycleのMaxLoopCountを1に設定すればよい。こうすると、NextLoopDurationだけ時間が経過すると自動で終了するようになる。
Particle Spawn -> Set VariablesでLifetimeとSpriteSizeを変更することでパーティクルの寿命、サイズを設定することが出来る。今回は画像の様に値を設定する。
最後に色を設定する。色はParitlce Update -> Colorで設定されている。
赤で囲んだアイコンをクリックすると見慣れたカーブ編集画面に移ることが出来る。カーブエディタで好きな色に設定する(4.20.0時点でカーブエディタはかなり不安定なので注意。私はクラッシュした)。
これで完成。
ここまで理解できれば後はそこまで難しくない。続きは次の記事で。
UE4.20がやってきた
待望のUE4.20正式版公開。今回はFortnite由来の機能が沢山追加されたらしく。シーケンサー周りは相当改善されたらしい。しかし私はシーケンサーナニモワカラナイのでこの辺はあまり関係が無く、一番はNiagaraが漸くアーリーアクセスとなったことが大きい。これまでブログでは4.20のPreview版でNiagaraを使ってきたが今後は最新版が公開される度それを使っていく予定。
で、4.20でNiagaraを使ってみたところ問題発見。
4.20にもSelected Emitter Glaph表示させるオプションあらへんやんけ #UE4 pic.twitter.com/cQWxBXbMUz
— ai (@ai_9684_dct) July 18, 2018
Niagaraがβ版だった頃の4.19にはあったはずのSelected Emitter Graphを表示させるオプションが消えている。Preview版でもこの問題があり、正式版になったら治るかなーと思ってたら治っておらず。Selected Emitter Graphはデフォルトで表示されているので消してしまわなければ問題はないのだが。早めに直してほしいところ。
4.20とは直接関係ないが、面白いものが公開された。
ラーニング教材としてActionRPGが登場。Inifinity Bladeの素材を使ったスマホ向けのハックアンドスラッシュゲーム。なんとGoogle Play, Apple StoreでもDLして遊ぶことが出来る。
BPとC++の両方を使って開発されている。GameState, DataTable,UIなどなど、比較的情報の少ない機能もしっかり使われており、勉強になりそうな予感。特にC++を使ったサンプルは希少なのでこれからゲームを作る時にとても参考にすることになりそう。