【UEチャレンジ企画】ブループリントを深堀り!バグとの戦いも

【UEチャレンジ企画】ブループリントを深堀り!バグとの戦いも

【UEチャレンジ企画】ブループリントを深堀り!バグとの戦いも

初学者がUnreal Engineによるゲーム制作に100日取り組んで、どこまでプロの開発者に近づけるのかという本企画。今回は第7弾となります。

前回に引き続き、『Unreal Engine 5で極めるゲーム開発』で学習をし、開発を進めています。いくつかバグと遭遇したので、そちらも紹介します。

コンテンツ [表示]

  1. 1Unreal Engine企画第六弾!
  2. 2今回学習したこと
  3. 3思うようにプログラムが動かない
  4. 4名前が紛らわしい要素
  5. 5細かいチェックを入れ忘れる
  6. 6クラスの設定ミス
  7. 7次の目標:当たり判定や物理エンジンの理解

Unreal Engine企画第六弾!

Unreal Engineのロゴ


Unreal Engine100日チャレンジに挑戦している、Neruです。


この企画は、Unreal Engineの初学者である筆者が、100日間の学習でどれだけのものを作れるのか、というチャレンジ企画です。

初回の記事で、この企画の詳細と、筆者の経験値がどの程度なのかを説明しています。
 

【UEチャレンジ企画】Unreal Engine100日チャレンジ開始!最初の一歩のイメージ
【UEチャレンジ企画】Unreal Engine100日チャレンジ開始!最初の一歩
初学者がUnreal Engineでゲーム制作に100日取り組んで、どこまでガチになれるのかという企画!今回は初回の記事となります。 ダウンロードからさっそく最初の壁にぶち当たる筆者。最初のゲーム作成までを記事にしました。


前回は、Unreal Engineに搭載されているビジュアルスクリプティングシステム、「ブループリント」について学びました。

「フロー制御」オブジェクト指向」クラス」変数」など、他のプログラム言語でも学ぶ事項に触れて、基本的な仕組みを作ることに成功しました。
 

【UEチャレンジ企画】スクリプティングの知識を深めるのイメージ
【UEチャレンジ企画】スクリプティングの知識を深める
初学者がUnreal Engineによるゲーム制作に100日取り組んで、どこまでプロの開発者に近づけるのかという本企画。今回は第6弾となります。 前回、『Unreal Engine 5で極めるゲーム開発』を読み始めた筆者。今回はビジュアルスクリプティングシステムのブループリントを学習して、より複雑なプログラミングができるようになりました。

 

今回の目標は、さらにブループリントを深堀りしていくことです。便利な機能を使い、効率的なプログラミングができるようになることを目指し、関数マクロインターフェースなどを学習しました。

ただ、今回からは書籍の課題の難易度も上がり、プログラムを作ったものの、思うように動かないことも多々ありました。

各章で一回は思うように動かない現象にぶつかっている印象です。

今回の記事では、筆者がぶつかった壁と、それをどう解消したかに重点を置いて書いていきます。
 

今回学習したこと

学習のイメージ画像

 

前回はプログラムを動かすうえで基本的な知識を学びましたが、今回は一歩進んで、より効率的な開発の仕方について学びました。

効率的に開発を進める一つのやり方が、一度作ったプログラムを、色々な所でも使いまわすことです。


 


ゲームの中で同じ処理を何回も行う場合、処理を実装するたびに一からプログラムを組むのは面倒ですし、ヒューマンエラーの可能性も高まります。
 

 

そこで、あらかじめよく使う処理を作ってライブラリに保存し、必要に応じて呼び出すことで、同じ処理を色々なところで使いまわすことができるようになります。効率的な開発には必要なテクニックです。

今回学習した関数、マクロ、インターフェースは、いずれも一連のプログラムをまとめたもので、色々なプログラムから呼び出して使うことができます

関数、マクロ、インターフェースは、プログラム内で特定の動作を簡単に使い回すための便利なツールです。

関数は特定の処理をまとめて、再利用できるようにしたものです。

マクロはパターンを収めたテンプレートのようなもので、難しい処理をまとめて1処理にできます。

インターフェースは、クラスの異なるオブジェクトに共通の動作を持たせるための仕組みです。
 

プログラムの機能の違いの一覧表

 

関数、マクロ、インターフェースの違いについては、少し複雑な話になりますので、詳しく知りたい方は下記の記事をご参照ください。

一つ前のバージョンであるUnreal Engine 4について書かれた記事であることには注意してください。

[UE4] 関数ライブラリとマクロライブラリの上手な活用|株式会社ヒストリア
株式会社ヒストリア様の記事はこちら


今回学習した知識を使って、コードをより簡潔に書き換えてみました。

以下のポストは、関数を使って自機のスプリント機能を簡略化した例です。
 


また、以下のポストはマクロを使った簡略例です。

 

 

まだ関数、マクロ、インターフェースを、場面に合わせて適切に使い分けられる自信はありませんが……。

実践を通して、これからも書籍を読み返しながら覚えていこうと思います。
 

思うようにプログラムが動かない

悩んでいる人


効率的な開発の手法を学べたことは、これから自分でゲームを作るうえでも役立つ知識になります。ただ、今回から学習する内容が複雑になり、書籍の指示通り進めていると思っているのに、仕組みが思うように動かないことも増えていきました。

そこで、今回の記事では筆者が躓いたポイントを列挙して、筆者と同じUnreal Engine初心者に、転ばぬ先の杖として役立てていただこうと思います。経験者の方は、初心者が陥りやすいミスのサンプルとしてご覧いただければ幸いです。

 

名前が紛らわしい要素

エラーが発生して、一番多かった原因が、同じような名前の要素を間違えて設定してしまった、というパターンです。

ブループリントには、デフォルトでも数多くの設定が用意されています。例えば、ブループリントの画面でノードを探す際、「Add」で検索すると以下のように大量のノードの候補が表示されます。

 



「Add」が付くアクションの種類が多い反面、機能は全く別のものというケースは多いため、間違えて設定してしまうと、当然思ったように動いてくれません。

また、Unreal Engineの多くの要素は自分で命名をして管理ができるのですが、自分で名付けたものと近い名前がデフォルトで入っているというケースにも遭遇しました。確認を怠って痛い目を見ました。

何にどういう名前をつけたのか、また設定しているものが自作のものかデフォルトのものなのかという点は、きっちり管理、確認しておかないと、ゲームは思ったように動いてくれません。

例えば、以下の画像では、青緑色の「Cast to BP_Playerstate」と紫色の「Cast to BP_Playerstate class」というノードが設置されています。

 

 


名前は似ていますが、この二つは全く違う機能を持っています

筆者はこの二つを間違えて設置しました。結果、プログラムが思ったような形に機能しない、という事態に直面。

色が違うのですぐに気が付きましたが、すべての要素が色分けで表示されているわけではないので、今回はラッキーでした。

なお、上記の画像のノードの何が違うかについては、公式フォーラムのQ&Aにてわかりやすいスレッドがありましたので、付記します。



 

Cast To X と Cast To X Class の違いは? (翻訳/要約) - Programming & Scripting - Epic Developer Community Forums
UnrealEngine公式フォーラムへのリンクはこちら

 

他にも、イベント(赤いノード)を、自作のものとシステム上のものを間違って使っていたというケースもありました。

赤いノードは一連のプログラムの発火点になるものなので、これを間違えるとそもそもプログラムが動きません。こちらも手痛いミスで、修正作業に時間をとられました。
 

アンリアルエンジンのプログラム

「Event on Pawn on」と書かれたノードが二つ。「Custom Event」と書かれたものは自作で、機能が全く違う。


いずれのミスも、名前をしっかり正確に把握し、自作のものの名前をしっかり管理していたら防げたものです。開発の際はいっそう気を付けていこうと思いました。
 

細かいチェックを入れ忘れる

 

「ノードのチェックの入れ忘れ」もよくあるミスでした。

ブループリントのノードの一部には、チェックボックスが含まれているものがあり、チェックをするか否かで挙動が変わります。

例えば、以下のノードは、自分のキャラクターが死亡した際に、膝から崩れ落ちるような挙動をするようなプログラムですが……

 

アンリアルエンジンのプログラム

赤色の〇が「New Simulate」のチェック欄。

 

「set all bodies simulate physics」というノードに、「New Simulate」というチェック欄があるのが見えると思います。こちらのチェックをつけておかなければ、思うような挙動を作ることができません。

初歩的なミスだとは思うのですが、細かい点にまで目が行き届かず、思うように動かないというケースが、筆者の場合ままありました。

特にノードによっては大量の項目を有している場合もあるので、その場合は特に注意する必要があります。
 


 

クラスの設定ミス

 

クラスの設定ミスも多くありました。

クラスについては、前回も説明をしましたが、改めて説明します。

オブジェクト指向であるUnreal Engineの開発環境では、ゲーム上に登場するものやバックグラウンドで動く仕組みを含め、ほぼすべての要素に「クラス」が割り当てられています。「クラス」というのは、その要素がどの分類にあるのかを示すものです。

ブループリントの処理の中には、対象となるもののクラスを受け取って処理を実行するものもが多くあり、前項で上げた「Cast to ~」というノードもその一種です。


「クラス」はうまく設定できれば大変便利で、開発に必須の事項でもあります。しかし、筆者はクラス設定を間違えてエラーを起こしてしまうことが何回かありました。

まず、オブジェクトのクラス設定を誤って設定してしまうとうまくいきません。オブジェクトのクラス設定は、以下のような画面から設定できるのですが……
 

アンリアルエンジンのクラス設定画面

赤い四角で囲んだ部分で設定する。


この設定を誤ってしまうと、当然ですが思ったように動いてくれません。また、ブループリントのほうでも、指定するクラスが間違っていると、こちらもバグの原因になってしまいます。

こちらも一度ミスをして、30分ほど格闘してやっと間違いに気が付きました。ミスに気付いたときは、灯台下暗しといった気分でした。

クラスを取り扱う際は、オブジェクト、ブループリントともに、想定しているクラスを設定しているか確認しなければいけないと実感しました。名前が似ているクラスもあるので、正確な把握が必要になります。

 

アンリアルエンジンのクラス設定

「GameMode」と「GameModeBase」、「GameState」と「GameStateBase」は別物

次の目標:当たり判定や物理エンジンの理解

的に矢が刺さっている様子

 


今回の記事は、自分が躓いた箇所を中心に紹介しました。

関数、マクロ、インターフェースといった、一歩先に進んだ事柄を学習するなかで、やることも少しずつ複雑になっています。

しかし今回紹介したように、ミスの原因を調べてみると、原因は初歩的なものが多かったです。

気づけば拍子抜けするようなことばかりで少し落ち込みましたが、学習段階で発生しやすいミスに気が付いたことは良かったです。

次の開発の際は経験したことを活かして、慎重に進めていく所存です。

次回学習するのは、当たり判定や物理エンジンについてです。

ゲームの物理面を深く学習して、3Dゲームとして違和感のない作りを実現することが目標です。

本企画も40日目にさしかかり、いよいよ半分が迫っています。これからも継続していきますので、引き続きよろしくお願いします。


 

neru
ライター

neru

大学生時代に英文学を専攻していたライターです。学生時代からゲームやVtuberといった領域に興味を持っており、情報収集をしてきました。現在は英語のスキルを活かしつつ、英語×エンタメ最新領域を掛け合わせたリサーチ活動や、記事執筆を行っています。好きなものはラーメン、サッカー観戦、音楽鑑賞。

おすすめの記事

Recommended Articles
  • ゲーム企画の伝え方 〜より良い企画を作成するために抑えるべきポイント〜

    2024.02.13

  • 【完全版】ChatGPTを使いこなすための汎用プロンプト16選

    2024.03.22

  • ChatGPTを使ったゲーム企画書の書き方|すぐに使えるプロンプトと実例

    2024.03.22