【Unity初心者】関数(メソッド)説明シリーズ　その１　自作関数の作り方　

#環境
Unity 2019.3.7f1

#はじめに
過去記事で関数(メソッド)の概略をお話ししました。
https://qiita.com/Maru60014236/items/412925cdefd7a462caf8

以前紹介した関数の概略図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/a160cd37-2e11-33b7-be67-6befa872b820.png)




1.用意されている関数-返り値有-引数必要
2.用意されている関数-返り値有-引数不要
3.用意されている関数-返り値無-イベント関数-引数必要
4.用意されている関数-返り値無-イベント関数-引数不要
5.用意されている関数-返り値無-引数必要
6.用意されている関数-返り値無-引数無-①
7.用意されている関数-返り値無-引数無-②
8.自作の関数-返り値有-引数有
9.自作の関数-返り値有-引数無
10.自作の関数-返り値無-引数有
11.自作の関数-返り値無-引数無

その際、11通りの関数の種類があるとお伝えしてきました。
今回から、それぞれの関数について説明していきます。
1番から説明といきたいところですが、段階的に説明していくため
本記事では、8番～11番について、
11番→9番→10番→8番の順で説明します。

#関数の作り方　基本の形
関数の作り方を日本語で書くとこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/69ceec0f-b6d7-3f9b-53b0-c5f753f20597.png)




・**アクセス修飾子**：ざっくりいえば他のスクリプトから使うようにするかどうか
・**返り値の型**：返り値が有無にかかわらずなにかしら書く必要がある
　　　　　　　返り値無しならvoid
　　　　　　　返り値がint型ならintと書く
・**関数名**：関数の好きな名前を書く。個人開発ならほんとになんでも良い。
　　　　　ただし、もとから用意されている関数と同じ名前はだめ。
・**型　引数**：関数内で使用する引数の型と引数名を書く

この基本の形を頭のかたすみにいれた状態で以下説明を聞いてください。


#自作の関数-返り値無-引数無
####関数の作り方
たし算を行う関数 kansuu1 を例として作っていきます。

アクセス修飾子は他のスクリプトで使わないのでprivate
返り値は無しなのでvoid
引数もないのでカッコの中は空白となります

関数の次に ブロック{} を書いて、
その中に処理内容を書くことで、できあがりです。


```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    int b;//int型の変数bを宣言
    int c;//int型の変数cを宣言

    //スタート関数
    void Start()
    {
        a = 2;//aに2を代入
        b = 3;//bに3を代入
    }

    //作った関数　
    private void kansuu1()
    {
        c = a + b;//cにa+bの計算結果を代入
    }
}
```

####関数の使い方
作っただけでは関数の中身は処理されないので
作った関数をスタート関数の中にいれて実行してみましょう。
使う時は
**関数名();**
と書くことで使うことができます。

変数の中身確認用にDebug.Log()関数だけ使わせてください(汗)
(使い方はこちら：https://qiita.com/Maru60014236/items/9f0e64b46f0ca61f3c0d)

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    int b;//int型の変数bを宣言
    int c;//int型の変数cを宣言

    //スタート関数
    void Start()
    {
        a = 2;//aに2を代入
        b = 3;//bに3を代入 
        kansuu1();       
        Debug.Log("c="+c);
    }

    //作った関数　
    private void kansuu1()
    {
        c = a + b;//cにa+bの計算結果を代入
    }
}
```

####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/d05b1d6d-3db0-3463-860d-96e7c7a7e963.png)

#自作の関数-返り値有-引数無
####返り値とは？
ここで、関数を作る前に簡単に説明しておきます。

返り値・・・関数の処理後に出力される値です。

家電なんかできまった処理をするもので考えるとわかりやすいです。
電子レンジでいうところの暖められた食材
洗濯機でいうところのきれいな衣服
ミキサーでいうところの混ぜられた食材
などです。

**返り値を使う時の注意点**としては、4つあります。
・関数を作るとき、返り値の型を指定しないといけない
・関数を作るとき、最後に　return 〇〇　と書かないとエラーになる
・returnより下に処理を書いても実行されない
・一つの関数につき、返り値は１つ

　
####関数の作り方
たし算を行う関数 kansuu2 を例として作っていきます。

アクセス修飾子は他のスクリプトで使わないのでprivate
返り値はint型を使用するのでint
引数はないのでカッコの中は空白となります
関数の次に ブロック{} を書いて、
その中に処理内容と　処理内容の最後に　return　〇〇　を書くことで、できあがりです。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    int b;//int型の変数bを宣言
    int c;//int型の変数cを宣言
    
    //スタート関数
    void Start()
    {
        a = 2;//aに2を代入
        b = 3;//bに3を代入        
    }

    //作った関数　
    private int kansuu2()
    {
        c = a + b;//cにa+bの計算結果を代入
        return c;//返り値
    }
```
####関数の使い方
作った関数をスタート関数の中にいれて実行してみましょう。
使う時は先程と同様に
**関数名();**
です。

新たに変数dを作ってその中にkansuu2の返り値をいれてみましょう。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    int b;//int型の変数bを宣言
    int c;//int型の変数cを宣言
    int d;//int型の変数dを宣言

    //スタート関数
    void Start()
    {
        a = 2;//aに2を代入
        b = 3;//bに3を代入  
        d = kansuu2();//dにkannsuu2の返り値を代入
        Debug.Log("d="+d);
    }

    //作った関数　
    private int kansuu2()
    {
        c = a + b;//cにa+bの計算結果を代入
        return c;//返り値
    }
}
```

####結果
dにkansuu2の値がはいりました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/b3b3de94-6ea3-b82e-bc7f-6e2ec83ce8f9.png)

#自作の関数-返り値無-引数有
####引数とは？
ここで、関数を作る前に簡単に説明しておきます。

引数・・・関数に入力する値です。関数は入力された値を使って処理を行います。

テレビのリモコンで例えるとわかりやすいです。
リモコンの1を押すと1チャンネルが表示
リモコンの8を押すと8チャンネルが表示されますよね？
リモコンの押した番号が関数でいう引数です。

**引数を使う時の注意点**としては、4つあります。
・関数を作るとき、引数の型を宣言する
・関数を作るとき、引数が2つ以上の場合、引数の間をカンマで区切る
・関数を使うとき、作った関数の引数の型と同じ型の引数を書かないとエラーになる。
・関数を使うとき、作った関数の引数の数だけ引数を書かないとエラーになる。

####関数の作り方
たし算を行う関数 kansuu3 を例として作っていきます。
引数の型はint型を使います。

アクセス修飾子は他のスクリプトで使わないのでprivate
返り値は無しなのでvoid
int型の引数を使うので　カッコの中に　int 変数名　を書きます。変数名は好きな名前でOKです。
関数の次に ブロック{} を書いて、
その中に処理内容を書くことで、できあがりです。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    
    //スタート関数
    void Start()
    {        
       
    }

    //作った関数　
    private void kansuu3(int x)
    {
        a = x + x;//aに引数+引数の計算結果を代入
    }

}
```

####関数の使い方
作った関数をスタート関数の中にいれて実行してみましょう。
使う時はカッコの中に引数をいれます。
**関数名(引数);**
今回は２を引数として実行してみましょう。
そうすると、作った関数の中のxには2が代入され、
a= 2 + 2 ;
の形となります。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    
    //スタート関数
    void Start()
    {
        kansuu3(2);//引数を2として関数を実行
        Debug.Log("a="+a);
    }

    //作った関数　
    private void kansuu3(int x)
    {
        a = x + x;//aに引数+引数の計算結果を代入
    }

}
```
####結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/d9a1f1e0-6e3d-4da3-68c9-dc7c604c9c7b.png)

引数を10に変えてみます。

```CSharp
kansuu3(10);//引数を10として関数を実行
```
a=10+10でa=20が表示されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/a1511243-3a7b-922d-081e-aceead79abe4.png)

####引数が2つある場合
引数間をカンマで区切るだけです。
結果はどうなるでしょう？

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    
    //スタート関数
    void Start()
    {
        kansuu3(10,100);
        Debug.Log("a="+a);
    }

    //作った関数　
    private void kansuu3(int x,int y)
    {
        a = x + y;//aに第一引数+第二引数の計算結果を代入
    }
}
```
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/fc5d7c29-84e1-8bd5-798e-50cc194f8412.png)

#自作の関数-返り値有-引数有
返り値と引数の組み合わせです。

####関数の作り方
たし算を行う関数 kansuu4 を例として作っていきます。

アクセス修飾子は他のスクリプトで使わないのでprivate
返り値はint型を使用するのでint
int型の引数を使うので　カッコの中に　int 変数名　を書きます。変数名は好きな名前でOKです。
関数の次に ブロック{} を書いて、
その中に処理内容と　処理内容の最後に　return　〇〇　を書くことで、できあがりです。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    
    //スタート関数
    void Start()
    {

    }

    //作った関数　
    private int kansuu4(int x)
    {
        a = x + x;//aに引数+引数の計算結果を代入
        return a;
    }

```
####関数の使い方
作った関数をスタート関数の中にいれて実行してみましょう。
使う時はカッコの中に引数をいれます。
**関数名(引数);**
今回は5を引数として実行してみましょう。
そうすると、作った関数の中のxには5が代入され、
a= 5 + 5 ;の形となります。

返り値はa、
そして、aの中身は10のため、
kansuu4の返り値は10となります。
int型の変数ｂを作って、そこにkansuu4(5)を代入してコンソールに表示してみましょう。

```CSharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
    int a;//int型の変数aを宣言
    int b;//int型の変数bを宣言

    //スタート関数
    void Start()
    {
        b = kansuu4(5);//bにkansuu4(5)の返り値を代入
        Debug.Log("b="+b);//bの値をコンソールに表示
    }

    //作った関数　
    private int kansuu4(int x)
    {
        a = x + x;//aに引数+引数の計算結果を代入
        return a;//返り値
    }

```
####結果
bにkansuu4(5)の返り値が代入されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/372a2bd5-04ca-24af-fd5d-58279de55758.png)


#おわりに
今回は主に
・返り値
・引数
・関数の作り方
・関数の使い方
を説明しました。
これらがわかると、今まで形式的に使っていた関数が違った形に見えてくるのではないでしょうか？

次記事では用意されている関数について、
実例と一緒に使い方を説明していきます。