unity5で、キーボードの矢印キー「→」をおした時にx座標を`+10`、「←」を押した時はx座標を`-10`した位置に動く(瞬間移動ではなく、スーッと動く)というものを書きたいのですが、やり方が分からず困っています。

```

    function Update(){
        var x : float = Input.GetAxis("Horizontal");
        if (x != 0 ){
          if(x > 0){
            transform.Translate(10, 0, 0);
          }else{
            transform.Translate(-10, 0, 0);
          }
        }
    }
    
```

現在のコードはこのような感じで、押してる間動くという挙動になってしまいます。

「カチ(入力)」「スー(動く)」  
「カチカチ(入力)」「スー、スー(動く)」  
という感じにするにはどうしたら良いのでしょうか。

言語はJavaScriptでお願いします。
CC BY-SA 3.0
2016-01-04T13:29:50.470
20600
2016-09-27T03:28:03.603
9149
question
javascript unity3d
unity5でキーボードの操作に反応してオブジェクトを動かすには
「キーを押したあと、キーを離しても動き続けさせるにはどうすればよいか？」という質問だと理解しましたが、この理解でよろしいですか？

理解が正しいとすれば、基本的にまず移動量を保持して、毎フレームtransform.Translate()へ移動量を与え続ければ、キー入力がなくても動き続けると思います。

「スー(動く)」の部分の仕様がわからないため適当(キー入力で速度を与えて、数フレームにかけて徐々に減速する)に書きましたが、こんな感じでしょうか。  
一応キーを離しても移動し続ける様子がわかると思います。  
移動量や減速の度合いはお手元の環境に合わせてお試しください。  
UnityでJavaScriptを使うの初めてなので変だったらスミマセン。

```

    #pragma strict
    
    var v : Vector3;
    
    function Start () {
    }
    
    function Update () {
        var x : float = Input.GetAxis("Horizontal");
        if (x != 0 ){
            if(x > 0){
                //transform.Translate(10, 0, 0);
                v.x = 0.1f; // 移動量の変更
            }else{
                //transform.Translate(-10, 0, 0);
                v.x = -0.1f; // 移動量の変更
            }
        }
        transform.Translate(v);
        v.x *= 0.95f;    // 移動量の更新
    }
    
```
CC BY-SA 3.0
2016-01-07T05:48:51.410
20700
2016-01-07T05:54:49.223
2016-01-07T05:54:49.223
3783
3783
20600
answer
>
> unity5で、キーボードの矢印キー「→」をおした時にx座標を+10、「←」を押した時はx座標を-10し>た位置に動く(瞬間移動ではなく、スーッと動く)というものを書きたいのですが、やり方が分から>ず困っています。

上記をまず設計しましょう。  
質問者さんが実現したいことは  
A地点からB地点まで距離10あるとして、移動するときに一気に10進むのではなく、  
少し刻んで10地点までいく、だと思います。  
それを満たすためには以下のように実装してやればいいと思います。  
※2DドラクエみたいなRPGの移動をしたい、という認識で記載してます。

1.10進む、という部分をnフレーム使って10進む、という実装にする  
2.移動している間はキー入力を無効にする

といった感じにしてやればいいと思います。  
この点はコルーチンか、あるいはUpdateでフレームを管理するシステムを作ってやれば  
実現できると思います。

肝なのは、1フレームで処理させるのではなく、数フレームまたぎで処理させてやることです。

> <http://docs.unity3d.com/ScriptReference/Input.GetKey.html>  
>  <http://docs.unity3d.com/ScriptReference/KeyCode.html>

上記、公式ドキュメントです。  
キーの入力フラグはこちらがよいかと思います。
CC BY-SA 3.0
2016-02-04T14:54:08.727
21712
2016-02-04T14:54:08.727
14215
20600
answer