UnityをC#で超入門してみる #5 時間と入力の章

UnityをC#で超入門してみる #4 GUIの章
http://qiita.com/hiroyuki_hon/items/af0a52c1cb9e856f32b2
の続きです。

#目次　超入門#5 時間と入力の章

###時間

　時間を取得してみよう
　時間を表示しよう
　時間に沿って動かしてみよう
　一時停止してみよう
　時間に沿って色を変えてみよう

###入力

　入力をしてみよう
　入力でオブジェクトを動かしてみよう
　入力でオブジェクトを生成しよう
　入力でメソッドを呼びだそう
　タッチした場所の座標を取得しよう
　//レイを打とう

##時間

#時間を取得してみよう

Time.deltaTime を利用することで
前フレームが呼び出されたときからの、経過時間を取得出来ます。
ですので、このTime.deltaTimeを積み上げることで
ゲーム内で時間を取得してみます。
こう書いてみます。

```csharp
public float timer = 0; 
	
void Update () {
	timer += Time.deltaTime;
}
```

timerに時間が貯まっていくのが確認できます。




#時間に沿って動かしてみよう
このように書いてみます。
Time.deltaTimeを乗算することで
フレームレートに左右されず一定速度でゲームオブジェクトを動かすことが可能となります。
	
```csharp
public float speed = 1;

void Update () {
	 transform.Translate(Vector3.up * speed * Time.deltaTime);
}
```

変数speedを用いることでInspector上から速度の変更がつけられます。


#一時停止してみよう
DebugクラスのBreak関数を用います。
Debug.Break(); と書くことでエディタを一時停止出来ます。

```csharp
	void Start () {
		Debug.Break();
	}
```

#時間に沿って色を変えてみよう
ColorクラスのLerp関数を用います。
だんだん色を変えてみましょう。
数字を変更することで、色の変わるスピードを調整しましょう。

```csharp
	void Update () {
		renderer.material.color = Color.Lerp(Color.blue, Color.red,   Time.time * 0.5f * 0.1f);	
	}
```


##入力

#入力をしてみよう

Input.GetKey()を用いることで入力が取れます。

```csharp
void Update(){
    if (Input.GetKey(KeyCode.Space))
    {
        Debug.Log("test");
    }
}
```

で、コンソールにtestが表示されます。
Input.anyKey　を用いれば何かのキーとすることが出来ます。

キーが押された瞬間を取りたいのであれば
Input.GetKeyDown()

```csharp
if(Input.GetButtonDown("Jump")){
Debug.Log("Space");
}
```

メニューバーから
Edit > Project Settings > Input
で、InputManeger を表示できます。


キーが離された瞬間を確認したい場合は
Input.GetKeyUp()　を用います。

マウスの座標を取得するには
例えばこう書きます。

```csharp
if (Input.GetMouseButtonDown(0))
Debug.Log(Input.mousePosition);
```

##入力でオブジェクトを動かしてみよう
入力によってオブジェクトの操作を行ってみます。
例えばこのようにかくことで、上下、左右に移動を行うことが出来ます。

```csharp

public float speed = 1.0f; 
	public void Update()
	{
		transform.position += new Vector3
		(Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime,
		 Input.GetAxisRaw("Vertical") * speed * Time.deltaTime,
		 0);

	}
```

マウスを押している間、オブジェクトを動かすには例えばこう書きます。
Inspectorのtransに動かしたいオブジェクトをドラッグ＆ドロップします。

```csharp
public class NewBehaviourScript : MonoBehaviour 
{
	public Transform trans;

	void Update ()
	{
		if ( Input.GetMouseButton(0) )
		{
			trans.transform.Rotate(1, 1, 0);
		}
	}
}
```

##入力でオブジェクトを生成しよう
こう書いてみます。

```csharp
if (Input.GetKeyDown(KeyCode.Space))
    	{
        	GameObject cube1 = GameObject.CreatePrimitive(PrimitiveType.Cube); 
    	}
```

#入力でメソッドを呼びだそう

```csharp
	int Add(int a, int b)
	{
		int sum = a + b;
        return sum;
    }

	void Update ()
	{
		if (Input.GetKeyDown(KeyCode.Space))
			{
				int j = 2, k = 3;
		        int ret = Add(j, k);

		        Debug.Log(ret);
			}
	}
```


#タッチした時の座標を取得しよう
例えば以下のように書くことで
タッチ時の座標を取得することが出来ます。
書き換え対象となるGUITextをInspector上でターゲットになるようD&Dします。

次のスクリプトはJavaScriptです。

```js
var targetGuiText :  GUIText;
var targetGuiText2 : GUIText;

var i;
var j;

function Update () {
	 if(Input.touchCount > 0){
  		if(Input.GetTouch(0).phase == TouchPhase.Began){
  		  targetGuiText.text = "x="+Input.GetTouch(0).position.x+" y="+Input.GetTouch(0).position.y;

		 i = Input.GetTouch(0).position.x;
		 j = Input.GetTouch(0).position.y;

		 targetGuiText2.text = "i="+ i +" j="+ j ;
		  }
		  Camera.main.backgroundColor = Color.red;
	 }

	 else
	 {
  	Camera.main.backgroundColor = Color.blue;
	 }
}
```


#レイを打とう
Physics.Raycastを用いる。


#筆者メモ
http://loumo.jp/programming/unity/
http://www.atmarkit.co.jp/fsmart/index/unity_game.html
http://www.atmarkit.co.jp/fsmart/index/unity.html
http://www.4gamer.net/games/032/G003263/20111210004/
https://code.google.com/p/vga-unity/
http://am1tanaka.hatenablog.com/entry/20120229/1330526852
http://naichilab.blogspot.jp/2013/06/unityprefab.html
http://yun.cup.com/unity.html

#つづく予定です
現在、画像容量を使いきってしまいコードしか載せられません^^;
UnityをC#で超入門してみる #6