Nightゲームプログラム系の覚え書きこの広告は、90日以上更新していないブログに表示しています。2017-12-11UE4の歩き方(情報の探し方)UnrealEngine4qiita.comの11日目の記事となります。UE4の使い方や疑問などを調べる手順を紹介したいと思います。公式ドキュメント・コミュニティを全検索するフォームUE4は公式ドキュメントやコミュニティがしっかりしてますので、まずは公式を検索した方がググるより早いことが多いです。そこで役に立つのが公式ドキュメント・コミュニティを全検索できる以下のフォームです。フォーム下のリンクを切り替えることで、検索するドキュメント・コミュニティを絞ることもできます。全検索するとノイズが多いですので、適宜切り替えると良いと思います。日本語で検索できます。英語の方が情報量が圧倒的なので英語検索をおすすめします。日本語ドキュメントがない未来も遠くないと思うので技術英語まではがんばろう!Documentマニュアル・説明書などなど、色々呼び名はありますが真っ先に調べるべき対象です。基本的な使い方や機能が網羅的に書かれています。答えそのものは無くともヒントや参照先に助けられることも多いです。C++とBlueprintのAPIリファレンスです。プログラマの場合、よく使うことになると思います。これらのリファレンスはソースからドキュメント生成ツールで出力されただけのものなので、どういうAPIがあるかを一覧するのには役立ちますが、使い方や意図はあまりのっていません。AnswersAnswerHubの検索です。AnswerHubは質問を投稿して誰かに答えてもらえるという開発者間の相互互助をサポートするシステムです。内容によって(主にバグ報告)はEpicの人からも回答がもらえます。有用な検索で、使い方や挙動がバグかどうかを調べるには、ほぼAnswerHubを調べれば出てきます。Twitterとかで質問をしがちですが、AnswerHubに書いた方が共有がしやすいので、AnswerHubに投稿した上でTwitterで投稿したよ!とやった方が回答率が上がると思います。Epicの中の人も見てますしね。Forumsフォーラムは、お題ごとに議論を行うためのシステムです。リリース情報やEpicの人のちょっとしたこぼれ話や、UE4利用者たちの宣伝、新機能の要望、UE4のチュートリアルなどなど、とても沢山の情報が飛び交っています。多くは英語ですので調べるのは少し骨が折れますが、AnswerHubには載ってこないマニアックな情報*1も多く、AnswerHubで見つからなかったら次に探す対象です。WikiEpicWikiはドキュメントからこぼれ落ちた内容を具体的なコードと共に紹介してくれています。C++を扱う人は閲覧必須です。C++のチュートリアル、C++プラグインの作り方などが書いてあります。BlogEpicBlogはバージョンごとの新機能解説あたりはよくやっているので、最新の内容が知りたいときは特に参照すると良いと思います。サーバーDiscordが出来てから、mstdnからDiscordにうつった感があるのでDiscordをのぞくのが良いかもしれません。00:19UE4の歩き方(情報の探し方)Tweet広告を非表示にするもっと読むコメントを書く2017-04-28MastdonでTopページと「このインスタンスについて」を改造するMastodonMastodonは、サイトの説明文*1という項目で、テキストを追加することはできますが、画像を入れ替えたり、記述の順序を変えることはできません。記述されている通りに表示されます。hamlというのはRailsが実装しているhtmlのテンプレート形式で、PythonやMarkdownのような記述方式でhtmlが書けるというものです。詳しくはググってください。次のリンクを見ながら読み進めてください。t('about.about_mastodon').html_safeで出力されますので、好きな位置に移動します。「Mastdonの特徴」”Mastdonの特徴”と続くチェックボックスがついたリストは43行目~73行目です。'about.features.api'で出力されますので、好きな位置に移動します。画像を変更する画像の変更の仕方は2つあります。画像を上書きしてしまう画像のurlを変更するです。中にありますので、対応する画像を置き換えることで入れ替えます。置き換えをせずに入れ替えるには、hamlの画像urlを書き換えます。対応するhamlは、26行目です。'fluffy-elephant-friend.png''fluffy-elephant-friend.png'を追加した画像ファイル名に変更します。画像を追加したい場合は、app/assets/imagesディレクトリに画像を追加し、image_tagを使って好きな場所に書きます。サイトの説明文サイトの説明文は、75行目~77行目です。@instance_presenter.site_description.html_safeログインのすぐ下など、すぐに見える位置に移動させるのが良いと思います。ちなみに、自分はインスタンス説明は、hamlに直書きしてしまい。buildをせずに反映させることができるため、この部分は「お知らせ」に使っています。表示とhamlをにらめっこすればわかると思いますので、詳しくは説明しません。改造を反映するには、改めてbuildする必要がありますので、いったんdockerをstopし、buildしてから立ち上げ直します。画像などassetを追加した場合は、アセットのprecompileも必要ですのでお忘れなく。18:14MastdonでTopページと「このインスタンスについて」を改造するTweet広告を非表示にするもっと読むコメントを書く2017-04-16Web素人がMastodonを立ててみたMastodonゲームプログラム一筋で、オンライン対応でクライアント側のP2P対戦作ったり、サークルの開発サーバーをちょっとだけやってた程度の知識で立ててみた話。SMTPサーバーも立ち上げて、外部のメールサービスを使わない形で立ち上げます。ドメインはお名前.comで適当に取って来て、適当に設定しています。1Gプラン(石狩)CentOS6をCentOS7に入れ替えるさくらVPSはデフォルトだとCentOS6ですので、CentOS7に入れ替えます。CentOS7自体は標準対応なので、VPSの設定画面からボタン一発で再インストールされます。石狩設置じゃないとCentOS7にできないらしいので、契約気をつけましょう。CentOS7にしないといけないのは、CentOS6はDockerのサポートが切られてるからです。基本的な設定をするhelp.sakura.ad.jpなんかを見ながら、rootとかSSHとかfirewallとか入れていきます。作業は、rootでやちゃってます。ソース一式nginxDocker/Docker-composepostfixマニュアル見ると他にもいるもの(DBとかRubyとか)が書いてあるんですが、Dockerが全部引っ張ってきてくれるので気にしなくて良いようです。自分はDockerがどういうものかを良く知らなかったのでチマチマ入れてたんですが、Twitterで教えてもらいました。git主にGitHubからソースを引っ張ってくるために使う。gitMastodon作業フォルダとなるので、tmpには置かない方が良いと思います。自分は、SSHログイン用に作ったユーザーのhome内においてます。https://github.com/tootsuite/mastodon.gitnginxApacheの仲間のWebサーバーです。ファイルを作り以下の内容を書きます。Docker/Docker-compose仮想マシンを構築するパッケージらしいです。Dockerが本体で、Docker-composeは設定ファイルに基づいてDockerコンテンを作るサポートパッケージです。Docker最新を入れた方が良いかなと思いましたので、公式ドキュメントに従いdocker-ceを入れます。ceは無料版で、eeは企業向けの有料サポートあり版だそうです。yum-utilsを入れます。yum-utilsdockerのリポジトリを登録してから、インストールします。docker-ceDocker-composedocker-composeは、ビルド済みのをGitHubから引っ張ってきます。/usr/local/bin/docker-composepostfixmastodonからの確認メールなどを送信のに使います。今回は送信機能しか使わないので、dovecotなど受信サービスは使用しません。外からの送信は受け付けない用にしますので、バージョンはひとまず気にしないことにします。postfixファイアーウォール設定http(80)、https(443)、smtp(25)、smtps(587)を開放します。--reloadDockerの設定cloneしたMastodonのフォルダに移動して、環境設定ファイルをいじります。コピーして書き換えます。FederationLOCAL_DOMAIN=ドメイン名LOCAL_HTTPS=trueドメインは自前で取っても、さくらVPSで割り当ててあるやつでもご自由に。HTTPSを使うには証明書が必要になります。Encryptなどを使って取得して設定しておきます。nginx設定の時に軽く紹介します。DBデータベースは、特に設定する必要はありません。項に3つの鍵(PAPERCLIP_SECRET/SECRET_KEY_BASE/OTP_SECRET)を設定します。Docker-composeが生成するらしいので、以下のコマンドを3回実行して、最後に出てくる文字列を順番にコピペします。初回だけ実行に時間がかかりますが、それ以降はすぐ出てきます。secretdocker-composeは、mastodonのソースがあるフォルダで実行します。docker-composeを使うには、Dockerのサービスを立ち上げておく必要がありますので、先に立ち上げておきます。dockerメールメールは、外部のsmtpサービスを使っても良いですが、ここではホスト側にpostfixサービスを立ち上げて、それを使います。メールを送信用のユーザーを作ります。mstdn_mail次にdocker0という名前のブリッジのIPアドレスを確認します。adocker0に設定されているIPアドレスが、Dockerの中からホストへ通信するためのIPとなります。「172.16.0.1」と設定されていたとします。.env.productionのメール設定を以下のようにします。configurationSMTP_SERVER=172.16.0.1SMTP_PORT=587SMTP_LOGIN=mstdn_mailSMTP_PASSWORD=設定したパスワードSMTP_FROM_ADDRESS=送信先として設定されるアドレスSMTP_AUTH_METHOD=plainSMTP_OPENSSL_VERIFY_MODE=noneSMTP_ENABLE_STARTTLS_AUTO=trueただし、オープンなmstdnを立ち上げようと思っているならば、外部のsmtpサービス(SparkPostとか)を使う方が良いと思います。自前のドメインだと、迷惑メールにならないようにする対策とかOP25Bを解決するのがとても大変です。DBを永続化するデフォルトの設定ですとDockerを再起動する度にDBが初期化されてしまいますので、そうならないようにします。開いて、db,redis項目のvolumesの2行をアンコメントします。基本myhostname=メールサーバーの名前mydomain=ドメイン名home_mailbox=Maildir/送信受付ローカルとDockerからのみメール送信を受け付けるようにします。docker0に設定されているIPを「172.16.0.1」とします。172.16.0.0/16relaydomin=認証サブミッションポート(587)を有効にします。reject_unauth_destinationnginxDocker内で動いているmastodonをhttp/httpsにリダイレクトするのに使います。設定ファイルは、mastodon公式で公開されているものをコピーして使います。mstdn.confという名前で作ります。example.comを自分のドメインに置き換えるだけで完了です。証明書を取る証明書はLet'sEncryptを利用して取ります。GitHubからスクリプトを落としてきます。certonly途中で登録用のメアド、証明書を取るドメイン名などの入力を求められますのでいれます。nginxへの設定がいりますがmastodonで公開されているファイルに含まれていますので、何もしなくて大丈夫です。nginxdocker-composeを立ち上げるmastodonのフォルダに移動しておきます。立ち上がるのには、少し時間がかかるのでしばらく待ちます。01:09Web素人がMastodonを立ててみたTweet広告を非表示にするもっと読むコメントを書く2017-03-30HoloLensはじめましたHoloLensずっと欲しくて転送サービスをはじくMSにグギギとしつつ日本販売開始と同時に手にいれたのですが、やっとさわれるようになったので、HoloLensについてもボチボチ書いていこうかと思います。した開発記事とかは、twitter.comtwitter.comtwitter.comあたりをフォローするなりリストにいれておけば大丈夫です。いつも通り、他の人があまりやってなさそうとか、変に引っかかったことについて書いていきます。眼鏡は?フレームがあまり大きくないなら、眼鏡したままでも被ることができます。私のだと、片目が横6cm、縦3cmぐらいで、問題なく被ることができます。HoloLens自体は前後に調整することもできるので、被ることのできる幅は広いと思いますが、それでも縦が大きいとかぶれない可能性が高いと思われます。スクリーンの位置合わせマススカーソルに相当するGazeカーソルというのがありまして、ヘッドトラッキングでカーソルを動かすので、ちゃんと目と目の間に来てないととても疲れます。Gazeカーソルはスクリーンの中央に表示されています。スクリーンがちゃんと目を覆うような位置に調整するのが良いと思います。被った状態で良く見るとグレーがかかった場所が見えますのでそれです。カーソルやスクリーンは、IPD(瞳孔間距離)によっても見え方が変わるので、座りの良い位置が見つかったら、Calibrationをやり直してIPDを調整しなおします。Calibrationは、初起動時に自動で実行されますが、アプリとしてインストールされているものですので、あとで何度でもやり直すことができます。スタートメニューから辿って起動するか、Cortanaにお願いすれば起動します。VR機器などでIPDが正確にわかっているかたは、DevPortalから直接入れても良いと思います。チュートリアルHoloLensAcademyとして、MSが用意してるやつがあります。最近、日本語版も公開されました。現在(2017/03/30)の所、HoloLensのページが全体的に改修中なのか、リンクがほぼ死んでいます。ググった結果も死んでます。新しいページにリダイレクトもされないので、HoloLensのトップページから辿るしかありません。Unityからリモート起動する場合UnityでビルドするとVisualStudioが自動で立ち上がりますが、自動で立ち上がったソリューションからはリモート起動することができません。ビルドする際に自分で指定したフォルダにあるslnファイルを開いて、そっちから起動します。C++久々の2Dゲームネタです。タイトルの通り、見下ろしタイプの2Dゲームの移動処理を担うMovementComponentをつくってみます。見下ろし移動とは?RPGや縦STGなどでよく見る真上からキャラクターやマップを見ていることを見下ろし視点と言います。2Dゲームでは上下左右の4方向、もしくはそれに斜めを追加して8方向に動かします。これは、コントローラの十字キーと一致させるためにそうなっています。TopDownテンプレート)。ここでは見下ろし2Dゲームでは一番使われると思われる8方向移動させることにします。見下ろし視点は英語ではTopDownView/TopViewと言いますので、実装するMovementComponentのことをTopViewMovementComponentと呼ぶことにします。以下の機能を実装します。8方向移動8方向移動するナビゲーション移動ナビゲーションが入っていますので、Pawn向けのMovementComponentとして実装します。TopViewMovementComponentの実装方針TopViewMovement実装の一番の難点は、ナビゲーション移動を8方向に制限することです。ナビゲーション移動は最短距離を突き進みますので、移動中かなり自由な向きを取ります。以下の記事のようにすることで、移動すべき方向ベクトルを取得することができます。katze.hatenablog.jpこれを利用して、移動すべき方向ベクトルから8方向のどれに一番近いかを判定して、その方向に動かすように実装することで実現します。上記記事の通り、C++で実装しないと移動すべき方向ベクトルが取得できませんので、TopViewMovementもC++で実装することにします。MovementComponentは裏で色々と処理を行っているようなので、全部自作することはせずに、FloatingPawnMovementComponentを継承し、必要な部分だけカスタマイズすることにします。}なお、完全なコードは載せるのは長いですので、この記事では大まかな実装の紹介だけにします。MovementComponentでの移動処理まずは簡単にですが、MovementComponentでの移動の仕組みを紹介します。TickComponentで移動する移動を行うタイミングはComponentのTickです。TickComponentメソッドの中で、SafeMoveUpdatedComponentメソッドを呼ぶことで移動が行われます。SafeMoveUpdatedComponentメソッドに、そのTickで移動する分のベクトルを渡します。Hit);}第一引数の移動ベクトル分、座標が変化します。第三引数がSweep処理を行うかのbool値です。trueにするとSweep処理が行われ、Hitがあれば第四引数のHitResultクラスに結果が入ります。移動メソッドは移動するための情報をため、実際の移動処理はTickComponentで行う設計となっています。Velocity変数に移動方向がためられるMovementComponentは、Velocityという変数を持っています。AddInputVectorなどの移動メソッドによる移動ベクトルの計算結果がためられていきます。このVelocityは、次のTickでの移動方向を現します。長さは1以下で、最大速度をスケールします。Velocity変数を元にして、SafeMovementComponetメソッドの第一引数に渡す移動ベクトルを計算します。FloatingPawnMovementComponentやCharacterMovementComponentの最大速度はunit/secですので、DeltaTimeを乗算するのが基本の求め方になります。DeltaTime;自作の移動メソッドを作る時は、このVelocity変数と合成するのを忘れないようにしましょう。8方向移動XY平面(TopView)上の8方向とします。X方向が右に正、Y方向が下に正の座標系です。8方向は上方向を1として時計回りに1ずつ増やして、1~8のByteで扱うことにします。0は方向なしとして扱います。方向を表すenumを作っても良いのですが、それはBP側に作ることにします。代わりにByteで表すことでenumと連動しやすくしておきます。指定した方向に移動する。DirectionはTOP(1)から時計回りに1ずつ増える。AddInputVector(Vel);}方向に応じた移動ベクトルを計算して、AddInputVectorを呼びVelocityに設定しています。TickComponentでVelocityに応じた通常の移動処理を行います。方向からベクトルを計算する関数は以下の通りです。}}8方向移動するナビゲーションナビゲーション移動を開始するメソッドは、AIMoveToなどFloatingPawnMovementComponentに実装されているものをそのまま使えます。紹介した記事に従って、まずはナビゲーションによって計算された移動方向をインターセプトします。MoveVelocity;}RequestDirectMoveメソッドをオーバーライドして、ナビゲーション移動方向であるMoveVelocityを保存しておきます。TickComponent先に書きました通り、実際の移動処理は、TickComponent内で行います。ナビゲーション移動状態かは、以下のコードで判定します。*/}MovementComponentを持っているPawnのControllerが「ローカルのコントローラであり、PlayerControllerでなく、パスフォロー状態である」という判定になります。ナビゲーション移動処理は、以下の通りです。}ナビゲーション移動ベクトルが存在しているかをチェックし、ベクトルを方向に変換して、先ほど実装した8方向移動メソッドに渡します。ベクトルを方向に変換する関数は以下の通りです。}360度を8分割し、どの分割範囲に入っているのかを判定しています。分割する範囲の中央には8方向がそれぞれ入るような分割にしています。任意の方向が取れる前提のナビゲーション移動を無理矢理8方向に制限していますので、通常のナビゲーション移動とは違う動きをする可能性があります。方向の切り替え角度をまたぐような移動が連続してしまいカクカクした移動になるなどです。これは仕様上どうしもないですので、目的地設定を変えるなど、上手く対応してください。まとめ8方向移動をするTopViewMovementを作る指針を紹介しました。自作のMovementComponentを作るヒントになればと思います。TopViewMovementを完成させるには、ここで紹介する以外の所にも手を入れないといけないのですが、それは実際のコードを見てください。移動を伴うゲームに取って、移動処理というのは肝になる部分です。UE4が用意しているMovementComponentは、必要最小限ですので手をいれる必要がどうしてもあります。指定方向に指定時間だけ移動する指定方向に指定距離だけ移動するなども実装し、簡単に移動演出を行えるようにしています。TopViewMovementComponentのソース完全な実装は、以下のgithubに公開しておきますので好きに改造しておつかいください。実際に桃子と夢のシールで使っているものを、公開用に少し手直ししたものになります。使い方などは、READEME.mdをご覧ください。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。