Unityに関連する記事です

 Unity におけるプログラムの基礎を学習します。

 ここでは関数(メソッド)について学習します。



関数とは


 プログラムの処理が増えてくると、同じ処理の繰り返しや、メインの処理が長くなってしまいがちです。
そこで意味のある処理を1つのまとまりにして名前をつけ、メインの処理から分離して役割毎にまとめておきます

 この1つのまとまりを関数といいます。
 
 関数としてまとめた処理は、いつでも呼び出すことが出来、再利用も出来るようになります。そのため、機能単位で関数をまとめておくと非常に便利です。


関数の役割と利点


 処理をまとまりごとに分けておくことによって、同じ処理を毎回プログラムを重複して書くのではなく、関数を呼び出すことで処理が可能になります。
またメインの処理が長いと、どこでどの処理が行われているのかを見つけにくく、結果的にエラーの発見や処理の修正も困難になりますので、
関数というまとまりを作って管理をしておいた方が分かりやすく、その後の修正もやりやすくなります。


関数の使い方


 Unity独自の一部の関数(Start関数など)を除き、作成した関数はスクリプトに記載しただけでは、自動的には呼び出されません
逆にいうと、関数を書く場所は宣言フィールド以外であればどこでもよいことになります。

 以上のような点から、スクリプトには関数を作り、必要な時にその関数を呼び出すことによって処理が進んでいきます。
それでは実際の使用例を見ながら処理の流れをつかんでいきましょう。


関数の定義と書式


 以下の書式で定義されることにより、関数として処理が成立します。

アクセス修飾子(ない場合はprivate扱い) 返り値の型(ない場合はvoid) 関数の名前 (型1 引数1,  型2 引数2, …) 
{
    処理;
    return 返り値;  (返り値がある場合)
}


引数(ひきすう)


 関数と呼び出すときに、呼び出す側は値を渡して関数の呼び出しができます。この関数の呼び出しの際に渡される変数の値を「引数(ひきすう)」といいます。
この変数を使って、呼び出された関数は処理を実行することができるようになります。なお、引数には変数と同じ型の値のみを渡すことが出来ます

 そのため、例えばInt型の引数を持つ関数であれば、int x = 10;という値の入っている変数xを渡すこともできますし、int y = 500;という変数yを渡すことも出来ます。
引数と変数の型さえ合っていれば、関数を呼び出す側は変数を渡すことが出来ますので、これにより同じ関数を呼び出す際であっても、引数に渡す変数よって処理を変化させることが出来ます。
 
 これも関数の大きな利点の1つです。


戻り値/返り値(もどりち/かえりち)


 関数は呼び出されると、その処理を実行します。処理の実行中、あるいは処理の実行後に、その処理結果を1つの変数を用意して、呼び出した処理の元へ値を戻す仕組みがあります。
この時に呼び出し元へ戻される変数の値が「戻り値」です。 返り値とも言います。
 
 戻り値のない関数はvoid、戻り値のある関数は戻り値として返却する値の型を定義します
戻り値のある関数は、必ず値を返す必要があります。


アクセス修飾子(しゅうしょくし)


 関数の定義の際に最初に記述するものをアクセス修飾子と言います。

 関数や変数、クラスにはアクセスレベルというものがあり、作成した関数がどの範囲で呼び出せるのかを定義しているものです。
 C#では6種類ありますが、ここでは初心者向けに主に使用される2つの修飾子を紹介します。
種類アクセスできる範囲
publicクラス内外問わずアクセスできる
private同じクラス内、または同じ構造体内からしかアクセスできない


戻り値も引数もない関数の処理


 例文を提示します。

using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {

    int x = 500;

    // 所持金を表示する関数
    void CheckMoney(){
        Debug.Log ("あなたは " + x + " ゴールド 持っています");
    }

    void Start () {
    Debug.Log("Start");
        // CheckMoney関数を呼び出す
        CheckMoney ();
    }
}

実行するとコンソールには以下のように表示されます。
Start
あなたは 500 ゴールド 持っています
※ 関数は呼び出されない限り処理されません。そのため、Start関数の上にCheckMoney関数がありますが、書いてある順番と呼び出す順番とは関係ありません。
Start関数やUpdate関数以外の自作した関数は、呼ばれて始めて関数は処理されます。


戻り値はなく、引数のある関数


 例文を提示します。

using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {

    int x = 500;

    // 所持金を表示する関数
    void CheckMoney(int amount){
        Debug.Log ("あなたは " + amount + " ゴールド 持っています");
    }

    void Start () {
    Debug.Log("Start");
        // CheckMoney関数を呼び出す
        int y = x + 2000;
        CheckMoney (y);
    }
}

 どのような処理の手順になっているか、順番に追っていきましょう。
まず、Start関数内のDebug.Logが処理されて、コンソールにStartと表示されます。
その次に、Start関数内で宣言された変数yにはx + 2000が代入されます。この時点でyの値は2500になります。

 その後、CheckMoney関数が呼び出されますが、この際に引数として変数yを渡しています。
CheckMoney関数にはint型の引数を用意してありますので、呼び出す側もint型の値を1つだけ渡すことが出来ます。
int型であれば変数でも実数(500という数字)でも渡すことが出来ます。

 続いてCheckMoney関数の処理に移ります。引数の型に用意した変数名は、他の変数名と同様に好きな名前を付けて宣言できます。
まず、int型の変数amountに、引数として渡された変数yの値が代入されます。
この時点でamountの値はyの値である2500になります。

これはつまり、
int amount = y;
という処理が関数の最初に処理されていることになります。

代入は、左辺イコール右辺が成立しないと処理ができません。
CheckMoney関数の引数の型と、呼び出し側により渡される型が同じでないとダメな理由は代入できないと処理できないためです。

 最後にDebug.Logとしてamountの値を参照して表示が行われます。

結果、コンソールには以下のように表示されます。
Start
あなたは 2500 ゴールド 持っています


戻り値と引数のある関数


 例文を提示します。

using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {

    string weaponName = "くさりがま";

    // 武器の変更をする関数
  // Random.Rangeでvalueに代入されて引数として渡されてきた値をweaponNoに代入
    string CheckWeapon(int weaponNo){   // int weaponNo = velue
    // 戻り値用の変数を用意
        string newWeaponName;

    // weaponNoの値によって0-2のいずれかに分岐
        switch(weaponNo){
            case 0:
                newWeaponName = "てつのやり";
                break;
            case 1:
                newWeaponName = "おおきづち";
                break;
            case 2:
                newWeaponName = "いなづまのけん";
                break;
        }
        // 戻り値としてstring型の変数を戻す
        return newWeaponName;
    }

    void Start () {
    Debug.Log("あなたは " + weaponName + " を装備しています");

        // 0-2のランダムな値を1つ代入
        int value = Random.Range(0, 3);
    Debug.Log(value);
     
        // ChangeWeapon関数を呼び出して、処理結果を戻り値として戻してもらう 左辺String型の変数 = 右辺String型の戻り値のため、戻り値をWeaponNameに代入できる
        ぁ↓weaponName = ChangeWeapon(value);

        Debug.Log("あなたは " + weaponName + " を装備しています");
    }
}

上記の番号の順番で処理が流れます。,鉢のDebug.LogではweaponNameに違う結果が出力されます。番号の処理の流れを追ってみてください。



 以上になります。

 自分で作成することが一番学習になりますので、スクリプト内に処理を作成して関数に慣れていきましょう。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます