Quantcast
Channel: historia Inc –株式会社ヒストリア
Viewing all 984 articles
Browse latest View live

[UE4][C++]FJsonSerializebleマクロを使ってみる

$
0
0

データ通信で使われたり、オリジナルデータのフォーマットとして使われるJSONですが
UE4でJSONを扱う場合はFJsonObjectを使用して各フィールドごとに追加・取得し、シリアライズ・デシリアライズを行います。

開発で扱う場合、仕様が変わりパラメータが増えるたびにソースコードを追加する作業が発生します。
今回紹介するFJsonSerializable構造体を使うと必要なマクロを書くだけでJSONの変換する処理が自動生成されるようになり、
フィールドが増えるたびにソースコードを追加する必要がなくなります。

使用方法
必要なモジュール
「Json」をModuleRules(拡張子.Build.csのファイル)に追加
必要なヘッダーファイル

#include "Serialization/JsonSerializerMacros.h"

構造体の宣言・マクロの書き方

struct FJSONItem : public FJsonSerializable
{
    int32 value0;
    int32 value1;

    BEGIN_JSON_SERIALIZER
        JSON_SERIALIZE("value0", value0);
        JSON_SERIALIZE("value1", value1);
    END_JSON_SERIALIZER

    FJSONItem():
    value0(0)
    ,value1(1)
    {
    }
};

JSON形式文字列に変換

FString JsonStr = JsonItem.ToJson();

JSON形式文字列から構造体に変換

JsonItem.FromJson(JsonStr);

一応JSON側データがなかった場合は初期値が入るようですので初期値は入れたほうがデータ破損のチェックに使えるかと思います。

使える変数型
・int32
・uint32
・bool
・FString
・FText
・float
・double
・FDateTime
※列挙体(Enum)、64bit整数は使えないため変数型の変換が必要となります。

FJsonSerializableを継承した構造体であれば配列も使えます。
JSON_SERIALIZE_ARRAY_SERIALIZABLEマクロで宣言して下さい。

struct FJSONItem : public FJsonSerializable
{
    Int32 value0;
    int32 value1;

    BEGIN_JSON_SERIALIZER
        JSON_SERIALIZE("value0", value0);
        JSON_SERIALIZE("value1", value1);
    END_JSON_SERIALIZER

    FJSONItem():
    value0(0)
    ,value1(1)
    {
    }
};

struct FJSONArrayItems : public FJsonSerializable
{
    TArray<FJSONItem> Items;

    BEGIN_JSON_SERIALIZER
        JSON_SERIALIZE_ARRAY_SERIALIZABLE("Items", Items,FJSONItem);
    END_JSON_SERIALIZER
};

注意点としてブループリントではそのままでは使えません。
※USTRUCT UCLASSマクロの使用をするとビルドエラーになってしまいます。
ですので、ブループリントで使用したい場合はUSTRUCT(BlueprintType)で宣言した
同じプロパティを持った構造体を宣言する必用があります。

参考にしてもらえたら幸いです。


ホームページをリニューアルしました!

$
0
0

代表の佐々木です。

この度、弊社のオフィシャルホームページをリニューアルいたしました!

 

いままでのHPは、起業時に私が「とにかくHPが必要だ! とりあえずこれで!」と作ったHPでした。

たいしたSEOもしていないのに毎週1万PVを超えるアクセスを頂いており、

嬉しい反面「こんな間に合わせのHPでごめんね」という気持ちを抱く毎日からやっと脱却できます(笑)

 

レイアウトがきれいになったのはもちろんのこと、小さいことだけど個人的に嬉しい改善点は次の点です。

 

・ブログの文字が小さかった

・ブログの投稿年月日の”年”が分からなかった

・ぷちコンのページにシェアボタンが無かった

 

また、既存のブログ記事のURLは変更していないので、リンクの変更の必要はありません。

もし不具合や、この点はこうして欲しいなどのご要望がありましたら、お気軽に佐々木宛や公式Twitter宛にご意見ください。

 

今回のHPリニューアルは、株式会社WEB企画さんにお願いしました。

サイト構成のアドバイスから、弊社の細かいこだわりに最後まで付き合っていただき、この場を借りてお礼申し上げます。

 

HPも新しくなり、弊社は家庭用ゲーム機・アーケードを中心にこれからも拡大して参りますので、今後ともよろしくお願いします!

[UE4] 手軽にオブジェクトを破壊する

$
0
0


今回は4.18からひっそりとプラグインに変更されていた「Destructible Mesh」を使って
簡単に、触れると爆発する岩を作りたいと思います。

 

1.準備

New ProjectからThird Personを使用します。
4.18からは初めに「Destructible Mesh」のプラグインを有効にする必要があります。


「Edit」から「Plugins」を選択。


「Apex Destruction」の「Endbled」にチェックを入れて「Restart Now」で再起動させます。
これで「Destructible Mesh」のプラグインが有効になりました。

使用するアセットは「StarterContent」から
1.「SM_Rock」  ←岩
2.「P_Explosion」 ←爆発エフェクト
3.「P_Steam_Lit」 ←爆発後の煙エフェクト
この3つで作成していきます。

 

2.Destructible Meshの作成


Static Mesh(今回はSM_Rock)を右クリックし、コンテキストメニューから「Create Destructible Mesh」を選択します。


すると「SM_Rock_DM」が作成されるので開きましょう。


①「Enable Impact Damage」にチェックを入れ、接触時に破壊されるようにします。

②「Voronoi」にある「Call Site Count」の数値を変えると破壊時の破片数を変更出来ます。

③「Fracture Mesh」をクリック、④「Explode Amount」のスライダーで壊れる様子を確認できます。


「Destrucible Settings」の「Skeletal Mesh」内で破片の内側にもマテリアルをセットします。

これで設定は終わりです。
次にエフェクトを付けてみましょう。

 

3.Buleprint Actor の作成と、破壊時のエフェクト設定


右クリックしてBlueprint Classを選択。


Classは「Actor」を選択します。


名前を入力して「BP_Rock」を作成しました。


作成した「BP_Rock」を開き、「Compnents」に「SM_Rock_DM」を入れておきます。

次にBlueprintで接触時の処理を作成します。


【破壊時のイベントをバインド】
ゲームプレイ開始時に破壊された時に発生するイベントを取得するようにします。

・Event BeginPlay
→ゲームプレイ開始にイベントが実行されます。
・Bind Event to OnComponentFracture
→「Destructible Mesh」の破壊イベントをカスタムイベントから発行されるようにします。
※ターゲットはSM_Rock_DMを指定しています。

【接触】
・CustomEvent_0
→破壊時のイベントが発行されます。

【爆発・煙エフェクト】
・Spawn Emitter Attached
→指定したComponentの場所にエフェクトを発生させます。

パラメータ
・Emitter Template
→エフェクトの指定
ここに最初に選んだ爆発と煙エフェクト「P_Explosion」「P_Steam_Lit」を指定します。

・Attach to Component
→指定するComponent(SM_Rock_DM)

・Location、Rotation、Scaleの値を入力することで、エフェクトの座標、角度、スケールを指定できます。

・Auto Destroy
→自動でエフェクトを消すか指定できます。

これでエフェクトの設定ができました。

レベルに「BP_Rock」を配置して試してみましょう。

派手に壊れました!

この様に「Destructible Mesh」を使用することで簡単に破壊することができます。
まだお試しでない方は是非やって見てください。気持ちいい!

[UE4] 部分的に色付きのテキストをUMGで作成する

$
0
0

UIを作る上でテキストの一部のみ色を変えて表示したいことが多々あると思います。

デフォルトで用意されているTextBoxを使って文字の色を変える場合、Color and Opacityの設定から色を替えることができますが、全てのTextが一括で変更されてしまいます。

実はエンジンコード内に一部色を変えて表示することのできるRichTextBoxというクラスが存在します。

\Engine\Source\Runtime\UMG\Public\Components\RichTextBlock.h

 

■RichText導入方法

この記事を書いている4.18では実験的機能として位置づけされているため、
22行目 UCLASS(Experimental)のExperimentalを外し、ビルドするとUMGから使用することができます。

 

エンジン改造はしたくないという方や、もっと手軽に使いたいという方はこちらのフォーラムでプラグインを作成されている方がいます。

リンク先のDownload: Click hereからzipを落とし、解凍してできた「UmgRichTextBox」フォルダごとプロジェクトの「Plugins」フォルダにいれてエディタを起動すると使用できるようになります。

 

上記どちらかの方法を用いてエディタを起動するとUMGのDesinerでPaletteの中に追加されているので、通常のText同様に配置して使います。

 

■フォーマット

RichTextBoxは<span ***=”内容”>色などを変えたいテキスト</>の形式で指定します。

***に指定できるのは以下の4つです。

■font フォントの指定

例<span font=”Roboto”>AAA</>

変化のわかる良いフォントなかったので画像省略

 

■size フォントサイズの指定

例<span size=”20″>AAA</>

■style 太字(bold)や斜字(Italic)などの指定

例<span style=”bold”>AAA</>

■color 色の指定 #から始まる16進数で以下のいずれかの形式で指定

#RRGGBBAA  それぞれ0~FFまでで指定

#RRGGBB(アルファはFFになる) それぞれ0~FFまでで指定

#RGB(アルファはFFになる) それぞれ0~Fまでで指定 解釈時に値が16倍されます

例<span color=”#FF0000FF”>AAA</>

一部色変えは以下のような構文になります

A<span color=”#FF0000FF”>A</>A

構文解釈部分は
\Engine\Source\Runtime\UMG\Private\Components\RichTextBlockDecorator.cpp
に記述されています。

 

■ブループリントで使う方法

ブループリントから使う場合はSetTextノードが用意されているのでこれに上記構文の文字をセットして使います。

 

■おまけ

ブループリントで使う時に16進数の文字列を操作する方法がないので以下のような関数をC++で用意し、BPに公開するとちょっと楽です。
ヘッダー

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"

/**
*
*/
UCLASS()
class PROJECTNAME_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
static FString ByteToHex(uint8 InVal);
};

cpp

#include "MyBlueprintFunctionLibrary.h"
FString UMyBlueprintFunctionLibrary::ByteToHex(uint8 InVal)
{
return FString::Printf(TEXT("%X"), InVal);
}

         

[UE4] WidgetのVisibilityについて

$
0
0

こんにちは、新米えんじにゃーの遠藤です。

UMGで追加できるすべてのWidgetはVisibilityというプロパティーを保有しています。

Widgetを表示/非表示する時によく用いられるプロパティーですが、[Visible, Collapsed, Hidden, Hit Test Invisible, Self Hit Test Invisible]と表示/非表示以外の項目もあり挙動も分かりづらいため今回書いていきます。

■ Visible

表示されます。

Visibilityのデフォルトの設定です。Visibility設定の中で唯一、マウスクリックやマウスオーバーなどのイベント通知がされます。

 

■ Collapsed

表示されません。

Google先生曰く「折りたたまれた」らしいのですが、HorizontalBoxやVerticalBoxなどのパネルWidget内でレイアウトを組んだ場合、Collapsed状態のWidgetは無視されます。

また、WidgetであってもUMGであってもCollapsed状態の場合、Tick処理は実行されません。

非表示になっているだけなので存在はしていて、Get Child AtノードなどでWidgetの参照は取れます。

 

■ Hidden

表示されません。

Collapsedとは違って非表示になるだけであって、レイアウトに反映されます。「う」の部分がCollapsedの時と違ってスペースが空いています。

また、Tick処理は実行されませんがBind処理は実行されます。

 

■ Hit Test Invisible

表示されます。

デザインとしてのみ表示され、イベント通知はできません。

 

■ Self Hit Test Invisible

表示されます。

パネルWidgetのデフォルトの設定です。

基本的にはHit Test Invisibleと同じ設定ですがHit Test Invisibleと違い、子Widgetに設定が適応されません。”ボタンA”が”Self Hit Test Invisible”であったとしてもその子Widgetの”ボタンB”が”Visible”であればボタンBのイベントは通知されます。

 

■ まとめ

基本的に表示はVisible、非表示はCollapsedが良いと思います。デザインとして使う”Image”や”Text Block”などはSelf Hit Test Invisibleを使うのが良いと思います。

UMGはボトルネックになりやすいので表示はしていないのに裏では無駄な処理が実行され続けていたなど起こらないように用途に応じて正しいVisibility設定を使いましょう~。

ヒストリア中学生職業体験会2017を開催しました

$
0
0

先日、弊社主催イベント「ヒストリア中学生職業体験会2017」を開催いたしました。

(開催概要:http://historia.co.jp/archives/7542/

今回、PC協賛でGALLERIA様(サードウェーブデジノス様)にご協力いただきました。

 

ゲームが大好き・ゲームクリエイターに興味がある・将来はゲームにかかわる仕事がしたい!という中学生の方に集まっていただき、

ゲーム業界とは?ゲームクリエイターって具体的にどういう仕事があるの?パブリッシャーとデベロッパーって何?など

ゲーム業界に関する説明や会社紹介、弊社開発ゲームの体験、そして職業体験を行っていただきました。

 

普段、技術者向けに講演を行ってはいますが、今回は中学生!

わかりやすく、なおかつゲーム業界に興味を持ってもらえるよう説明をするのに、弊社スタッフも奮闘しておりました。。。

 

 

職業体験では親御さんも参加していただき、プログラマーチームは2Dゲームの作成、デザイナーチームは3Dモデルをオリジナルに改造、プランナーチームは企画書の作成を行いました。

 

どのチームも先生(弊社スタッフ)のレッスンをよく聞いて取り組んでいました。

 

最後は皆さん笑顔で締めくくることができ、初めての試みでしたが大盛況だったと感じております。

 

今後も学生の長期休暇に合わせてこのようなイベントを開催する予定です。

ご興味がある方はぜひご参加くださいませ。

ヒストリア・AMG産学共同プロジェクト「Alice Mystery Garden」がリリースされました!

$
0
0

AMGの学生と商用作品を作るアンリアルチャレンジにて制作した、VRパズルアクション「Alice Mystery Garden」がリリースされました!

Steam http://store.steampowered.com/app/751300/Alice_Mystery_Garden/

弊社佐々木が監修し、企画・制作はAMGの学生チームが行いました。

VR機器をお持ちの方はぜひ遊んでみてください!

(1分6秒より)

PANORA様で記事を書いていただきました!ありがとうございます!

癒し系VRパズルアクション「Alice Mystery Garden」レビュー AMG学生がUE4でヒストリアと共同開発

新年のご挨拶 2018年

$
0
0

 

新年、あけましておめでとうございます。

2017年中は取引先の皆様、およびコミュニティーの皆様に大変お世話になりました。2017年は「Airtone」、「ハネチャリ」、「ナレルンダー!仮面ライダービルド」「Solid Vision」をリリースすることが出来ました。また、「ドラゴンクエストXI 過ぎ去りし時を求めて」「レイヤードストーリーズ ゼロ」「バハムートディスコ」といった関わらせていただいたタイトルのリリースも行われました。

イベントごととしては、「出張ヒストリア! UE4勉強会2017」や2回の「UE4ぷちコン」、「UE4エンタープライズミーティング」を開催し、2回の「UNRELA FEST」への講演・ブース展示、そして数々の講演も行えました。(くわしくはイベントページをご覧ください)

社内的なことで言えば、オフィスの引っ越しやホームページのリニューアルを行い、盛りだくさんの1年でした。これだけのことが1年の間でできるようになったことは、企業としての成長を感じるとともに、この成長についてきてくれているスタッフに感謝しかありません。そういう意味では、2017年の心残りとしては社員旅行に行けなかったことでしょうか。

2018年も弊社での開発が発表されている「Caligula Overdose -カリギュラ オーバードーズ-」(PS4)をはじめ、コンシューマーゲーム/アーケードゲームを中心に、いくつもタイトルの仕込みを行っているので、ぜひご期待ください!

改めまして、本年もどうぞよろしくお願いいたします。

 

代表取締役 佐々木 瞬


ゲーム開発会社のヒストリアとデジタルアニメーションスタジオのポリゴン・ピクチュアズ・ホールディングスが合弁会社「株式会社エレメントファクトリー」を設立

$
0
0

ゲーム開発会社の株式会社ヒストリアは、デジタルアニメーションスタジオの株式会社ポリゴン・ピクチュアズの主要株主である株式会社ポリゴン・ピクチュアズ・ホールディングスと共同で、次世代型の3Dモデルの制作に特化した合弁会社「株式会社エレメントファクトリー」(以下 新会社)を設立いたします。

 

ゲーム開発会社の株式会社ヒストリア(本社:東京都品川区、代表取締役社長:佐々木 瞬)は、デジタルアニメーションスタジオの株式会社ポリゴン・ピクチュアズ(本社:東京都港区、代表取締役社長:塩田 周三)の主要株主である株式会社ポリゴン・ピクチュアズ・ホールディングスと共同で、リアルタイムレンダリング用の3DCGモデルの開発と制作を行う3Dモデル制作会社「株式会社エレメントファクトリー」(以下 新会社)を設立いたしました

 

ヒストリアのアンリアルエンジン4を専門としたゲーム開発・映像制作の経験と、ポリゴン・ピクチュアズの豊富な3DCG映像制作のノウハウを生かした高品質なアセット制作のパイプラインを構築し、これからもコンシューマー、アーケードタイトルを含めたゲームコンテンツの開発の強化に努めていきます。

 

また、ヒストリアで開発・販売を行っている『Solid Vision』制作のノウハウを生かし、建築や自動車、教育等のゲーム以外の幅広いジャンルに複合展開可能なハイエンドで上質な3DCGモデルの開発も行っていきます。

 

新会社の今後の展開にご期待ください。

 

【新会社】

商号   :​株式会社エレメントファクトリー

代表者  :​代表取締役 齋藤秀行

本店所在地:​東京都品川区大崎5-6- 2 都五反田ビル西館8F(株式会社ヒストリア 内)

設立年月日:​2018年1月4日

主な事業 :​次世代型3Dモデル制作の制作・開発

Webサイト:​ http://www.element-factory.co.jp

 

 

【株式会社ヒストリアについて】

株式会社ヒストリアは「誰かの人生観を変えるような作品を作る」を企業理念とする、

アンリアルエンジン4(以下UE4)専門のゲームデベロッパーです。

2013年の創業以来、UE4を使ったゲームの企画・開発、コンサルティング業務、勉強会の講演

などUE4のスペシャリスト集団として活動しております。

コンシューマーゲーム、アーケードゲームの企画・開発をメインとし、最近はゲーム業界だけにはとどまらず、建築・車・教育などのエンタープライズ業界への進出も果たし、自社製品

バーチャルモデルルーム”SolidVision”」の販売を開始いたしました。

VRの開発も得意としており、常に業界の最先端の技術を研究・採用し高品質・一流の作品を作ることを心がけております。

その他製品情報など詳細はこちらをご覧ください。

 

 

株式会社ポリゴン・ピクチュアズ・ホールディングスについて】

株式会社ポリゴン・ピクチュアズ・ホールディングスは、アニメーション制作会社であるポリゴン・ピクチュアズの主要株主です。

ポリゴン・ピクチュアズは、1983年7月の設立以来、「誰もやっていないことを 圧倒的なクオリティで 世界に向けて発信していく」ことをミッションに掲げ、先端的なエンタテインメント映像の製作を手がける国内最大手のデジタルアニメーションスタジオです。マレーシアの制作拠点「Silver Ant PPI Sdn. Bhd.」を含め、400名以上のクリエイターが集結。最新技術を駆使し情熱をもってコンテンツ制作に力を注いでいます。代表作は『GODZILLA 怪獣惑星』『シドニアの騎士』『亜人』『BLAME!』『トランスフォーマー ロボッツインディスガイズ』『Lost in Oz』『ピングーin ザ・シティ』など。

今後も、世界的に評価が高い日本のアニメーションと、独自の技術・企画ノウハウとを融合させ、コンテンツ・ビジネスにおけるリーディング企業を目指してまいります。詳細につきましては、HPをご覧ください。

 

お問い合わせ:

株式会社ヒストリア

住所: 〒141-0032東京都品川区大崎5-6-2  都五反田ビル西館8F

メール: info@historia.co.jp

 

[UE4] ステートのブレンド時間を変数を使って制御

$
0
0

こんにちは、新米えんじにゃーの遠藤です!

(この挨拶が社内社外共に不評ですが止め時が分からなくなったので使っていきます。)

 

今回はAnimation Blueprint(以下ABP)のState Machineの話です。

ABPのState Machineという機能でアニメーションの状態管理を単純化し制御することができます。

https://docs.unrealengine.com/latest/JPN/Engine/Animation/StateMachines/index.html

 

簡単にテスト用のState Machineを作成しました。

Third Personテンプレートのグレイマンの”Idle”モーションと”JumpLoop”モーションを切り替えるだけのものです。

遷移のルールには変数のフラグを切り替えるとモーションも切り替わるようにしてあります。

 

StateからStateに遷移する際にルールを決めることができ、StateからStateへのブレンド時間もその内の1つです。

リンク(丸いやつ)のDetailsのBlend Settings内のDurationという項目でブレンド時間を操作できます。

ブレンド時間を2秒にしてみました。StateからStateに遷移するのが遅くなっているのが分かるかと思います。

しかし、これではゲーム中にブレンド時間は常に固定になってしまい変えたい場合にStateを複数作ることになります。

なので変数を使ってブレンド時間を操作する方法を紹介します。

 

まず、Blend LogicをCustomに変更します。

 

Customの横にEdit Blend Graphというボタンが表示されるので押すと、新しいグラフが開かれます。

“Source State Pose”が遷移前のStateのアニメーションで”Destination State Pose”が遷移後のStateのアニメーションです。

このグラフでは2つのPoseをブレンドすることによって、遷移中のアニメーションを操作することができます。

 

“Get Transition Time Elapsed”というノードでStateからStateへの現在の遷移の経過時間を取得できます。

このノードを使い、変数を使ってブレンド時間を操作するグラフを作成しました。

BlendノードのAlphaは0~1の値なので、変数で経過時間をClampしています。

 

変数を使ってブレンド時間を制御することができました!

リンクごとにBlend Graphを作らないといけないのが手間ですが、変数で単純にブレンド時間を操作する以外でも遷移時に特殊なことをしたい場合など、Blend Graphは他にも使用用途がありそうです。是非活用してみてください~!

Unreal Engine 4作品コンテスト「第9回UE4ぷちコン」を2月1日(木)より開催決定!

$
0
0

この度、ヒストリアは第9回UE4ぷちコンを「2、3日でサクッと作ってサクッと応募」をコンセプトに開催します!

UE4ぷちコンとは、株式会社ヒストリアが主催するゲームエンジン「UnrealEngine4」の学習を目的とする一般参加型ゲームコンテストです。参加者は短期間(約1か月)でテーマに沿った作品を制作・投稿し、入賞を目指します。

本コンテストは「UE4の学習」を目的に行っています。学習目的なのでプロもアマチュアも関係ありません!気になっている皆さん、ぷちコンに応募してUE4を覚えちゃいましょう!

そして前回に引き続き、ファウンドリ様・MODO JAPAN GROUP様のご協賛により、3月31日まで使える3Dモデリングソフト「MODO」の無償ライセンス発行が決定いたしました!申し込みは本日より開始しておりますので、ぷちコンのテーマ発表がされる前にMODOを触ってぷちコンに備えよう!

MODOとは・・・
MODOはゲームやバーチャルリアリティといったリアルタイム系のアセット制作やコンセプトデザイン、映像制作、さらには建築パースやプロダクトデザイン、微細なディテールまで求められるプロダクトの製造など、ハイエンドなモデリングから、UV、リギング、3Dペイント、スカルプティング、アニメーション、レンダリングに至るまで、ユーザーへより快適、かつ効率的な3D制作環境を提供する統合型の3DCGアプリケーションです。

MODOお申込みはコチラから↓
http://modogroup.jp/regist/petit_con_09

コンテストテーマ・開催概要は2月1日に発表いたします!お楽しみに!

※UE4ぷちコンはご協賛いただける企業様を募集しております。
詳細は下記よりお問い合わせください。
株式会社ヒストリア (info@historia.co.jp)

【告知サイト】 http://historia.co.jp/ue4petitcon09 (2月1日公開)
【主催】 株式会社ヒストリア
【共催】 エピック・ゲームズ・ジャパン
【協賛】FOUNDRY
MODO JAPAN GROUP

[UE4]VR内で、スライドドアを手動で開け閉めする方法

$
0
0

こんにちは。

以前、VR内で、回転式のドアを開け閉めする方法をご紹介したのですが、

[UE4] VR中にドアを手動で開け閉めする方法

今回は、同様の仕組みを用いて、スライドドアを開け閉めする方法をご紹介したいと思います。

スライドドアのBP以外の、基本的な構成は全て上記の記事内容と同じなので、

スライドドアのBPの作成部分のみの解説となりますので、

それ以外の部分については、以前の記事を参考にしていただけると幸いです。

 

(1)BP_Door_Slide

BP_Door_Slideの基本的な構成は、以前作成したBP_Doorのものを引き継ぐことになるので、

BP_Doorの子クラスとして、作成します。

1.BP_DoorのChildBlueprintClassの作成

BP_Doorを右クリックして、「Create Child Blueprint Class」を選択し、

BP_Door_Slideという名称にします。

これで、以前BP_Doorに設定した変数やInterfaceは、

新たに追加せずに、そのまま利用することができます。

 

2.スライドドア用スタティックメッシュコンポーネント

BP_Door_Slideを開いたら、ドアフレームと、ドアプレート用のスタティックメッシュを、

それぞれセットします。

 

3.ボックスコリジョン

ドアハンドル位置を取得するための、ボックスコリジョンの位置を、

セットしたドアプレートに合わせて、調整します。

コリジョンプリセットは、今回はすでにDoorHandleとなっているため、

設定はそのままで問題ありません。

 

4.変数

BP_Door_Slideで、新たに追加する変数は下記の3つとなります。

・HandleStartLocation・・・手が、取っ手を握った時点での位置を保存します。型はVectorとなります。

・MoveMaxValue・・・スライドドアの移動の最大値を保存します。型はFloatとなります。

・LastMoveValue・・・ドアから手を離した時点で、ドアが動いた値を保存します。型はFloatとなります。

 

5.関数

①MakeMaxMoveValue

内容としては、DoorPlateのバウンズのサイズから、

スライドドアの最大移動値を取得します。

 

②MakeVectorMoveValue

内容としては、ドアのY方向に対しての、

取っ手を握った手の移動量を取得します。

中身の説明は、下記画像のようになります。

 

③MoveSlideDoor

内容としては、②で取得した移動量を利用して、

ドアプレートを移動させるものとなります。

中身の説明は、下記画像のようになります。

 

6.イベントグラフ

最後にこれまで作成した変数、関数を用いて、イベントグラフに、ノードを配置していきます。

イベントは、下記の4つから成っています。

・Event BeginPlay

・Event Tick

・Event Open

・Event Close

①Event BeginPlay

Event BeginPlayでは、MakeMaxMoveValue関数をつないで、

ドアの最大移動値を取得します。

②Event Tick

Event Tickでは、Gateノードをはさんで、MakeVectorMoveValue関数と、MoveSlideDoor関数へつなげます。

③Event Open

Event Openでは、取っ手を掴んだ時の手の位置を保存します。

そして、GateノードのOpenへつなぎ、取っ手を握った時に、

Gateが開くようにします。

④Event Close

Event Closeでは、取っ手を離した時のDoorPlateの位置を、

LastMoveValueへ保存します。

そして、Gateを閉じます。

これで、BP_Door_Slideの完成です。

(2)マップへBP_Door_Slideの配置

マップへ、BP_Door_Slideを配置します。

プレイを開始し、ドアの取っ手の位置で、コントローラーのトリガーを引くと、

スライドドアの開け閉めができるようになりました!

ぜひ建築用VR等で、試してみてください!

 

 

[UE4]バッファに適用されるポストプロセスを変更する方法

$
0
0

各レンダーバッファを可視化する”Buffer Visualization”という機能はご存知の方も多いかと思います。

ここで表示されるバッファには、それぞれ固有のポストプロセスマテリアルが適用されており、シーケンサーからバッファ毎に分けて出力する際にも、それが反映されています。

UE4をレンダラーとして活用している映像業界の方は、レンダリング後のコンポジット作業を効率的に行うために、バッファを自由にカスタマイズして出力したい!という方が多いではないでしょうか?

この記事では、バッファに適用されるポストプロセスマテリアルを変更する手順について解説していきます。

コーディングは不要なので、アーティストの方も是非チャレンジしてみてください!

 

バッファに適用されるポストプロセスマテリアルってどこにあるの?

1.コンテントブラウザ右下の”View Options”を押下

2.プルダウンメニューから、”Show Engine Content”を選択

これで隠されていた”Engine Content”と”Engine C++ Classes”というディレクトリを可視化できます。

 

Engine Content → BufferVisualization というフォルダの中にBuffer Visualization用のポストプロセスマテリアルが全て入っています。

名前がそのままなので分かりやすいですね。

ご覧のように、中身はごく普通のポストプロセスマテリアルです。

下の画像は”SceneDepth”に適用されているポストプロセスマテリアルです。

SceneTextureでSceneDepthを取得して、0.0001倍した値の商が出力されている事がわかります。

↓こちらが出力されたバッファ画像。上のマテリアル式の通り、100m毎に0~1のグラデーションが繰り返しています。

 

あとはこのマテリアルを書き換えてしまえば、バッファの見た目を自由にカスタマイズする事が出来ます。

ただ、このままEngineディレクトリ内のアセットを直に書き換えてしまうと、複数人で作業しているプロジェクトの場合はデータの共有がしにくいですし、エンジン側に紐づくのでプロジェクト毎に内容を変える事ができません。

そこで、Contentディレクトリ以下のアセットを参照するようにパスを書き換える事で、取り回しを良くしましょう。

各バッファが参照するポストプロセスマテリアルのパスを書き換えよう

●Contentディレクトリ以下にポストプロセスマテリアルを作成

まず、置き換えたいポストプロセスマテリアルを、Contentディレクトリ内に作ります。

Engineディレクトリの既存のポストプロセスマテリアルをコピーしてから改造していく流れがお薦めです。

※今回は”Shading Model”バッファに適用されている”LightingModel”をコピーしました。

↓変化が分かりやすいように、中身はこんな感じに書き換えておきます。シーンカラーを反転。

(Material Domain=”PostProcess”、Blendable Location=”Before ToneMapping”です)

●BaseEngine.iniから、書き換えたいバッファの設定をコピーする

Engineディレクトリの中の、Config → “Base Engine”というiniファイルを見てみましょう

↓[Engine.BufferVisualizationMaterials] 以下が、

BufferVisualizationの各バッファとPostProcessMaterialを紐付けている記述です。

今回は”Shading Model”バッファを書き換えたいので、”ShadingModel”から始まる1行をコピーします。

 

●DefaultEngine.iniに記述を追加し、パスを書き換える

Projectのディレクトリ → Config → DefaultEngine.ini を開いて下さい

テキストの下の方に、[Engine.BufferVisualizationMaterials] と

先程コピーしたテキスト(今回は「ShadingModelから始まる1行」)をペーストして下さい。

それでは、下図のルールに従ってポストプロセスマテリアルの参照先とバッファ名を書き換えてみましょう。

これで全ての作業が完了です。

 

●ビューポートで確認

“Buffer Visualization” のプルダウンメニュー中に、先程設定したバッファ名(今回は”My Buffer”)が追加されていれば成功です。

※もし追加されていない場合は、パスの記述に誤りがある可能性が高いので、よぉぉく確認してみてください!

“MyBuffer”というバッファに、先程作ったネガポジ反転ポストプロセスマテリアルが適用されています

もちろん、シーケンサーから出力する事もできます。EXRでの出力にも反映されています

 

CG業界の方はぜひお試しください!

UE4ぷちコン ゲームジャム開催のお知らせ

$
0
0

2月17日(木)~3月19日(月)にUnreal Engine 4作品コンテスト 第9回UE4ぷちコン を開催いたします!

過去8回にわたって開催いたしました「UE4ぷちコン」ですが、おかげさまで回数を重ねるごとに応募作品も増え、UE4ユーザーが着々と増えていることを実感しております。
そして、前回初めて開催をし好評だった「ぷちコンゲームジャム」を今回も開催することとなりました。本イベントでは、即興で数人のチームを組み、2日間かけてぷちコン用ゲームを制作いたします。
コンテストに初めて参加する方、常連の方、どなた様もぜひご参加ください!

参加費無料!夕食付き!

 

お申込みはコチラからどうぞ!※先着25名(2月1日より募集開始)

【2/17-2/18(土・日)】第9回UE4ぷちコン ゲームジャム

 

スケジュール

2月17日(土)

時間 内容
10:30-11:00 集合(弊社セミナー室)
11:00-11:30 ゲームジャム概要説明・会社設備説明
11:30-18:30 ゲーム制作(休憩は各自自由)
18:30-20:00 夕食(弊社社内) ※弊社でご用意いたします。

2月18日(日)

時間 内容
10:30-11:00 集合(弊社セミナー室)
11:00-17:00 ゲーム制作(休憩は各自自由)
17:00-18:30 ゲーム発表会
18:30-20:00 夕食(弊社社内) ※弊社でご用意いたします。

場所

株式会社ヒストリア 内 セミナールーム
住所: 〒141-0032
東京都品川区大崎5-6-2 都五反田ビル西館8階

持ち物

  • PCは弊社でも用意いたします。(先着12名)ご自身のPCをお持ち込みいただいても構いません。
  • その他ゲーム制作に必要になりそうなもの
    (Oculus Rift/touch、HTC Vive、ゲームパッド等は弊社にもご用意はございますが、数に限りがございます。ご用意いただける方はぜひお持ちください)

注意事項

  • 自動車、自転車でのご来場は出来る限りご遠慮ください。会場は駐輪場・駐車場のご用意はしておりません。ご利用の場合は、公共の施設をご利用ください。
  • 会場内は禁煙となっております。喫煙の際は喫煙所をご利用ください。
  • 休憩・昼食は各自合間を見てお取りください。会場内は飲食可能ですが、会場を汚す可能性のあるもの・刺激臭のあるものの持ち込み、出前の発注はご遠慮ください。
  • 弊社以外のフロアへの立ち入りはご遠慮ください。
  • 開場時間(10:30)より前は会場に立ち入ることができません。
  • 20:00以降の会場への居残りは原則として受け付けておりません。

第9回UE4ぷちコン 開催概要

http://historia.co.jp/ue4petitcon09

運営

株式会社ヒストリア ( Twitter公式アカウント )

協賛

TSUKUMO

MSI

 

第9回UE4ぷちコン 協賛社ライセンス一覧

$
0
0

2月1日より開催しております「第9回UE4ぷちコン」ですが、今回もたくさんのスポンサー企業様にご協力いただいています。

こちらのページでは今回ご協賛いただいている企業様のソフトウェアライセンスをまとめました。

ぜひこの機会にさわってみてください!

 

ソフトウェア 企業名
【ぷちコン専用】
MODO
MODOはゲームやバーチャルリアリティといったリアルタイム系のアセット制作やコンセプトデザイン、映像制作、さらには建築パースやプロダクトデザイン、微細なディテールまで求められるプロダクトの製造など、ハイエンドなモデリングから、UV、リギング、3Dペイント、スカルプティング、アニメーション、レンダリングに至るまで、ユーザーへより快適、かつ効率的な3D制作環境を提供する統合型の3DCGアプリケーションです。

【申し込みはこちら】

FOUNDRY
MODO Japan Group
FOUNDRYは英国に本社をおくCGソフトウエアの大手企業です。NUKE、MARI、KATANA、MODOといったクリエーティブなソリューションをメディア、エンターテインメント、デザイン業界に提供しています。

MODO JAPAN GROUPではFOUNDRY社製品である3DCGツールMODOの日本語版の開発と販売、および日本国内におけるMODOに関するマーケティング活動、トレーニングなどを行っております。

 【ぷちコン専用】
IncrediBuild
※先着60名Agent + Up to 8 cores (5台分)
IncrediBuild for Visual Studio C/C++ (5台分)
IncrediBuild for Make & Build Tools (5台分)
IncrediBuild for Dev Tools (5台分)
IncrediBuild for Playstation® 4 and Vita (5台分)
IncrediBuild for Xbox One (5台分)
IncrediBuild は様々な開発ツールを高速化するテクノロジーです。Unreal Engine 4におけるビルドやシェーディングコンパイル等の開発プロセスを、社内のネットワークに既に繋がっているPCのCPUのアイドルタイムを利用することで、並列分散実行し、最大90%短縮します。IncrediBuildはUnreal Engine 4にインテグレートされているため、煩わしい設定作業は全く必要ありません。もちろん、高価なHPCを導入する事や、ソースコードの変更も必要ありません。

【申し込みはこちら】

インクレディビルドジャパン株式会社 IncrediBuildは、ソフトウェア・アクセレーション・テクノロジーを牽引するソリューション・プロバイダーです。IncrediBuildは現在20社のフォーチュン100企業を含む2,000社を超える企業や組織の10万を超えるユーザーにご利用いただいています。IncrediBuild の分散コンピューティング技術はコード・ビルド高速化の業界標準のソリューションです。
【ぷちコン専用】
WWISE 限定商用ライセンス
本ライセンスは商用プロジェクトに無償でご使用頂け、
すべてのWwiseの機能をお使いいただけます。
この限定商用ライセンスではWwiseプロジェクト内で
最大200個のメディアアセット(.wav)を使用することができます。
この200個のアセット制限を超える場合には、別途適切な商用Wwise
ライセンスを購入する必要があります。
申込時に「UE4ぷちコンで使用」とご記載ください。 

【お申込みはこちら】

audiokinetic株式会社 オーディオミドルウェアのWwise(ワイズ)は、様々な機能を備えた
業界をリードする最先端のゲーム開発用インタラクティブオーディオ
ソリューションです。
インディ小規模開発者から巨大予算のプロジェクトに至るまで、
Wwise は様々なプロジェクトに対応いたします。
CRI ADX2 LE  「ADX2 LE」は、ゲームならではのサウンド演出を手軽に実現する、便利な機能を数 多く搭載したサウンドミドルウェアです。最先端のゲームサウンド制作現場でのニー ズやノウハウが反映されており、高度なサウンド演出から細かい音の調整まで、全て がグラフィカルなツール上で直感的に行えます。

【申し込みはこちら】

 株式会社CRI・ミドルウェア CRI・ミドルウェアは、4,000以上のタイトルに採用されているゲーム開発向けミド ルウェア製品群「CRIWARE」を提供しています。 各種ゲーム機、スマートフォン、VRデバイスだけでなく、ブラウザにも対応したサウ ンドミドルウェア「CRI ADX2」、ムービーミドルウェア「CRI Sofdec2」で、ゲーム 開発を強力に支援します
 OPTPiX SpriteStudio 2017年秋に大幅アップデートを遂げた OPTPiX SpriteStudio は、現在、”UnrealEngine”に鋭意対応中です。第9回UE4ぷちコンでは、皆さんからの開発中の”SS6PlayerForUnrealEngine4”のフィードバックをお待ちしております!
https://github.com/SpriteStudio/SS6PlayerForUnrealEngine4【申し込みはこちら】
株式会社ウェブテクノロジ・コム 『クリエイターを笑顔に。』
ウェブテクノロジは、クリエイターの創造を助けるソフトウェア開発会社です。業界最高と言われる画像最適化技術を活かした便利かつユニークな製品開発をしています。

 


[UE4][C++]シーケンサーで非対応のパラメータを制御可能にする方法

$
0
0

エンジニアの山中です。
本記事では、シーケンサーを使用する中で発生し得る問題と解決法をご紹介します。

【問題】

シーケンサーを使用していると、とあるパラメータの値をシーケンサー内で書き換えたいのに非対応となっているケースがあります。
今回は「CaptureComponent2D」のパラメータ「CaptureEveryFrame」を例にご説明します。



「CaptureEveryFrame」は、シーンのキャプチャを常に行い続けるかどうかのフラグです

制御可能なパラメータに関しては、LevelSequenceアセットを開くことでパラメータ横にアイコンが付き
シーケンサー内からもパラメータが選択可能になるのですが、「CaptureEveryFrame」には
アイコンも無ければ、項目にも挙がっていません。


シーケンサーで制御可能であることを示すアイコンとシーケンサー内のパラメータ追加欄
他のパラメータ「CaptureSource」「CaptureSortPriority」は制御可能のようです

それでは、シーケンサー内で「EveryCaptureFrame」を制御可能にするにはどうすれば良いかを探ってみます。

【調査】

そもそも制御可能、不可能の項目は何が違うのでしょうか?ソースの各定義を見てみます。

CaptureSource(制御可能パラメータ

UPROPERTY(interp, Category=SceneCapture, meta=(DisplayName = "Capture Source"))
TEnumAsByte CaptureSource;


CaptureSortPriority(制御可能パラメータ

/** Capture priority within the frame to sort scene capture on GPU to resolve interdependencies between multiple capture components. Highest come first. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=SceneCapture)
int32 CaptureSortPriority;


CaptureEveryFrame(制御不可能パラメータ

/** Whether to update the capture's contents every frame.  If disabled, the component will render once on load and then only when moved. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=SceneCapture)
bool bCaptureEveryFrame;

まず「CaptureSource」に注目すると、UPROPERTYに他とは異なる「interp」というプロパティが設定されています。
公式ドキュメント」を見ると、どうやらこの設定を行うことでマチネからアクセス可能になるようです。
実際に「CaptureEveryFrame」に「interp」を設定してみた結果、正常に項目が追加されました。

ただ、「CaptureSortPriority」に関してはプロパティ「interp」が設定されていないにも関わらず
制御可能になっているので、制御方法は他にもあるはず!ということでもう少し調査を進めます。

次に、実際に項目が表示されるタイミングではリスト化された情報が存在していると予想して
そのリストがまとめられる条件を探ってみます。
まずは「SceneCaptureComponent2D」の[+Track]ボタンが押された際に通る処理を探します。


ここに注目!

ソース内で「”Properties”」と書かれてある場所を全検索します。
(この文字列が使用されているソースの周辺で項目の追加を行っているはず、と予測)


アヤシイ

ということで、「FSequencerObjectBindingNode::HandleAddTrackComboButtonGetMenuContent」を通ることが判明しました。
また、予想通り「KeyablePropertyPaths」というTArray変数に項目が追加されていることを確認しました。
次に、このTArray変数に追加を行う処理が記述されている場所を探します。

bool bIsPropertyKeyable = Sequencer.CanKeyProperty(FCanKeyPropertyParams(Class, PropertyPath));

この関数内を辿っていくと、以下の条件式が見つかります。

if (((bFoundValidFunction && bFoundEdit && !bFoundEditDefaultsOnly) || bFoundValidInterp) && !bIsHiddenFunction)
{
	return DelegatePtr;
}

条件:セッター関数が存在していて編集可能である、または「Interp」が設定されていること(関数として機能していること)

どうやら上記の条件を満たしたプロパティのみが項目として表示され、シーケンサーから制御可能になるようです。
ここで、先程疑問となっていた「CaptureSortPriority」に関して、定義されているヘッダーを詳しく調べてみると・・・

/** Changes the value of TranslucentSortPriority. */
UFUNCTION(BlueprintCallable, Category = "Rendering|SceneCapture")
void SetCaptureSortPriority(int32 NewCaptureSortPriority);

確かにセッター関数が存在していました。

【結果】

・UPROPERTYにてプロパティ「interp」を設定する
・セッター関数を用意する(Set「変数名」)※bool型の変数の場合は接頭辞「b」を除いた関数名にする必要があるようです。

シーケンサーで制御可能なパラメータは上記のいずれかの方法を行っていました。

ただ、今回のケースだと上記2通りの方法をそのまま行おうとするとエンジンソースの修正が発生してしまいます。
そこで、せっかくなのでエンジンソースを修正しない方法を取って解決とします。

※補足ですが、ブループリントに作成した変数をシーケンサーで制御したい場合は
変数のプロパティの「Expose to Cinematics」にチェックを入れます。

【解決方法】

「USceneCaptureComponent2D」を継承した「UTESTSceneCapture2DComponent」
「ASceneCapture2D」を継承した「ATESTSceneCapture2D」をそれぞれ作成して、
コンポーネント側の派生クラスにセッターを定義します。

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Engine/SceneCapture2D.h"
#include "TESTSceneCapture2D.generated.h"

UCLASS(hidecategories = (Collision, Material, Attachment, Actor), MinimalAPI)
class ATESTSceneCapture2D : public ASceneCapture2D
{
GENERATED_UCLASS_BODY()
};

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Components/SceneCaptureComponent2D.h"
#include "TESTSceneCaptureComponent2D.generated.h"

UCLASS(hidecategories = (abstract, Collision, Object, Physics, SceneComponent, Mobility))
class TEST_API UTESTSceneCaptureComponent2D : public USceneCaptureComponent2D
{
GENERATED_UCLASS_BODY()

public:
	UFUNCTION()
	void SetCaptureEveryFrame(bool bInCaptureEveryFrame) { bCaptureEveryFrame = bInCaptureEveryFrame; }
};

セッターには「UFUNCTION()」も忘れずに記述してください

次に、「ATESTSceneCapture2D」のコンストラクタにて、派生クラスの「UTESTSceneCapture2DComponent」を
使用するように設定します。
この辺りの詳しい説明は過去の記事「[UE4] ObjectInitializerでコンポーネント生成を制御する」をご覧ください。

#include "TESTSceneCapture2D.h"
#include "TESTSceneCaptureComponent2D.h"

ATESTSceneCapture2D::ATESTSceneCapture2D(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer.SetDefaultSubobjectClass<UTESTSceneCaptureComponent2D>(TEXT("NewSceneCaptureComponent2D")))
{
}

UTESTSceneCaptureComponent2D::UTESTSceneCaptureComponent2D(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	bCaptureEveryFrame = false;
}

「SceneCapture2D」がメンバとして所持している「SceneCaptureComponent2D」を
「TESTSceneCapture2D」の場合は「TESTSceneCaptureComponent2D」として扱うように設定

上のソースでは、ついでに「CaptureEveryFrame」をデフォルトでOFFにしています。
理由は、シーンキャプチャの処理は負荷が掛かってしまうので本来不要なタイミングではOFFにするのが良いのですが、
配置の度に設定するのは手間ですし、設定ミスも発生してしまう為です。
(ただ、使い方やプロジェクト規模次第になりますので、参考程度に)

これで設定は全て完了したので、テストレベルに「ATESTSceneCapture2D」を配置してシーケンサーを確認します。

【最後に】

実はこの問題、既に「こちらの質問」で解決方法が提示されています。
ただ、今回の場合エンジンソースの修正を行わない、というのと
問題に対して改めてソースを追って原因を調査してみる、といった視点からまとめてみました。
参考になれば幸いです。

[UE4] SimpleSound を使って音をランダムに鳴らす

$
0
0

エンジニアの加藤です。

今回は、SimpleSound という Audio 関連要素について紹介したいと思います。

概要

SimpleSound は、再生のたびに登録された複数の SoundWave の中からどれか 1 つを重み付きランダムで選択して再生する SoundBase クラスです (名前からは挙動が想像しにくいですね……)。

UE 4.16 から追加された Sound Utilities Plugin を有効にすると使えるようになります。記事執筆時点では Sound Utilities Plugin はまだ β 版扱いですのでご注意ください。

作成方法

まず、Content Browser 上で任意の SoundWave を (複数) 選択します。

右クリックし、Create Simple Sound を選択してください
(このメニュー項目が見えない場合は、選択しているものが SoundWave であることと、Sound Utilities Plugin が有効になっていることを確認してください)。

これで SimpleSound が作成されます。

設定方法

作成した SimpleSound をダブルクリックして開きます。

Variations カテゴリの Variations に、SimpleSound 作成時に選択していた SoundWave が設定されていることがわかります。これが再生候補となる SoundWave となります。後から SoundWave を追加・削除することも可能です。

Probability Weight は、ランダム選択時の重みの設定です。この値を高くするほど再生されやすくなります。上の画像の設定の場合、EnterPlayInEditor の方は 4.0 / (4.0 + 1.0) * 100 = 80% の確率で再生されます。

Volume Range は音量の範囲、Pitch Range は音の高さの範囲の設定です。上の画像では、Enter_Play の方の Volume Range が [0.8, 1.0] となっているので、Enter_Play が再生される場合は、元より少し小さい音量で再生される可能性があります。

使用方法

SimpleSound は SoundBase ですので、SoundWave や SoundCue と同じような方法で再生させることができます。

例えば以下の画像のように、AudioComponent の再生対象として SimpleSound を設定することが可能です。

また、やはり SoundWave などと同じように、Content Browser 上で再生ボタンをクリックすることで音の確認ができます。

その他、Unreal Audio Engine を有効にすることで Effect をかけることもできます。

SoundCue との比較

SoundCue の扱いに慣れている人であれば、以下の画像のように、Modulator Node や Random Node を使って SimpleSound と同等のものを実装できることにお気づきかと思います。

しかし、SoundCue で実装した場合は各 Node に設定が散ってしまいますし、再生候補となる SoundWave が増えてくると Node のセットアップ自体が大変になります。

SimpleSound でできる範囲で事足りるのであれば、SoundCue ではなく SimpleSound を使った方が、素早く作成・設定でき、作業効率が向上するかと思われます。

まとめ

地味な機能ではありますが、複数音色のランダム再生は使用頻度の高い処理だと思いますので、上手く活用してみてください。

[UE4]UMGのNavigation機能を使ってみる

$
0
0

今回はUMGのNavigation機能について解説していきます。
この機能を使うと入力処理を書かずにキーボード・ゲームパッド操作に対応できます。
クリック操作も生きるのでPC向けのゲームのように複数の操作に対応できます。

手順

①Widgetを配置
※今回はButtonWidgetを使用します。

②IsFocusableにチェックが入っていることを確認

③初期カーソルが合うボタンをSetKeyboardFocusで設定

※Constructイベントではうまくフォーカスしないので表示するイベントを作って呼ぶようにして下さい。

④UIの入力設定
Navigationの項目で上下左右・前後を設定します。
上下左右はキーボードの上下左右、ゲームパッドのアナログスティック、上下左右キー
前後はTabとShift+Tabでの操作になります。
とりあえずはEscapeでOKです。

⑤フォーカスがわかる点線の表示・非表示設定
プロジェクトの設定→User Interface→Focus→RenderFocusRuleを変更

Always         常に表示
Non Pointer  マウスカーソルが別なWidgetをクリックした場合消えます。
Navigation    Only Widgetにフォーカスが移動した時表示
Never           常に非表示

⑥Widgetを作成し入力を受け付けるようにします。

ゲーム中の入力を無効にしたい場合は「SetInputModeUIOnly」
ゲーム中の入力をそのまま有効にしてUIを操作したい場合は「SetInputModeGameAndUI」を設定して下さい。

クリックイベントにも対応
一部のWidgetはクリックイベント(OnClicked)に対応しています。(ボタン、チェックボックス等)
スペースバーとエンターキー、コントローラーのAボタン(EKeys::Gamepad_FaceButton_Bottom)でボタンをクリックできます。
注意する点としては、独自に作ったWidgetではクリックイベントは対応してません。
OnKeyDownをオーバーライドして 独自で実装する必要があります。

うまくいかないときチェックするべき点
・collisionの設定
Visibleになっているか確認してください。
コリジョンが有効になっていないとフォーカスされません。
逆にフォーカスさせたくない場合はコリジョンを無効にして下さい。

・配置
XY方向に重なっていないと次のWidgetを探す事ができませんので注意して下さい。
もしレイアウト的に特殊なことをしたい場合は、Navigationの設定でExplictで移動先のWidget名を指定することで、
次の移動先を指定することができます。

 

ほかにTips的なことを…

全然関係ない部分をクリックした場合フォーカスが外れてしまう

これは何らかのアプリ側の仕様をきめて独自に実装する必要があります。

例として…
TickですべてのボタンのHasKeyboardFocusを確認してすべてのフォーカス外れていることを検知したら、
先頭のボタンをSetKeyboardFocusしてフォーカスを戻してあげる処理を用意してあげると良いかと思います。

フォーカスイベントを使ってアニメーション

ゲームらしいUIを作りたい人はアニメーションを使いたくなる人もいるかと思います。
その場合はフォーカスイベントを使用するとフォーカスされたタイミング、外れたタイミングで処理を行えます。
フォーカス時
OnAddedToFocusPath
フォーカスが外れた時
OnRemoveFromFocusPath
OnFocusLost

キーを追加・変更したい

デフォルトの操作じゃぁ満足できないあなた!!
C++プロジェクトであれば、変更可能です。
やり方は簡単、NavigationConfigを継承して独自のNavigationConfigを用意しFSlateApplicationに設定するだけ
エンジンコード変更する必要なし!!

プロジェクトのModuleRuleに「Slate」を追加

XXX.Build.cs

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "Slate" });

独自のNavigationConfigのヘッダーファイル

#include "NavigationConfig.h"

class UMGTEST_API FCustomNavigationConfig : public FNavigationConfig
{
public:
	FCustomNavigationConfig();
	virtual ~FCustomNavigationConfig();
};

Cpp

#include "NavigationConfig.h"

FCustomNavigationConfig::FCustomNavigationConfig():
	FNavigationConfig()
{
	// デフォルトのキーイベントを無効にしたい場合はEmptyで初期化をしてください。※アナログスティックの入力は無くならないです。
	//KeyEventRules.Empty(); 
	
        // WASDのキーを追加
	KeyEventRules.Emplace(EKeys::A, EUINavigation::Left);
	KeyEventRules.Emplace(EKeys::D, EUINavigation::Right);
	KeyEventRules.Emplace(EKeys::W, EUINavigation::Up);
	KeyEventRules.Emplace(EKeys::S, EUINavigation::Down);
}

独自のFNavigationConfigFSlateApplicationに設定します。
※一度初期化すれば問題ないので今回はGameInstanceのInit関数で初期化します。

void UMyGameInstance::Init()
{
	Super::Init();
	
	FSlateApplication::Get().SetNavigationConfigFactory([] { return MakeShared<FCustomNavigationConfig>(); });
}

 

ソースコードのコメントに書きましたが、KeyEventRules.Empty(); を使っても、アナログスティックでの入力は無くなりません。
どうしても無くしたい場合はGetNavigaitonDirectionFormAnalogInternalをオーバーライドして独自に拡張する必用があります。
もっとNaviagetionの仕組みを拡張したい場合はNavigationConfig.hあたりを参考にしてみると良いかもしれません。

 

UE4ぷちコンゲームジャムを開催いたしました!

$
0
0

こんにちは。

広報です。

 

先日、弊社主催の「第9回UE4ぷちコン」の関連イベント、「UE4ぷちコンゲームジャム」を2月17日、2月18日の2日間で開催いたしました!

当日は12名の参加者の方にお集まりいただきました!

前回も参加してくれた方、初めて参加した方、ぷちコン常連さん、社会人も学生も入り混じって大変楽しかったですね!

みなさん2日間真剣に作品製作に取り組んでいました。

 

2日目の最後には恒例のゲーム発表会もしました。

個性的な作品がたくさん出来上がりました。

作品の公開は3月19日以降ですが、Twitterで#ue4conJamのタグでいくつか写真も上がっていますので、ご興味のある方はぜひ見てみてください!

 

また、今回はレンタルPCのご協賛でMSI様TSUKUMO様にご協力いただきました。

ありがとうございました!

 

3月には大阪駆動開発様の主催で大阪でもゲームジャムを開催予定です。「【大阪】大阪でも第9回UE4ぷちコン ゲームジャム」※ヒストリア公認のイベントです

関西方面の方はぜひご参加ください!

まだまだ第9回UE4ぷちコンは開催中です!

素敵な作品のご応募お待ちしております。

よろしくお願いいたします!!

ヒストリア・AMG産学共同プロジェクト「Sacred Four」がリリースされました!

$
0
0

AMGの学生と商用作品を作るアンリアルチャレンジにて制作した、新作VRゲーム「Sacred Four」がリリースされました!

Steam http://store.steampowered.com/app/751380/Sacred_Four/

弊社佐々木が監修し、企画・制作はAMGの学生チームが行いました。

VR機器をお持ちの方はぜひ遊んでみてください!

MoguraVR様で記事を書いていただきました!ありがとうございます!

Viewing all 984 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>