凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

≫ EDIT

UE4 Game Mode と Game Mode Base について(Game Mode、Game Mode Base、Get Game Mode)

「Game Instance」について調べていて、「Game Mode」なるものを見つけました。

こちらですね。

・GameMode、GameInstanceなどの違いについて
http://imoue.hatenablog.com/entry/2016/05/24/223150

GameMode マップ切り替えまで レベルごとに1つ サーバーにだけ存在 プロジェクトのデフォルトとは別にレベルごとの設定も出来る


あまり「Game Mode」の使い方がわかっていないのですが
バージョンが更新され「Game Mode」「Game Mode Base」というものに分離されたようです。
この更新によって、「Game Mode」の扱いが少し変わったみたいですね。

「Game Mode」と「Game Mode Base」の違いについてはこちらに詳しく書いてありました。

・UE4 Game ModeとGame Mode Baseの違いについて
http://unrealengine.hatenablog.com/entry/2017/01/30/220000

Get Game Modeで取得できるのはGame Mode Baseクラス
表題の通り、問題は"Get Game Mode"ノードを使った時です。4.13以前はこのノードで"Game Mode"クラスのリファレンスを取得できました。が、4.14からは"Game Mode Base"のリファレンスになっています。

これが扱いとしては一番あれ?ってなるところですね。

実際こんな感じのことが自分の方でもありました。

原因としては今まで「Get Game Mode」が「Game Mode」を返していたのに
今は「Game Mode Base」を返すようになったので、実行できないノードがあったようです。

というわけで、解決法としては「Game Mode」を継承した「Game Mode」クラスを作成し、
継承したクラスにキャストしてから実行する。といったもののようです。

よく使うクラスに存在する「Game Mode Base」ではなく、
「Game Mode」クラスを継承
して新しい「Game Mode」クラスを作成しましょう。
GameMode000.png

そうすると、「Get Game Mode」で取得した「Game Mode」をキャストすることができ、
「Game Mode」を入力に使ったノード(今回は Restart Game ノード)を実行することができます。
GameMode001.png

「Game Mode」自体まだまだ理解できてないので、徐々に理解していきたいですね。
スポンサーサイト

| UE4 | 16:09 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 データやパラメータなどの値をレベルを変更しても保持して扱う(Game Instance、Get Game Instance、Cast To Game Instance)

ゲームを通して変数や値などを保持したい場合、何を使ったらいいかがわからなかったので調べてみました。
最初は「Game Mode」かなと思ったのですが、
「Game Mode」はレベルが変更されると失われるのですね。

こちらのブログをみてて違いがわかりました。

・GameMode、GameInstanceなどの違いについて
http://imoue.hatenablog.com/entry/2016/05/24/223150

「GameInstance」はゲームを起動している間でプロジェクトごとに1つ。
「GameMode」はマップ切り替えまででレベルごとに1つ。


ということみたいですね。ためになります。

というわけで、パーティーのデータやパラメータなどの保持に向いてそうな
「Game Instance」について調べてみることにしました。

いつもお世話になってるこちらのブログを参考に。

・UE4 レベルを跨いで値を保持するGameInstanceについて
http://unrealengine.hatenablog.com/entry/2014/08/28/203638

まずは「Game Instance」を継承したそのゲーム独自の「Game Instance」を作ります。
アセットの新規作成のブループリントクラスを選択し、
GameInstance000.png
「Game Instance」を継承して「Game Instance」ブループリントを作成します。
GameInstance001.png
そうするとこんな感じで「Game Instance」が作成されます。
GameInstance002.png

このままではアセットとして作成されただけで、
プロジェクトには設定されていないため、使えるようにします。
「編集」の「プロジェクト」設定を選択し、
GameInstance003.png
「マップ&モード」の中にある「Game Instance Class」
作成した「Game Instance」を設定します。
GameInstance004.png
こうすることで、独自の「Game Instance」がゲーム中で使えるようになります。

実際に使う場合はこんな感じでしょうか。
GameInstance005.png
「Game Instance」を使う場合は「Get Game Instance」で取得したものを
「Cast To Game Instance」で独自の「Game Instance」にキャストを行って使います。

上の画像の場合、「New Game Instance」クラスにキャストして、
「New Game Instance」BPの中にあるBool型変数「New Bool」の値をとってきて表示しています。

こんな感じで値の保持と参照などを結構どこからでもできるので、
ゲーム全体で管理して使うようなものはなんとかなるのではないでしょうか。

もう少し詳しい内容についてこちらのブログにありました。

・【UE4】GameInstanceについて
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91gameinstance%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

例えば、オプション画面(オプション画面用Level)でゲーム内音量設定をした場合、その設定情報はゲーム内の音量に連動させなくてはならないため、ゲーム中画面(ゲーム用Level)に移行するまで保持しておかなくてはなりません。GameInstanceを使用して設定情報をオプション画面でSet、ゲーム画面でGetすることで、ゲーム内の共通の情報を扱うことができます(グローバル変数のような扱い)。

使い方としてはこういったことですね。

GameInstanceの機能に関して簡潔にまとめると以下の3点です。
 ・レベルを跨いだ値の保持
 ・ゲーム中のプレイヤー管理
 ・ネットワークリプレイの管理

こういった機能がメインのようです。

それと、「GameInstance」の作成タイミングでエディタとスタンドアローンでことなるようです。

PIE実行
 実行の度にGameInstanceを作成
 終了の度にGameInstanceを解放

・Standalone実行
 実行時にGameInstanceを作成
 終了時にGameInstanceを解放

ここらへんは少し気を付けたほうがよいかもしれません。

| UE4 | 16:05 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 モデルを昔風に描画するプラグイン「Oldskooler」

ツイッターでこういうのを見かけたのでメモ。

公式ページはここみたいです。

・Oldskooler
https://gameappmakerco.itch.io/oldskooler

う…英語…_(:3」∠)_
ただ調べてみるとちゃんと日本語の記事がありました。
さすが3D人さん…!

・Oldskooler - ボクセル化&ピクセル化!頂点ライティング!モデルを昔風の表現にするUE4アセット!
http://3dnchu.com/archives/oldskooler-ue4/

基本機能として以下のものがあるみたいです。

ボクセル化
3dピクセル化!
頂点量子化
沸き返るような, 低速のポリッシュメッシュが早く3Dゲームに入ったのを揺らす。
ピクセル化
シーンの特定の部分を他の環境よりも低く表示するようにします。 カスタム深度バッファまたはステンシルバッファを使用して、影響を受けるオブジェクトをマスクすることができます。
スティプル透明度
高周波数の不透明マスクで、ハードウェア上に半透明の錯覚を作成。
フリッカー透明度
即座に認識可能な外観を備えた別の半透明ハック。
頂点ライティング
通常の照明に代わる非常に速い代替物。 モバイルに最適


モデルをボクセル化やピクセル化して描画できるみたいですね。
動画ではこんな感じに。


昔風の味のあるようなグラフィックのゲームを作る場合などに重宝しそうですね。

| UE4 | 12:50 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 レベルを検索して開くショートカット(CTRL+O)

レベルを検索窓で検索して開く方法です。
これもまったくしらなかったのですがUE4のエディタにはショートカットがあったのですね。

レベルを検索して開くにはキーボードの「CTRL+O」を押します。
レベルを開く000
するとこんな感じでレベル一覧がでてきます。
「アセットを検索」と書かれているところに文字を入力していくと、ファイルが絞られていきます。

ファイル名がわかっている場合はツリーから探すよりこっちの方がはやくなりそうですね。

| UE4 | 12:08 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 アセットを検索して開くショートカット(CTRL+P)

アセットを検索窓で検索して開く方法です。
まったくしらなかったのですがUE4のエディタにはショートカットがあったのですね。

アセットを検索して開くにはキーボードの「CTRL+P」を押します。
アセットを開く000
するとこんな感じでアセット一覧がでてきます。
「アセットを検索」と書かれているところに文字を入力していくと、ファイルが絞られていきます。

ファイル名がわかっている場合はツリーから探すよりこっちの方がはやくなりそうですね。

| UE4 | 11:57 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ワールドの時間速度(ゲームスピード)を早くしたり遅く(スローモーション)したりする(Set Global Time Dilation、Custom Time Dilation、Execute Console Command の slomo コマンド)

ワールドの時間速度(ゲームスピード)を変更するための方法です。
全体的に早送りをしたり、スローモーションなどを実装するときに使えそうです。

こちらを参考にさせていただきました。

・UE4小ネタ : 制限時間の実装方法を色々と
http://pafuhana1213.hatenablog.com/entry/2015/11/21/014427

ゲームスピード制御は以下の三つのノードを使うことでできるようです。
「Set Global Time Dilation」
「Custom Time Dilation」
「Execute Console Command の slomo コマンド」


「Set Global Time Dilation」ノードはそのまま係数を指定します。
スローと早送り000
「Time Dilation」には係数を指定します。
1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。

「Custom Time Dilation」に対してセットするノードもそのまま係数を指定します。
スローと早送り001
こちらも1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。
ただ、自分のところで実行してみたらうまく動きませんでした。
ちょっと謎です…。

「Execute Console Command」で「slomo」コマンドを実行する方法です。
スローと早送り002
「Execute Console Command」で「slomo 速度係数」を実行します。
こちらも「Set Global Time Dilation」と変わらずに係数を指定します。
1.0で等倍、2.0で倍速みたいになります。0.1などを指定するとスローモーションですね。

ちなみにこれらの速度変更したものに対して、以下のようなことがあるようです。

スローモーションや早送りを実装する際、
「Set Global Time Dilation」ノード、「Set Custom Time Dilation」ノード、
または、「slomo」コマンドによる処理速度の変化を使用すると思います。

実は、これらを使用すると、
先ほどまで紹介してきた計測手法の一部では
処理速度の変化の影響を受けてしまい、正確な時間を測れなくなります。

具体的には、こんな感じ

影響を受ける
Delta Sceonds
Delay
影響を受けない
Set Timer
TimespanとDatetime


じゃあ【Set Timer】と【Timespan、Datetime】だけ使えばいいのか、
というと、そうではない時もあります。

例えば、「スローモーション中は残り時間の減り方もスローに」
という演出をしたい場合は、影響を受けない手法だと色々と面倒です。

つまり、用途に応じて使い分ける必要があるということです。


ここらへんを理解して使えるとよさそうですね。
早送りはともかく、スローは結構演出で使うと思います!

| UE4 | 12:17 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 DateTimeからの取得いろいろ(Date Time、Time Span、Get Day Of Year、Get Hour12、Get Time Of Day)

Date Time 構造体から値を取得する方法のいろいろメモです。

Date Time についてはこちらを。

・Date Time
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/DateTime/index.html

その日がその年から何日経過した日なのか取得する。
「Get Day Of Year」ノードを使うことで取得することができます。
時間系取得ノード000
上記のようにるしたものを表示するとこんな感じで表示されます。
時間系取得ノード001
2017/05/17は2017/01/01から137日目ということですね!

時間を12時間周期の値で取得する。
「Get Hour12」ノードを使うことで取得することができます。
時間系取得ノード002
上記のようにるしたものを表示するとこんな感じで表示されます。
時間系取得ノード003
18時なので12時間周期だと6時なので6と表示されます。
ここらへんは時計とかの表示する値を作るときに便利かもしれませんね。

その日の夜中から経過した時間を取得する。
「Get Time Of Day」ノードを使うことで取得することができます。
時間系取得ノード004
このノードだけ少し特殊で「Time Span」構造体を返します。
「Date Time」は日時を表すことに使い、「Time Span」は時間を表すことに使うようです。
経過時間であったりですね。

「Time Span」構造体についてはこちらを。

・Time Span
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/Timespan/index.html

ちなみに「Date Time」や「Time Span」はこういう特性があるようです。

・UE4小ネタ : 制限時間の実装方法を色々と
http://pafuhana1213.hatenablog.com/entry/2015/11/21/014427

スローモーションや早送りを実装する際、
「Set Global Time Dilation」ノード、「Set Custom Time Dilation」ノード、
または、「slomo」コマンドによる処理速度の変化を使用すると思います。

実は、これらを使用すると、
先ほどまで紹介してきた計測手法の一部では
処理速度の変化の影響を受けてしまい、正確な時間を測れなくなります。

具体的には、こんな感じ

影響を受ける
Delta Sceonds
Delay
影響を受けない
Set Timer
TimespanとDatetime


じゃあ【Set Timer】と【Timespan、Datetime】だけ使えばいいのか、
というと、そうではない時もあります。

例えば、「スローモーション中は残り時間の減り方もスローに」
という演出をしたい場合は、影響を受けない手法だと色々と面倒です。

つまり、用途に応じて使い分ける必要があるということです。


いろいろ特性がありそうですね。

| UE4 | 11:55 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 うるう年の判定などDate Time を使った日時の判定いろいろ(Date Time、Make Date Time、Is Morning、Is Afternoon、Is Leap Year)

Date Time を使った日時のいろいろな判定ノードについてのメモ。
Date Time 構造体に関するノードはこちらの公式ドキュメントを参考に。

・Date Time
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/DateTime/index.html

Date Time 構造体を日時を指定して作成する。
「Make Date Time」ノードを使います。
日時ノードいろいろ000
上記のように値を指定するとこんな感じの Date Time が作成されます。
日時ノードいろいろ001

午前中かどうかの判定。
「Is Morning」ノードを使います。
日時ノードいろいろ002
「2016/5/12/1:23:45.500」を指定した場合の結果がこちら。
日時ノードいろいろ005
深夜1時なのでTrueを返します。

午後かどうかの判定。
「Is Afternoon」ノードを使います。
日時ノードいろいろ003
「2016/5/12/1:23:45.500」を指定した場合の結果がこちら。
日時ノードいろいろ006
深夜1時なのでFalseを返します。

うるう年かどうかの判定。
「Is Leap Year」ノードを使います。
日時ノードいろいろ004
「Is Leap Year」ノードの入力はInt型の年を表す値なので
Date Time から「Get Year」ノードを使って年を取得して渡します。
日時ノードいろいろ007
結果はこちら。2016年はうるう年だったようですね。

便利なノードが用意されていていいですね!

| UE4 | 14:10 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 日時(Date Time)を文字列に変換する(As Date Time、As Date、As Time)

「Date Time」構造体を文字列に変換する方法です。

「Data Time」から文字列(Text)へ変換するためのノードがいくつか用意されています。
時間を文字列に変更006
こんな感じですね。
「As Date Time」「As Date」「As Time」がとりあえずテキストに変換するノードになります。

「As Date Time」は日付と時間の両方をテキストに変換します。
時間を文字列に変更000
表示するとこんな感じになります。
時間を文字列に変更003

「As Date」は日付をテキストに変換します。
時間を文字列に変更001
表示するとこんな感じになります。
時間を文字列に変更004

「As Time」は時間をテキストに変換します。
時間を文字列に変更002
表示するとこんな感じになります。
時間を文字列に変更005

UE4はこういった細かいノードが用意されてるので便利でいいですね。

| UE4 | 14:29 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

ゲーム制作に関する手続きややりとりメモ

ゲーム制作に関する手続きに関することや、やりとりに関する記事のメモです。
実体験の話はほんと助かります!

・専業インディーゲーム作者になった際の開業とか確定申告とかのメモ
ぬっそさんの確定申告や開業に関する記事。
専業でゲームを作る場合とかに参考になりそう。

・インディーゲーム作者が文芸美術国民健康保険組合に入れるか?
ぬっそさんの保険に関する話。

・インディゲームデベロッパー向け(初心者用)ゲームがメディアに掲載される為には
作った(作ってる)ゲームをPRする方法の話。

・レベルアップレクチャー 第一部「クリエイターが知らないといけない著作権・契約の基本のルール」レポート
著作権や契約に関する話。

・トルクル(TorqueL) PS4/PSVita SCEA/SCEE向け対応を振り返る
トルクル(TorqueL)のローカライズについての話。

・トルクル(TorqueL) Wii U版 プレスリリースの補足
なんもさんのトルクルWiiU版の話。
CEROについても触れています。

・Steamで同人ゲームをリリースする ~パブリッシャーになって検証してみた~
Steamで自分でリリースするための話。

・「はじめてのノベルゲーム」(前編)
・「はじめてのノベルゲーム」(後編)
声優の原田ひとみさんがつくられたゲームの話。

・アスタとフリージアさんのサントラをiTunesとかに配信したお話
なるさんがサントラをiTunesで配信した話。

| ゲーム制作 | 14:34 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

ゲーム制作に役立ちそうなツールやサイト

ゲーム制作の役に立ちそうなツールなどのメモです。

・ボタン一つで某厨二病を育むRPGに出てきそうな技名を作ってくれるとても便利な代物Ver.2
いい感じの必殺技名を作ってくれます。
最終的にはともかく、とりあえずのあたりとしてや、発想の一つとして使えるのでとても便利です。

・すごい名前生成器
いい感じの人名を作ってくれます。
一括で複数の名前を生成してくれるのでとても便利なのでは!

・RPG-Awesome
異世界の魔法、武器、防具、クリーチャー・生き物、植物、食べ物、道具、ポーションなど、495種類のアイテムがデザインされたピクトグラムがダウンロードできるようです。

紹介記事はこちら。
創作にぴったり!異世界の魔法、武器、防具、道具、生き物をテーマにした無料のピクトグラムがなんと495種類も!

・イージング早見表
イージングを動きのアニメーション付きで見ることができます。
どういった動きをさせたいかの参考になりそうです。

・Tokusetsu 3
告知サイトが、誰でもすばやく簡単に。一瞬で同人告知サイトが作れるテンプレートです。
特設サイトをぱぱっと作りたい人はとても役に立つと思います。

色々と便利なのをメモしていこうかと思います。

| ゲーム制作 | 11:34 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT