【UE5】ローカル変数の説明と活用について【ゲーム開発】
ローカル変数とは?
ローカル変数とは、その変数が宣言された関数やブロック内でのみ有効な変数です。
これにより、変数が使われる範囲を限定することができ、意図しないデータの変更を防ぐことができます。
【特徴】
・スコープ(範囲):関数内、もしくはイベントやロジックのブロック内でのみ有効。
・寿命:関数が呼ばれた時に作成され、関数が終了すると自動的に破棄される。
・メモリ管理:仕様が終了したら自動で解放されるため、メモリ管理が容易。
ローカル変数のメリット
1. メモリ効率:必要なときだけ変数をメモリに確保し、不要になったら解放されます。これにより無駄なメモリ消費を防ぐことができます。
2. バグの防止:ローカル変数は他の関数やスコープからアクセスできないため、意図しない変更やデータの競合を避けることができます。関数内で処理を行う場合に非常に有効です。
3. 可読性:ローカル変数を使うことで、その変数が使われる範囲が明確になり、コードが理解しやすくなります。
ローカル変数の使い方
UnrealEngineのブループリントにおけるローカル変数は、関数内で一時的にデータを格納するために使われます。
ローカル変数はその関数が呼び出されるときのみ存在、関数が終了すると消えます。
1.ローカル変数の作成方法
ブループリントでローカル変数を作成する方法は以下の通りです。
1.関数内でローカル変数を作成
・新しい関数を作成(もしくは既存の関数を選択)
・関数の中に、右クリックして「ローカル変数の作成」を選択します。
・これで、その関数内でのみ有効なローカル変数が作成されます。
2.ローカル変数の設定
・作成したローカル変数には、関数の中で計算したり、条件に応じて変化させた値を格納することができます。
2.ローカル変数の使用例
例えば、キャラクターのHPを計算する関数を作る場合を考えてみましょう。
・ローカル変数:ダメージ量、新しいHPなど
・処理の流れ
1.ローカル変数ダメージ量を計算し、新しいHPにその値を加算または減算。
2.関数が終了すると、ダメージ量や新しいHPは消えるため、他の関数に影響を与えることはない。
例:HP計算関数
・変数
・現在のHP(グローバル変数、キャラクターのHP)
・ダメージ量(ローカル変数、関数内で一時的に使用)
・新しいHP(ローカル変数、関数内で新しいHPを計算)
この関数内で使ったダメージ量や新しいHPは、関数の外ではアクセスできないため、他の部分に影響を与えることがありません。
3.ローカル変数とグローバル変数の違い
・ローカル変数
・関数内でのみ有効
・関数が終了すると自動的に消える
・他の関数からはアクセスできない
・一時的なデータの格納に使用
・グローバル変数
・プロジェクト全体またはクラス内で有効。
・一度設定した値は、プロジェクトが終了するまで保持される。
・他の関数からもアクセス可能。
・長期間にわたって使用するデータの保持に使用。
ローカル変数は、他の関数やイベントに影響を与えないため、より安全にデータを処理することができ、関数ごとの状態を管理する際に役立ちます。
ローカル変数を使う場合のケース
例1:キャラクターのHP計算
例えば、ゲーム内でキャラクターがダメージを受けたときにHPを計算する関数を作ったとします。
関数名:CalculateDamage
入力:ダメージ量
出力:計算した新しいHPを返す
関数内で、次のようにローカル変数を使うことができます
1.ダメージ量(ローカル変数)を受け取る
2.新しいHP(ローカル変数)を計算する:現在のHP – ダメージ量
3.計算した新しいHPを返す
4.ローカル変数のライフサイクル
ローカル変数のライフサイクルは、関数が呼び出されてから終了するまでです。
関数がよばれるときに変数が作成され、関数の実行中にデータを保持しますが、関数が終了するとその変数は破棄されます。
・ 関数開始時:ローカル変数がメモリに確保され、値が設定されます。
・ 関数内処理中:ローカル変数に格納した値を使って計算や処理を行います。
・ 関数終了時:ローカル変数は破棄され、メモリから解放されます。
5.ローカル変数の活用
・複雑な計算や一時的なデータの格納に利用する。
・一時的な状態管理や一時的なデータの保持に適しています。
・他の関数に影響を与えずにデータを操作したい場合に使用します。
まとめ
・ローカル変数は、関数内で一時的にデータを保持するための変数です。
・スコープが関数何に限定され、関数が終了すると消えます。
・他の関数からアクセスすることはできず、データ競合や不正なデータ変更を防ぎます。
・メモリ効率が良く、パフォーマンスの向上にもつながります。
ローカル変数は、関数やイベントで処理を行う際に非常に便利で、スコープやライフサイクルを管理することで、より安全で効率的なコードを書くことができます。