投稿

10月, 2018の投稿を表示しています

PS4コントローラーに対応する2

イメージ
昨日の PS4コントローラーに対応する ではうまくいかなかったのですが、いろいろ調べてみるとkatzeさんの作った DirectInputPadPlugin というプラグインがいい感じにDirectInputに対応するみたいなので試してみました。 UE4に入っているWindows RawInputのプラグインと比べてみると… ・各種設定はちゃんと揃っていて不具合は無し、導入後はあまり調整の必要はなさそう ・プラグインをソースからビルドする必要あり ビ、ビルドだと…!? 一気に難易度上がった!! ただUE4に入ってるプラグインのままだとオフセット値の設定やデッドゾーンの設定、キーボード入力時とパッド入力時で処理を変える必要もありそうだしXinputとDirectInputのパッドでも処理を変える必要がありそう(プラグイン設定の中ででも完結しそうではあるが)、なによりボタンが効きが悪いし上下左右方向ボタンが対応してない。 やるしかないか…、ビルド… というわけでやってみました! ビルドの方法も こちら に書いてあります。 いきなりVisualStudioのインストールから始まりますが、説明が十分ですごくわかりやすく、書いてる通りにやれば…、できました!! 注意点は特にないですが、DuakShock4を接続してからUE4を立ち上げないと認識しないというところくらいですかね。 さて、そのままTPSテンプレートで動かしてみましたが、スティックの動作はインプット設定をいじらずそのままいけました。 凄い!! ABXYボタンはXinputのものとは違ってるようですが、BPのSetKeyMapというノードで設定すればOK。 凄い!! LRトリガーの数値はXinputは0~1でしたがDS4では0.5~1が返ってきていたのでこちらもSetKeyMapで設定。 若干トリガー中央付近の0.5範囲が広いですが、射撃ボタン的な利用方法では問題ないかと。 インプット設定はテンプレートのままでOK AのジャンプボタンとRトリガーをリマップ というわけでこれをもとに今作成中のRPGに組み込んでみます。 Katzeさんありがとうございました!!

PS4コントローラーに対応する

イメージ
UE4はゲームパッドはxinputしか対応してないからPS4のコントローラーに対応させなくてもいいやー、と思っていた時期がありました、私にも… でもゲームパッド推奨で作っているゲームで、特に日本で、PS4コントローラーに対応させないってどうなの?ですよね? 一応UE4でもRAW INPUTのプラグインがあるみたいだし。 で調べましたが、あんまり書いてあるところがなく、書いてあっても微妙ですーって内容ばかり… ただあまり難しそうではなかったのでやってみました! そしてホントに微妙でした!w まずはおもむろにPS4コントローラーをPC(Windows10)に接続し、ドライバが勝手にインストールされるのを待ちます。 すると勝手に使えるようになりました。 便利! 設定→デバイス→デバイスとプリンター にWireless Controllerがあるのを確認したら右クリックでゲームコントローラーの設定→プロパティで動くことを確認できます。 パッドの動作を確認 ではUE4に組み込んでみるべくTPSテンプレートを立ち上げて、PluginsからWIndows RawInputをEnableにして再起動。 プロジェクト設定のインプットの所で 左スティックY軸(前後の動き)をGenericUSBControllerAxis3 左スティックX軸(左右の動き)をGenericUSBControllerAxis4 右スティックX軸(カメラ左右)をGenericUSBControllerAxis2 右スティックY軸(カメラ上下)をGenericUSBControllerAxis1 にして、Scaleを下のようにします。 DualShock4は送られてくる数値が-1から1ではなく0から1なので scaleを2倍にして、xinputとは逆の数値のものにはマイナスをつける このままでは中央値がずれているのでオフセットをBPの方でかけます。 プラグインの設定の方でもオフセット値を設定できるみたいですがとりあえずなのでBPの方で… 強引にオフセット値1.0を加減算してるのでxinputのパッドはおかしくなります と、こんな感じでPS4コントローラーでも動くようになります。 が!! まず、中央値が微妙

UIの操作について

イメージ
RPGってUIを開いて操作することが多いですよね。 バトルではコマンドを選択し、場合によってはアイテムやスキルを選択したり。 フィールドではキャンプを開いてステータスやアイテム、武器のアレコレ。 キャンプのトップメニュー これらの操作をウィジェット毎に組み込めれば楽で、実際OnKey系の関数を使えばいけるんですがこれってキー決め打ちなので、プロジェクト設定のインプットのActionMappingsなどで設定したキーは受けることができないんですよね。 ということでインターフェース! 以前から何度もインターフェースについて調べてみたものの意味がわからなかったのですが、とあるサイトに、インターフェースは投げっぱなしジャーマンだと。 なるほど!そういうことなのか! 簡単にその方法を書いてみます。 まず、ブループリントインターフェース(ここではTestIFという名前を付けました)を作って、マイブループリントに関数を追加します。 右上。ここではTestA、TestB、TestCを追加 適当にウィジェットを作っておいて、 (ここでは適当にテキストボックスを追加) ドカンと真ん中にテキストボックスを配置 次にキーインプットに対して関数を呼び出します。 ここではTPSテンプレートを使ったので、ThirdPersonCharacterのBPのイベントグラフに記述します。 まずWidgetの変数を追加(ここでは変数名をWidgetにしました)、適当なタイミング(ここではBegin Play)でウィジェットを作ってWidget変数にセット。 アクションマッピングで定義しておいたTestA、TestB、TestC(ここではキーボードの1,2,3にしました、もちろんActionMappingsで設定した入力でもOK)がインプットされたとき、Widgetの変数からそれぞれTestA、TestB、TestCの関数(ターゲットはTestIF)を呼び出す処理を作成。 インプットに対してそれぞれ関数を呼び出し 先ほど作ったウィジェットのイベントグラフで クラスの設定ボタンを押して、インターフェースのところの実装インターフェースにTestIFを追加( ココ重要 )、 イベントグラフ内にイベントを追加(右ク

フィールド⇔バトルについて

イメージ
アンリアルエンジン4を使って、どうやってこのゲームを作っていったか説明します。 前にも書きましたが、私はプログラマーでもデザイナーでもプランナーでもない素人ですので、開発内容をさらすのはかなり恥ずかしいのですが、何か少しでも参考になることがあれば…と思います。 玄人の方々、間違い等々たくさんあると思いますが、お手柔らかにご指摘いただければ幸いです!! 【レベルについて】 さて、このゲーム、ターン制RPGということでフィールドでエンカウントするとバトルに入る、つまりフィールドとバトルの2つのパートを行ったり来たりするのですが、これをどうプログラムに落とし込んでよいのか… 商用ゲームを見ていると、フィールドでエンカウントするとロードが入ってバトルに、バトルが終わるとまたロードが入ってフィールドにと動作しているので、たぶんフィールドのレベルとバトルのレベルを分けて作って、都度都度ロードするのが正しいのかと思うのですが、パーシスタントレベルとかサブレベルとかレベルストリームとかやるんですよね…? あー無理ですね、私のような素人では理解できない。 というわけで… フィールドとバトルを同じレベルに突っ込みましたよ! ついでにミニマップとUI用の銃の表示も同じレベルに突っ込みました。 こんな感じ ↓ 中央から左にかけてフィールド 右にバトル さらに右のちっちゃいのが銃表示 中央下のちっちゃいのがミニマップ 銃表示とミニマップはどちらもUI用でScene Capture 2DでキャプチャしてUIに表示しています。 この方法で、フィールドでエンカウントしたらフィールドのキャラたちを全員一時停止してPlayerキャラをUnpossess、バトルの所にバトルで使うキャラたちをスポーン→カメラを切り替えてバトルへ突入、 バトルが終わったらバトルのキャラたちをデストロイして、リザルト処理を挟んでフィールドに戻る(一時停止解除)、 といった流れで作ってみました。 【バトルの制御】 フィールドではTPSテンプレートを利用して、 プレイヤーはプレイヤーのPawnやPlayerController、 敵は敵のPawnやAIController、 味方は味方のPawnやAIController にプログラムをゴリゴリ書いていけば

フィールドの自動生成(2)

イメージ
コンストラクションスクリプト ステキな響き…、憧れるわぁー、BeginPlayを使う前に実行されるところがプロっぽい。 ということでフィールドの自動生成をコンストラクションスクリプトを使って実装してみたのですが… まず、フィールドの種となるアクター(ここではMainUnitとしました)のコンストラクションスクリプトにブロック生成させて実際のレベルにブロックをスポーン… スポーンノードが無い!! コンストラクションスクリプトではアクターをスポーンさせることが出来ないのか!! では、ブロックをアクターとせず、ブロックのスケルタルメッシュをSetSkeltalMeshで置いていく方法をとってみる。 おぉ!MainUnitを配置しただけでフィールドが生まれた! MainUnitをちょっと動かすだけで違うフィールドに変わる! かっこいい… コンストラクションスクリプトで素のブロックを表示 ブロックを表示させただけではゲームにならないので 敵をスポーン(敵のパトロールポイントが自動でスポーンされる) 柱をスポーン(柱をスポーンさせると自動でカバーポイントがスポーンされる) スタートとゴールのアクターをスポーン 宝箱をスポーン イベントトリガーをスポーン エレベータアクターをスポーン 等々… これらをMainUnitのBeginPlayでやっつけると最初の内はうまくいっていたのですが、なんか色々実装していくと段々上手くいかなくなってきて… これはスポーンされてない内に別のアクターがスポーンされ、そのアクターは前にスポーンされてなくてはならないものが含まれてたりして上手くいってないんじゃ?? 柱のカバーポイントとか特にあやしい。 プレイヤー達のスポーンをレベルBPにさせてる辺りもタイミングが狂う原因ぽい。 そして素人お得意の、適当な所にDelayノードをぶっ込む。 ミニマップの、踏破で色を変える処理を入れるために今歩いているブロックのミニマップの色を塗るとかやり始めると、もはやブロック踏んだらミニマップを塗るって処理をブロックアクターに任せた方がいいんじゃね?ということになり コンストラクションスクリプトにブロック(のスケルタルメッシュ)を生成させること

フィールドの自動生成(1)

イメージ
プロシージャル… ステキな響き…、憧れるわぁー、特にプロってところがプロっぽい。 ※プロシージャル:日本語では「手続き型」「手続き的」などと訳され、数式や処理を組み合わせ、何らかの操作を行うこと。 ゲームにおけるプロシージャルは何なのか、定義が難しいとのことですが、ある数値なり条件なりを与えて何かを自動生成させること、と考えて良いんですよね? で、あこがれのプロシージャルですが、RPGで自動生成と聞くとあんまり印象よくないですよね… 自動生成ダンジョンて、延々と似たような構造が続く退屈なダンジョン。 やっぱRPGって長過ぎるから自動生成でも飽きちゃうんですかね。 ただ、実際に1人でRPGの決め打ちフィールドを作ってみると1人で作ったもんだから全部構造がわかっちゃってて全然面白くないし、そのフィールドがプレイヤーにとって面白いかどうかもわかんないんですよね… というわけで禁断の自動生成ダンジョンに手を出しました。 ただ自動生成ダンジョンの印象が良く無いので、自動生成フィールドと呼ぶことに。 このゲームにダンジョンは出てきません。攻略する地面は全てフィールドですw 【ブロックの作成】 フィールドは12個のパターンのブロックとT字路のブロックを基本にしました。 ただ、I字とL字とT字しかないのでI字とL字に道幅を広くしたバリエーションも追加してみました。 1つのブロックの大きさは可変とさせたいので、まずは(0,0)を始点に1マスずつのブロックを仮想で自動生成させて、それを実際のブロック(とりあえずデフォのブロックは1辺30mの正方形)を生成する際に30mを掛けてWorldLocationに指定してブロックをスポーンさせる、という形を取りました。 12個のブロックパターン (y方向が±逆の設定になってしまいましたが) こんな感じで、12個の基本ブロックパターンは自分の座標が(0,0)の時、来た方向の座標と向かう方向の座標を仕込んでおきます。 例:タイプ0のI字のブロックは、(0,0)の時、来た方向の座標は(0,-1)、向かう方向の座標は(0,1)とこんな具合にPre座標、Post座標をブロックタイプ12個分配列変数に設定しておきます。(y方向はプラスマイナス逆になってしまってい

ゲーム内容について

イメージ
今作っているカバーアクション+ターンベースRPGのゲーム内容について紹介させてください。 特徴は ・近未来世界観 ・銃で戦う ・カバーアクションをフィーチャー ・ターンベースRPG で、ざっくりどんなゲームかと言うと… メ〇ルギアっぽい雰囲気でペ〇ソナ5のようなシステムのRPG  です! シナリオは…、あるといえるほどは無い! アジトにて ゲームの大まかな流れは 【アジト】 ⇔ 【作戦行動】 【作戦行動】は、いわゆるシンボルエンカウントのRPGでバトルを繰り返してゴールを目指す。 と超絶シンプルですが、【アジト】【作戦行動】でそれぞれやれることを書いていきます。 【アジト】 仲間と会話(これをイベントの基軸にしてシンプルに手を抜きたいなぁと) 装備品の補充(ショップとか作らず手を抜きたいなぁと) 銃の作成(手に入れた素材を合成して新しい銃を作成) 作戦行動の選択(リストからクエストを選ぶ要領、選択決定で作戦行動へ!) 作戦行動を選択 【作戦行動】 「フィールド移動」 基本はシンボルエンカウントのターンベースRPGなので、敵シンボルを見つけたら『構えて』『撃つ』。 命中したらコマンドタイプのターン制バトルに移行。 バトルで敵を全滅させたらフィールドに戻る。 というシーケンスを繰り返し、ゴールにたどり着いたら作戦終了でアジトに戻ります。 オートエイムで構え中 遠いと命中率は低いが、構えを持続してると命中率が上がっていく このゲームならではの特徴は ・隠れながら進んで(カバーアクション)、カバー状態から射撃エンカウント ・基本3人パーティで、2人の仲間に ハンドシグナル 指示を送る の2つです。 カバーアクションからのエンカウントの流れ カバーポイントへ走る ↓ 〇ボタンでカバー ↓ エイムボタンでエイム! なぜカバーするのかというとバトルを有利に進めるためなんですが、どう有利かはバトルで説明します。 ハンドシグナルで仲間に指示→エンカウントの流れ ×ボタンでハンドシグナルモード 近くのカバーポイントに仲間のアイコンが表示される ↓ 〇ボタンでゴー! 仲間たちがカバー

はじめまして

はじめまして。 ここでは私が個人で作成しているゲームについて書いていきたいと思っています。 普段は ツイッター で開発進捗をつぶやいていますが、ツイッターで収まらない内容のものをこちらで書き込んでいきます。 さて、いま作っているゲームの内容ですが、カバーアクション+ターンベースRPGで、 ざっくりどんなゲームかというと、メ〇ルギアっぽい世界観でペ〇ソナ5っぽいシステムのゲームです。(身も蓋もない表現ですがw) あ、これ、伏字でもマズいですかね? UnrealEngine4で作っています。 シナリオ的なものはまだ全然なのですが、ゲーム自体の骨格部分はできているので、とりあえず一気に詳細などを公開していきます。 私自身プログラマーでもデザイナーでもプランナーでもないので、かなり拙い内容となってしまいますが、どうぞよろしくお願いします。