[備忘録]Unity で始める C# その１

2018/01/28~開始

C#はwindowsの.Net Frameworkという開発・実行環境上で動作する。
オープン化されたのがMonoである。

Monoで書いてるときに赤色になったらミスを指摘してくれている。

**メソッドは必ずクラスの中に書くこと。**

Debug.Log("aaa");
debugがクラス名　Logがメソッド名　aaaは引数。

変数は値の種類にあわせたものを使う必要がある。種類おおめ。
bool（真偽値true or flase ）  float（実数を記録） int（整数を記録） string（文字列を記憶） .. etc

＝（イコール）は”代入”の意味　等しいではない。

じつは、float型の値を書くときは数値の後に”f”をつけなければいけない。
float x = 42.195f;
double x = 42.195;　でもいい。

型変換　int x = (int)42.195f;　で結果は、42となる。（int型で表示）

メソッドの呼び出し
Debug.Log("hello");
**クラス名.メソッド名** //他の何処かで定義されたメソッドをよびだして仕事をさせるという意味。
呼び出すメソッドは必ずドコかのクラスに定義されているので、クラス名.メソッド名という風に「.（ドット）」で繋いでいる。

**クラスから作った実体をインスタンスと呼ぶ**。　Buttonクラス（メソッド・名前・位置の情報）から、Buttonインスタンス（メソッド・"OK"・"左下"）、Buttonインスタンス（メソッド・"No"・"右下"）を作ってメモリ空間上に場所確保する感じ。
クラスからインスタンスを作るには、new演算子を使って、次のように書く。
**Button button1 = new Button("OK");**
**Button button2 = new Button ("Cancel");**

**Buttonクラス→new→buttonインスタンス（button1,button2)**

------------------------------------------------------------------------------------
【クラス作成の例】

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

public class Lesson1 : MonoBehaviour {

	// Use this for initialization
	void Start () {
		Person p = new Person();
		//Personクラス→new→Personインスタンス（p）
		p.name = "太郎";
		/*クラス名.メソッド名　Personインスタンス（ｐ）はクラスを実用化したものなので、クラスとして扱う。
		 　つまりこれはPersonクラスのnameメソッドを呼び出して、メンバー変数name（クラスがもつ変数のこと。メソッド内で宣言する変数と区別する。）
		 　　に"太郎"を代入している。*/}
	
	// Update is called once per frame
	void Update () {
		
    }
}
class Person{
	public string name;
}
```
------------------------------------------------------------------------------------

アクセス修飾子
public（他のアセンブリ（実行プログラム）からアクセス可）/internal（アセンブリ内なら可）/protected（派生クラスまで可）/private（クラス内でのみ可、インスタンス（派生クラス）は不可）
既定値はクラスはinternal、メンバーはprivateなので、上の例ではpublicをつけた。
外部からいじりたいならpublicをつけるのが吉。

メソッドの定義の書き方
**戻り値の型　メソッド名　（引数の型　引数名） {
}**

戻り値はメソッドが返す値　必要ないならvoid（ボイド）と書く。
this（ジス）はインスタンス自身を表す特殊な変数。

---------------------------------------------------------------
【メソッド定義書いてみた（void）】

```csharp
	// Use this for initialization
	void Start () {
		Person p = new Person();
		//Personクラス→new→Personインスタンス（p）
		p.name = "太郎";
		/*クラス名.メソッド名　Personインスタンス（ｐ）はクラスを実用化したものなので、クラスとして扱う。
		 　つまりこれはPersonクラスのnameメソッドを呼び出して、メンバー変数name（クラスがもつ変数のこと。メソッド内で宣言する変数と区別する。）
		 　　に"太郎"を代入している。*/
		p.show ();
	}
	
	// Update is called once per frame
	void Update () {
		
	}
   }

class Person{
	public string name;

	public void show() {
		Debug.Log ("私の名前は" + this.name);
		/*戻り値いらないので型はvoid メソッド名はshow thisはインスタンス自身を表す特殊な変数　
		 this.nameはインスタンスｐ（派生クラス）.nameメソッド　上でp.name="太郎";　となっている*/
}
}
```

----------------------------
【メソッド定義書いてみた（型あり、戻り値を返す）】

```csharp
// Use this for initialization
	void Start () {
		Person p = new Person();
		//Personクラス→new→Personインスタンス（p）
		p.firstname = "太郎";
		p.lastname = "山田";
		Debug.Log (p.GetFullName ());
		/*クラス名.メソッド名　Personインスタンス（ｐ）はクラスを実用化したものなので、クラスとして扱う。
		 　つまりこれはPersonクラスのnameメソッドを呼び出して、メンバー変数name（クラスがもつ変数のこと。メソッド内で宣言する変数と区別する。）
		 　　に"太郎"を代入している。
　　　　*/
		
	}
	

}

class Person{
	public string firstname;
	public string lastname;

	public string GetFullName() {
		//戻り値の型はstring(文字列型）　
		return this.lastname + this.firstname;
}
}
```

---------------------------
【メソッド定義書いてみた（型あり、戻り値を返す、引数を渡せる）】

```csharp
// Use this for initialization
	void Start () {
		Person p = new Person();
		//Personクラス→new→Personインスタンス（p）
		p.firstname = "太郎";
		p.lastname = "山田";
		Debug.Log (p.GetFullName ("★"));
		/*クラス名.メソッド名　Personインスタンス（ｐ）はクラスを実用化したものなので、クラスとして扱う。
		 　つまりこれはPersonクラスのnameメソッドを呼び出して、メンバー変数name（クラスがもつ変数のこと。メソッド内で宣言する変数と区別する。）
		 　　に"太郎"を代入している。
　　　　*/
		
	}
	

}

class Person{
	public string firstname;
	public string lastname;

	public string GetFullName(string separator) {
		//戻り値の型はstring(文字列型）　引数付きのメソッドを定義する場合、(引数の型　引数名)を書く。複数の引数ならカンマ(,)で区切る。→(string fn , string ln)
		return this.lastname + separator + this.firstname;
}
}
```