objectの移動(PositionとlocalPosition)

# objectの移動(PositionとlocalPosition)

objectにアクセスするためには、
transform.XXXXを利用するのが簡単
[transform リファレンス](http://docs.unity3d.com/jp/current/ScriptReference/Transform.html)

様々な変数があるけど今回は、
移動部分について

- position
- localPosition

# positionとlocalPosition

基本的な考え方は、positionは絶対座標軸上の座標値
localPositionは親オブジェクトとの相対座標値。


簡単な例だと。
unity上で図のように親子関係のオブジェクトを生成して
それぞれ、初期位置の**position**を指定する。

![スクリーンショット 2016-08-21 22.27.35.png](https://qiita-image-store.s3.amazonaws.com/0/98558/46017b81-f605-32fd-5785-0a374dcc59c9.png)


```js:親オブジェクト
#pragma strict
function Start () {
   // ピンクobjectの初期化
   transform.position = new Vector3( 0.0, 0.0, 0.0);
}
function Update () {
}
```

```js:子オブジェクト
#pragma strict

function Start () {
   // 白objectの初期化
   transform.position = new Vector3( 5.0, 0.0, 0.0);
}

function Update () {

}
```

想定通り、以下の図のように配置されます。
ピンクのobjectの位置が(0.0,0.0,0.0)
白のobjectの位置が(5.0,0.0,0.0)

![スクリーンショット 2016-08-21 22.29.43.png](https://qiita-image-store.s3.amazonaws.com/0/98558/5375008b-a34a-ca02-0a2c-d89d2be8a0fb.png)

ここで親オブジェクトの位置を変更します。
この時子オブジェクトの位置をupdateで更新するようにします。

そうしないと、おそらく初期化の順番が子オブジェクトから始まっているので、
親オブジェクトの更新に引っ張られて、想定通りに動いてくれません。。

```js:親オブジェクト
#pragma strict
function Start () {
   // ピンクobjectの初期化
   transform.position = new Vector3( 0.0, 3.0, 0.0);
}
function Update () {
}
```
```js:子オブジェクト
#pragma strict

function Start () {
}
function Update () {
 // 白objectの初期化
   transform.position = new Vector3( 5.0, 0.0, 0.0);
}
```

すると親オブジェクトだけがずれます。

![スクリーンショット 2016-08-21 22.38.13.png](https://qiita-image-store.s3.amazonaws.com/0/98558/0265fcdc-a428-9f1a-50a6-fe130dfa8c16.png)

ここで、子オブジェクトを
**position**から**localPosition**に変更してみます。

```js:子オブジェクト
#pragma strict

function Start () {
}
function Update () {
 // 白objectの初期化
   transform.localPosition = new Vector3( 5.0, 0.0, 0.0);
}
```

子オブジェクトの位置が親オブジェクトからの相対座標の指定になったため、
親と同じように上にずれて表示される。

![スクリーンショット 2016-08-21 22.39.56.png](https://qiita-image-store.s3.amazonaws.com/0/98558/07f8f23d-62d0-79bd-ee59-bb2cd6c2dd61.png)

 ---------------------------------------


# まとめ
絶対座標軸上で移動させたい場合は、**position**
親オブジェクトに追従しながた移動させたい場合は **localPosition**

```js:親オブジェクト
#pragma strict

function Start () {
   // ピンクobjectの初期化
   transform.position = new Vector3(0.0,3,0);

   Invoke("DelayMethod", 1.3f);
}

var x:boolean = true;
function Update () {
   

  if(x){
    transform.position = transform.position + new Vector3(0.1,0.0,0.0);
  }else{
    transform.position = transform.position + new Vector3(-0.1,0.0,0.0);
  }
}


function DelayMethod(){
  if(x){
    x = false;
  }else{
    x = true;
  }   
  Invoke("DelayMethod", 1.3f);
}
```
```js:子オブジェクト
#pragma strict

function Start () {
   Invoke("DelayMethod", 1.0f);
}
var x:boolean = true;
function Update () {

  if(x){
    transform.localPosition = new Vector3(5.0,0,0);
  }else{
    transform.localPosition = new Vector3(-5.0,0,0);
  }
}

function DelayMethod(){
  if(x){
    x = false;
  }else{
    x = true;
  }   
  Invoke("DelayMethod", 1.0f);
}
```

子オブジェクトがlocalPositionで動くので、
親に追従しつつ親オブジェクトの左右に移動します。

![player.gif](https://qiita-image-store.s3.amazonaws.com/0/98558/5019fa56-a982-90d8-12ea-12de26ef6bd2.gif)


localPositionからPositionに変更すると。
親オブジェクトに関係なく、-5.0と5.0をウロウロするようになりる。

![player.gif](https://qiita-image-store.s3.amazonaws.com/0/98558/02f71050-8cba-4812-ddd7-c6c4f38a7f07.gif)