unity入門　その2


[unityの勉強 その1](http://qiita.com/_Nanagin/items/0c36a82aab83aabdf047)では、
物体を生成して、物理エンジンを置くところまで実行してみました。

その続きです。

今回の目標は、ユーザからの入力に対して
オブジェクトを捜査するというゲームで重要な部分を見ていきます。

# 今回行った内容の概要
　クリックしてドラッグを行うと、それに応じてフィールドが傾く。

# 手順
　1. ボールが落ちないように壁を作る。
　2. フィールドを捜査するためのjavascript作成
　3. javascriptをフィールドに適応

## 　1. ボールが落ちないように壁を作る。

前回と同じ手順で、オブジェクトを生成

![スクリーンショット 2016-02-05 4.50.02.png](https://qiita-image-store.s3.amazonaws.com/0/98558/1aa91d9a-ef19-2c6b-c93f-dd6786ea3d8b.png)

こんな感じで、今回はとりあえず囲っておくだけ。
![スクリーンショット 2016-02-05 4.58.53.png](https://qiita-image-store.s3.amazonaws.com/0/98558/fb3fd591-1a61-c599-bc49-b88634a359b1.png)

## 2. フィールドを捜査するためのjavascript作成
前回、Physics Materialを追加したのと同じように、
javascriptをAssetsに登録

![スクリーンショット 2016-02-05 5.00.10.png](https://qiita-image-store.s3.amazonaws.com/0/98558/e7d012ed-dc81-7798-3c2e-59d9839a9377.png)

fieldControl.jsに名前変更
_名前変更は、ファイル選択してEnterか、ゆっくり二回クリックです。_

### javascriptファイルを書く
先ほど作成した、fieldControl.jsをダブルクリック
するとunity用のMonoDevelopが起動します。

簡単なエディタみたいなもの。

自動生成で以下のようになっています。

```js:fieldcontrol.js
#pragma strict

function Start () {

}

function Update () {

}
```

それを今回は、以下のようにします。

```js:fieldcontrol.js
#pragma strict

// 画面描画時
function Start () {

}

// 回転のスムージング
var smooth = 2.0;
// ドラックに対する傾きの反応の鈍さ
var delay = 0.5;
// クリックした位置座標を保持
var startPosition:Vector2 = Vector2(0,0);
// 移動量を算出
var dPosition:Vector2 = Vector2(0,0);
// 最大角度
var max:float = 50.0;

// 更新処理
function Update () {
    // 最初のクリック時のみ呼ばれる
    if(Input.GetMouseButtonDown(0))
    {
		// クリックを行った座標点（２次元）を保持
		startPosition.x = Input.mousePosition.x;
		startPosition.y = Input.mousePosition.y;
	}
	// クリックしている間の更新処理
	if(Input.GetMouseButton(0))
	{
		// 現在クリックしている座標点と保持した座標点の２点の差から、傾き角度を設定
		dPosition.x = startPosition.x - Input.mousePosition.x;
		dPosition.y = startPosition.y - Input.mousePosition.y;
	}

	// クリックを離した時に呼ばれる
	if(Input.GetMouseButtonUp(0))
	{
		// クリックを離したら、フィールドの角度を０に
		startPosition.x = 0;
		startPosition.y = 0;
		dPosition.x = 0;
		dPosition.y = 0;
	}

	if(dPosition.x > max)
	{
	    dPosition.x = max;
	}
	if(dPosition.y > max)
	{
	    dPosition.y = max;
	}
	if(dPosition.x < -max)
	{
	    dPosition.x = -max;
	}
	if(dPosition.y < -max)
	{
	    dPosition.y = -max;
	}
	// ドラックした方向に傾くように設定
    var tiltAroundZ = dPosition.x * delay;
	var tiltAroundX = -dPosition.y * delay;

	var target = Quaternion.Euler (tiltAroundX, 0, tiltAroundZ);
	// ターゲットの回転を実行
	transform.rotation = Quaternion.Slerp(transform.rotation, target,  Time.deltaTime * smooth);
}
```



## 3. javascriptをフィールドに適応
fieldとして作成したオブジェクトを選択して、
javascriptをドラッグ、Inspectorの**Add Componentあたり**に
持っていくと、[+]マークが出てくるので、
そこで、ドロップしてください。

![スクリーンショット 2016-02-05 5.15.34.png](https://qiita-image-store.s3.amazonaws.com/0/98558/ea420863-90d7-2c72-1e3a-01db887c62c9.png)

fieldControlのスクリプトが登録されました。
![スクリーンショット 2016-02-05 5.19.30.png](https://qiita-image-store.s3.amazonaws.com/0/98558/18565b7c-20e9-c08b-87cb-adc81b480e95.png)

試しに動かしてみます。


![test.gif](https://qiita-image-store.s3.amazonaws.com/0/98558/79573285-8157-bfcf-25ef-d9dc896cffd2.gif)

床が動いてくれるようになりました。

### 壁が一緒に動くようにする
![スクリーンショット 2016-02-05 5.50.55.png](https://qiita-image-store.s3.amazonaws.com/0/98558/b620d2fd-56a5-a952-daca-76ecf3e0c671.png)

こんな状態になれば、OK

![スクリーンショット 2016-02-05 5.52.12.png](https://qiita-image-store.s3.amazonaws.com/0/98558/83eb1597-7329-bc24-d077-9f633c8e91ac.png)

壁も一緒に動いてくれるようになりました。
![test.gif](https://qiita-image-store.s3.amazonaws.com/0/98558/afa1b83b-e9f4-8cd3-6cdc-f27c460307e2.gif)


# 問題
ボールの動きが止まったら、
何故かそれ以後、一切ボールが動かなくなる。

![test.gif](https://qiita-image-store.s3.amazonaws.com/0/98558/e3049e26-23ee-5214-9722-0d67a89fea98.gif)


この現象はなんなんだろう。。。
情報お持ちの方いれば、help me...