p.58 引数と戻り値
・Debug.Logはメソッドと呼ばれる処理を示す構文の一つ ・C言語などでは関数と呼んでいたが、C#/Javaなどのオブジェクト指向言語ではメソッドといいクラスの中におく ・メソッドは「0個以上の情報を受け取って何かを行い0または1個の情報を返す」仕組み ・Debug.Logの場合、1個の情報を受け取って何かを行い0個の情報を返す(何も返さない) ・この情報を受け取る仕組みを引数といい、メソッド名の後にカッコで示す ・引数のないメソッドもある ・1個の情報を返すメソッドでは、何型で返すのかを決める必要がある。これを戻り値型という ※ Debug.Logの「Debug」はLogメソッドが所属するクラス名(Unityが提供) ・平方根を返すMathf.Sqrtメソッドがあり、戻り値型はfloat、引数は1個でfloat型 https://docs.unity3d.com/ja/2021.2/ScriptReference/Mathf.Sqrt.html ・このことを「戻り値型 メソッド名(引数型,…)」とも表現する 例:float Mathf.Sqrt(float) ・なお、引数型が実数(floatやdouble)の場合、整数を指定すると自動的に変換される 例: Mathf.Sqrt(16) は Mathf.Sqrt(16.0)とみなされて4.0が返される ・数式にはメソッドの呼び出しを含むことができる 例: float f = Mathf.Sqrt(16.0) + 1.0; //5.0になる ・引数でメソッドの呼び出しを含むことができる 例: Debug.Log(Mathf.Sqrt(16.0)); //4を表示 ※ Mathf.Sqrtの「Mathf」はSqrtメソッドが所属するクラス名でUnityが提供 ※ なお、Unityが提供するクラスを利用するために「using UnityEngine;」を指定している
ミニ演習 mini059
・float型のパブリック変数で実数を受け取って、平方根を表示しよう
作成例
using UnityEngine;
public class mini059 : MonoBehaviour {
[Header("実数を入力してください")]
public float a = 0;
void Start() {
Debug.Log("平方根は" + Mathf.Sqrt(a)); //メソッドを呼んで連結
}
void Update() {}
}
p.59 複数の引数を渡す
・メソッドに渡すことのできる引数の型、数、順序は定義で決まっており、定義されていない引数の指定を行うとエラーになる ※ C#やUnityが提供するメソッドの引数の型、数、順序はオフィシャルドキュメントで確認できる ※ 同じ名前で引数の型、数、順序が異なるものを複数定義できる(オーバーロードという) ※ Mathf.Maxメソッドは引数をいくつでも指定できる特別なメソッドになっている(可変引数) ・複数の引数を指定できる場合はカンマ区切りで並べると良い ・Mathf.Maxの戻り値型はfloat、引数型はすべてfloatだが、整数値を指定でき、戻り値をint型変数に代入できる ※ カンマ区切りにおいてはカンマの後ろに空白を置くというチームルールにしていることがある
p.59 Chap1_12_1
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_12_1 : MonoBehaviour {
void Start() {
int value = Mathf.Max(10, 40, 20, 30); //最大値を得る
Debug.Log( value );
}
void Update() {
}
}
アレンジ演習:p.59 Chap1_12_1
・3つのfloat型実数をパブリック変数で受け取って最大値を表示するようにしよう
作成例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chap1_12_1 : MonoBehaviour {
public float a, b, c;
void Start() {
float value = Mathf.Max(a, b, c); //最大値を得る
Debug.Log( value );
}
void Update() {
}
}
p.060 メソッドの「.」の前にあるものは何?
・前述のとおり、Debug.Logの「Debug」はLogメソッドが所属するクラス名で、これはUnityが提供するクラス ・前述のとおり、Mathf.Sqrtや、Mathf.Maxの「Mathf」はMaxメソッドが所属するクラス名で、これもUnityが提供する クラス ・メソッドは(C言語などの関数とは異なり)クラスに所属する ・なお、Start()やUpdate()もメソッドで、所属するクラス名がChap1_12_1ならば、フル名はChap1_12_1.Start()や Chap1_12_1.Update()となる。 ※ よって、実質的にはUnityシステムがクラス名.Start()を呼び出してくれている ※ なお、クラスが異なれば同名のメソッドを持つことができるので便利&注意
p.061 静的メソッドとインスタンスメソッド
・クラスは多数のメソッドを持つ部品箱的なものもあるが、基本的にはメソッドとデータを持つ設計図のイメージでもある。
・汎用的に使われるメソッドは、部品箱的なクラスにおいて「クラス名.メソッド名」で呼び出せるように静的メソッド
として定義する。
・Debug.Logメソッド、Mathf.Sqrtメソッド、Mathf.Maxメソッドはすべて静的メソッド
※ 静的メソッドは定義において「static」をつけて区別する
・対して、メソッドとデータを持つ設計図のイメージになっているクラスでは、メソッドとデータをオブジェクトとして
まとめて扱いたいので「オブジェクト名.メソッド名」で呼び出す。
・このようなメソッドをインスタンスメソッドといい、こちらが標準的存在
※ 参考:インスタンスメソッドの例(C#のArrayListクラス)
ArrayList monsters = new ArrayList(); //モンスターを格納するリストを生成
monsters.Add("ヴェルドラ"); //monstersリストにAddメソッドで追加
monsters.Add("リムル"); //monstersリストにAddメソッドで追加
ArrayList players = new ArrayList(); //プレイヤーを格納するリストを生成
players.Add("私"); //playersリストにAddメソッドで追加
※ 上記のように本来のメソッドは「何に」をつけて示すもので、静的メソッドは例外的。
※ クラスはプログラマが定義でき、中にメソッドを記述するときに、インスタンスメソッドにするか、
静的メソッドにするか判断できる
提出:アレンジ演習:p.59 Chap1_12_1