独自のポーション配置関数を作成する

Tutorial

Beginner

+0XP

30 mins

(89)

Unity Technologies

独自のポーション配置関数を作成する

このチュートリアルでは、次のことを行います。

  • より効率的な方法でライフ回復ポーションを配置する関数を作成する
  • Unity エディターでコードを確認する
  • スコープ、および別のスクリプトにある情報にアクセスする方法について学ぶ

このチュートリアルを終えると、スクリプトをより高いレベルでまとめることを考えるための知識が身に付きます。

Languages available:

1. 関数の宣言を書く

関数を使用すると、プログラマーは複数の命令をコピーする必要がなくなり、より効率的なコードを記述できます。関数がどのように機能するかを前のチュートリアルで確認したので、ライフ回復ポーションを配置する新しい関数を作成してみましょう。

まず課題を確認しましょう。課題は、SpawnerSample スクリプトで新しい関数の宣言を書いてみるというものです。

次のヒントを参考に課題を進めてください。

  • Start 関数の後、スクリプトの最後の波括弧の前に関数を宣言する。
  • レビューしたサンプルのように、関数の型は「void」である必要がある。
  • 関数が何をするかについての情報を与える名前を選ぶ。
  • ライフ回復ポーションを配置するごとに変える必要がある値がある場合、関数には引数が必要になる。

ヒント:なかなか課題が解けない場合は、宣言のサンプルをもう一度確認し、参考にしてください。

自分なりに関数の宣言を書いてみたら、次のステップに進んで解答を確認してください。

2. 関数の宣言を確認する

関数の宣言は次のようになります。

void SpawnPotion(int angle)

この宣言を分解してみましょう。

  • SpawnPotion は説明的な関数の名前である。これは、後でコードを読む人の助けとなる。別の名前を選んでいても、それが明確で説明的な名前であればよい。
  • 引数の変数の型は int である。
  • この例の引数の変数は angle という名前のものだけが存在している。これは、ポーションを配置するごとに変更される値がこれだけであるためである。自分で書いたバージョンでは別の名前を選んでいても問題ない。

関数本体をまだ追加していないため、ここまで書いた段階ではコードエディターで宣言に赤の下線が引かれていると思います。これは次のステップで修正します。

3. 関数本体を書く

関数の宣言を書いたので、関数本体を記述しましょう。

1. 関数宣言の下の行で、波括弧({)の組を開く。

2. 次の行で、ライフ回復ポーションの配置を制御するスクリプトの 3 つの命令をコピーする。

3. 新しい行で、波括弧(})を閉じる。

4. 以下のサンプルを見ながら、自分の書いたコードを確認する。

void SpawnPotion(int angle)
{
    Vector3 direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
    spawnPosition = transform.position + direction * radius;
    Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
}


関数の名前と変数の名前は異なっていても構いませんが、それ以外はすべてサンプルと一致させるようにしてください。

Vector3 は、3D ゲーム空間内の位置を 3 つの値(x 軸、y 軸、z 軸)として格納する変数の型です。これらの値は通常、略して xy、および z と呼ばれます。今の時点では、この関数のその他の見慣れない内容について心配する必要はありません。


5. Ctrl + S(Windows)または Cmd + S(macOS)を押して、変更を保存する。

コードエディターでは spawnPositionradius に赤の下線が引かれ、このコードにエラーがあることが知らされます(ワードプロセッサーで見るものと似たようなものです)。心配する必要はありません。次のステップでこれらのエラーを特定して修正します。

4. 関数のエラーを特定する

コードを修正する前に、エラーに関する詳細情報を確認しましょう。

1. Unity エディターに戻る。

2. プロジェクトウィンドウのコンソールタブを選択する。


3. 以下のエラーメッセージが表示されていることを確認する。

  • error CS0103: The name 'spawnPosition' does not exist in the current context(このエラーは 2 回表示されている)
  • error CS0103: The name 'radius' does not exist in the current context




コンソールは、spawnPosition 変数と radius 変数が「current context(現在のコンテキスト)」に存在しないと知らせています。それが正確には何を意味するのかを調べてみましょう。

5. スコープの概要

スクリプトの波括弧({})は、スコープと呼ばれるものを定義します。これは、関数内で宣言された変数のみが存在していることを意味します。波括弧が命令の集まりで構成される個別の小さな世界を作っていると想像してみてください。

これは、1 つのスクリプトの中で、別々のスコープに独立して存在する同じ名前の変数を 2 つ持つことができ、それぞれに異なる値を割り当てられることを意味します。

スクリプトでは、変数 spawnPositionradius の両方が Start 関数で宣言されています。これでは、コンピューターが SpawnPotion 関数のコンパイルを開始した時に、これらの変数が存在することを認識することができません。

この問題を修正するには、関数で初めて変数を呼び出すときに、変数の型を追加して変数を再宣言する必要があります。こうして、変数の情報を保存するために必要なメモリの量がコンピューターに通知されます。

6. 関数内の変数を再宣言する

SpawnPotion が正しく機能するように、エラー CS0103 を修正しましょう。

1. コードエディターに戻り、SpawnerSample スクリプトの SpawnPotion 関数を探す。

2. 新しい関数のスコープ内で radius 変数を再宣言する。作成したポーションの配置を計算する命令の前にこれを行うのが最も簡単である。

3. spawnPosition 変数の前に Vector3 型の指定を追加する。


4. 以下のサンプルを見ながら、自分で書いたコードを確認する。

void SpawnPotion(int angle)
{
    int radius = 5;

    Vector3 direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
    Vector3 spawnPosition = transform.position + direction * radius;
    Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
}



5. Ctrl + S(Windows)または Cmd + S(macOS)を押して、変更を保存する。

7. ポーションを配置する命令を関数呼び出しに置き換える

SpawnPotion 関数を作成したので、それを呼び出して(使用して)、Start 関数の一連の命令を置き換えることができます。

1. SpawnerSample スクリプトの Start 関数で、各ライフ回復ポーションを配置する一連の命令を関数呼び出しに置き換える。

次の情報を参考にしてください。

  • ゲーム開始時に、4 つのライフ回復ポーションを配置する必要がある。
  • 各ポーションは異なる向きに配置される。これに関する情報は既存の命令のセットにすでに入っている。
  • 各命令はセミコロン(;)で終了する必要がある。


ヒント:復習が必要な場合は、前のチュートリアルの関数呼び出しのステップを確認してください。


2. Ctrl + S(Windows)または Cmd + S(macOS)を押して、変更を保存する。

8. 関数呼び出しを確認する

これで、SpawnerSample スクリプトには次のような関数が含まれた状態になっているはずです。

void Start()
{
    SpawnPotion(0);
    SpawnPotion(45);
    SpawnPotion(90);
    SpawnPotion(135);
}

void SpawnPotion(int angle)
{
    int radius = 5;

    Vector3 direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
    Vector3 spawnPosition = transform.position + direction * radius;
    Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
}


注:関数の名前と変数の名前は、自分で定義したものになります。


Start 関数の各関数呼び出しには異なる angle の値が割り当てられているため、ライフ回復ポーションはスポーンポイントの周囲に正しく分散されます。5 つ目のライフ回復ポーションを追加する場合は、別の angle の値を指定して関数呼び出しを追加する必要があります。

9. 変更をテストする

コードが修正できたので、Unity エディターで変更を確認しましょう。

1. エディターで、コンソールタブをもう一度確認し、CS0103 エラーメッセージが表示されていないことを確認する。

2. 再生ボタンをクリックして、再生モードに入る。

3. ゲームの開始時に、4 つ(あるいは 5 つ)のライフ回復ポーションが異なる向きに配置されていることを確認する。

4. 変更の確認が終了したら、もう一度再生ボタンをクリックして再生モードを終了する。

10. チュートリアルのまとめ

このチュートリアルでは、以下の活動を行いました。

  • ライフ回復ポーションをより効率的に配置する関数を作成した
  • コンソールで関数を確認しました
  • 変数に関連してスコープについて学習した
  • スコープのエラーを修正するために変数を再宣言した
  • ライフ回復ポーションを配置する命令を関数呼び出しに置き換えた


各チュートリアルでは、基本的なプログラミング概念を学習して適用することで、SpawnerSample スクリプトを改善していっています。こうした変更は小さなものに見えるかもしれませんが、変更を積み重ねていくことで、「Creator Kit:コーディング入門」のゲームのプレイヤー体験に大きな影響を与えることができます。

Complete this Tutorial