Gaming Life

一日24時間、ゲームは10時間

UE4 VPS上にSVNサーバを立ててUE4でソースコントロールしたい(コミット編)

 続き。

ai-gaminglife.hatenablog.com

 前回でレポジトリの作成と公開ができた。今度はこのリポジトリUE4プロジェクトを追加して、ソースコントロールに繋ぐ。

TortoiseSVNをDLする

 TortoiseSVNの最新バージョンを以下のリンクからDLし、インストールする。

tortoisesvn.net

UE4プロジェクトをチェックアウト&コミットする

 予めバージョン管理したいUE4プロジェクトを作成しておく。エクスプローラーからそのプロジェクトが入っているディレクトリに移動し、その上で右クリック→SVNチェックアウトを行う。

 この時リポジトリのURLにはブラウザでSVNリポジトリを確認する時使ったURLをコピペする。"空でないフォルダーにチェックアウトする"などと警告が出るが無視すればよい。

f:id:ai_gaminglife:20180731103544p:plain

 続けて右クリック→SVNコミットを選択し、プロジェクト全体をリポジトリにコミットする。

ソースコントロールに接続

 ここまで終わったらUE4でプロジェクトを開く。ツールバーからソースコントロールを開き、

  • プロバイダを「Subversion
  • Repositoryを「ブラウザで確認した時に使ったレポジトリのURL」
  • User Name、Passwordを「sudo htpasswdで設定したユーザー名、パスワード」

として設定を承認する。

f:id:ai_gaminglife:20180731103616p:plain

 画像のようにソースコントロールの横に緑色のアイコンが表示されたら成功。

f:id:ai_gaminglife:20180731103634p:plain

他のPCと共同作業する時

 他のPCと共同作業したい時はまず、VPS上のUbuntuで以下のコマンドを叩く。

$ sudo htpasswd -m /etc/apache2/dav_svn.passwd username
$ sudo service apache2 restart

 これでユーザーを新規追加することが出来る。共同作業するメンバーにそれぞれこのユーザーを割り振るとよい。

 共同作業に参加する人はエクスプローラーのどこでもいいので右クリック→SVNチェックアウトを選択。そうすると自動的にリポジトリに上がっているプロジェクトがダウンロードされる。

 ここまでできたら後はプロジェクトを起動して同様にソースコントロールに接続するだけ。

まとめ

 VPS契約というお金のかかる方法だが、自宅でサーバ構築して運用する時も電気代がかかることを考えればそこまで差はないと思う。

 UE4でチーム制作をする時は是非この方法で上手くソース管理をしてみてほしい。

Python Q学習で迷路を解くプログラム作った(コード公開)

 大学の講義の最終レポートとして作った。

github.com

 参考サイトは以下の辺り。

qiita.com

qiita.com

 1つめの参考サイトでQ学習についてざっくりと理解した上で、2つめの参考サイトで公開されてるコードを個人的に分かりやすいように改変した。参考サイトと違い可視化をしていない(ようなもの)のでかなりシンプルになっている。

 詳細が気になる方はこれの解説をしたレポートを上げるのでDMなりコメント欄なりで連絡ください。

UE4 VPS上にSVNサーバを立ててUE4でソースコントロールしたい(構築編)

 チーム開発ではバージョン管理が必須。UE4ではGitではなくSVNを使うのが一般的。そしてチーム開発していくならリポジトリをサーバーに公開し、アクセスできるようにしておかねばならない。一般的には個人でポート開放し、サーバを立てるのだろうが、私は今ポート開放が出来ない環境に住んでいる。そこで、レンタルサーバーを借りて、その上にSVNサーバーを立てることとした。

 今回はその手順を二回に分けて説明する。

続きはこちら。

ai-gaminglife.hatenablog.com

参考サイト

How to Install SVN Server on Ubuntu 16.04 & 14.04 LTS - TecAdmin

qiita.com

VPS契約+Linuxサーバー構築

 今回はVPSに初期手数料のかからないConoHaを採用。別に他のVPSでも問題はない。多分。

https://www.conoha.jp/

 今回は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"を検索し以下の画面が表示されれば成功。

f:id:ai_gaminglife:20180727170702p:plain

続き。

ai-gaminglife.hatenablog.com

GitHubアカウント取った/VS2017でリポジトリ作成時エラー

 といっても昔大学の講義の時に取ってたのだが。当面はSiv3D/OpenSiv3Dでの開発に利用すると思う。

github.com


 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出来るはず。

qiita.com

 毎日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クラスだけだということ。図で表すとこんな感じ。

f:id:ai_gaminglife:20180723115826p:plain

 要注意。

UE4 Niagaraを触ってみる(4) StaticMeshの形にパーティクルをスポーンさせる②

f:id:ai_gaminglife:20180722114904p:plain

続き。以下の記事を一通り進めた前提で話を進めるのでまだ見ていない方はそちらからどうぞ。

ai-gaminglife.hatenablog.com

Lerpノードについて

 Niagara Module Scriptを追加。ここではある0.0-1.0の入力を元にパーティクルの位置と色を線形に補間するモジュールを作成する。

 ここでLerpノードに要注意。NiagaraのLerpノードは少し分かりづらい。

f:id:ai_gaminglife:20180722114932p:plain

 これがNiagara版Lerpノード。

f:id:ai_gaminglife:20180722114939p:plain

 これがマテリアルのLerpノード。

 マテリアルで言うところのAlpha値は、NiagaraではCに相当する。最初見た時は分かり辛いので要注意。ここでは特に説明しないがNiagaraの算術演算系のノードはかなり癖のある見た目のものが多いので慣れが必要(ifとか)。

色と位置を線形補間するModule Scriptを作成する

 全体図はこちら。

f:id:ai_gaminglife:20180722114948p:plainf:id:ai_gaminglife:20180722114952p:plain

 Map Getで

  • Module.beforePos
  • Module.afterPos
  • Module.beforeColor
  • Module.AfterColor
  • Module.alpha

を追加。alphaでbefore ○○ と after ○○を線形補間する。

f:id:ai_gaminglife:20180722115000p:plain

 alpha値を0.0から1.0にClampし、その値で位置と色を線形補間(Lerp)。

f:id:ai_gaminglife:20180722115008p:plain

 こうして得た位置と色を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を設定。

f:id:ai_gaminglife:20180722115015p:plain

 beforePosにはSampleStaticMeshで取得したメッシュの位置を使い回したい。こういった時は画像の赤で囲った下三角マークをクリックし、Link Inputs -> Particle AttributeからInitial.SampleStaticMesh.MeshPositionを選択する。

 これでSampleStaticMeshモジュールで取得したMeshPositionをそのままbeforePosに流用できる。

 同じようにafterPosをInitial.SampleStaticMesh001.MeshPositionとリンクさせる。

 alpha値はカーブで編集したい。青で囲んだ下三角マークをクリックしDynamic Inputs -> float from Curveを選択。これでalpha値をカーブに合わせて設定することが出来る。

 完成!

おまけ

f:id:ai_gaminglife:20180722115047p:plain

 今のままではafterが上に表示されてしまい非常に分かりづらい。というわけでエミッター編集画面での表示順を変更する方法を。

f:id:ai_gaminglife:20180722115055p:plain

 Niagara Module Script編集画面のDetail->Variable MetaDataではパラメータに様々なメタデータを設定できる。そのうちのEditor Sort Priorityという数字はエミッター編集画面での表示優先順位を表しており、若い数字ほど上に表示される。もし同じ値の場合は名前の昇順で並び替えられる。

 Editor Sort Priorityを設定してやれば、

f:id:ai_gaminglife:20180722115104p:plain

 この様に見やすく並び替えることが出来る。

UE4 Niagaraを触ってみる(4) StaticMeshの形にパーティクルをスポーンさせる①

 YouTubeで見つけて以来ずっと作りたかったNiagaraエフェクトが出来た。

 というわけで今回はこれの解説を。長くなるので記事を2回に分けて投稿。

ai-gaminglife.hatenablog.com

環境

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"の中身を見ることが出来る。

f:id:ai_gaminglife:20180722114414p:plain

 これが"Sample Static Mesh"の中身。

 Map Getで Module.○○ ピンを追加するとエミッター編集画面でそのパラメータを編集することが出来る。

 ここではModule.StaticMeshで取得したStaticMeshからそのMesh上のランダムな位置の法線、色、位置等の情報を取得し、それを "Particles.Module.Mesh○○" という形でMap Setしている。これで他のモジュールからParticles.SampleStaticMesh.Mesh○○という形で入力として与えたStaticMeshの情報を取得することが出来るようになる。

Static Mesh Locationモジュールについて

 続いてStaticMeshLocationを見てみる。

f:id:ai_gaminglife:20180722114425p:plain

全体図。ここでは全体は解説せず、必要な部分だけを抜き出して解説する。

f:id:ai_gaminglife:20180722114508p:plain

 Map GetでParitcles.SampleStaticMesh.MeshPosition、つまりSample Staic Meshの入力として与えたStaticMesh表面の位置等を取得している。

f:id:ai_gaminglife:20180722114518p:plain

 ごちゃごちゃ色々な処理が書かれているが重要なのは赤で囲んだ部分だけ。コメントで囲まれた部分で調整された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パラメータに好きなメッシュを設定する。今回はスターターコンテンツに入っている椅子を設定した。

 分かりづらいが椅子の形にパーティクルが配置されている。ただこれでは分かりづらいので次の項でパラメータを調整していく。

パラメータを調整する

 今のままでは何度もパーティクルがスポーンされて良くない。最初に一回だけポンと出現させて消えてほしい。

 これには"Spanw Burst Instantaneous" モジュールを使うとよい。CascadeのSpawnモジュール、にあったBurstに相当するものでSpawn Countに与えた数だけ最初にパーティクルをスポーンさせる。

 Emitter Update -> Spawn Rateを削除し"Burst..."モジュールを追加。Spawn Countを2000に設定する。

 何度もBurstが繰り返されてしまっている。今回は1回だけBurstして終わってほしい。これはEmitter Update->Emitter Life CycleのMaxLoopCountを1に設定すればよい。こうすると、NextLoopDurationだけ時間が経過すると自動で終了するようになる。

 Particle Spawn -> Set VariablesでLifetimeとSpriteSizeを変更することでパーティクルの寿命、サイズを設定することが出来る。今回は画像の様に値を設定する。

f:id:ai_gaminglife:20180722114633p:plain

 最後に色を設定する。色はParitlce Update -> Colorで設定されている。

f:id:ai_gaminglife:20180722114640p:plain

 赤で囲んだアイコンをクリックすると見慣れたカーブ編集画面に移ることが出来る。カーブエディタで好きな色に設定する(4.20.0時点でカーブエディタはかなり不安定なので注意。私はクラッシュした)。

f:id:ai_gaminglife:20180722114650p:plain

 これで完成。

 ここまで理解できれば後はそこまで難しくない。続きは次の記事で。