

ソフトウェア開発、プログラミング初心者です。  
unity ver5.1.1f1、C#を用いて、スクリプト作成を行なっているのですが、煮詰まってしまった部分があるので質問させて頂きます。

A地点にあるObject(maincamera)がx<100というような一定の座標にある条件下で、space等のキー入力を受ける度にX方向に移動し、その条件から外れると（x>100など)Ａ地点に戻るというスクリプトを書こうとしているのですが、知識不足で上手く動作しません。

[code]

    using UnityEngine;
    using System.Collections;
    
    public class mvcam : MonoBehaviour {
    
        // Use this for initialization
        void start () {
        }
    
            void update () {
    //      int x;
            transform.localPosition = new Vector3(-11, 0, 0);
            Vector3 pos = transform.position;
            pos.x += 2;
            transform.position = pos;
    
    //      Vector3 pos = transform.position;
    //      transform.position = pos;
            if(Input.GetKey(KeyCode.Space) && pos.x< 100 )
    //          pos.x += new Vector3(1, 0, 0);
            print(transform.localPosition.x);
        }
    }
    
[/code]

こちらの、`if(Input.GetKey(KeyCode.Space) && pos.x< 100
)`の部分を「スペースキー入力があり、x<100の条件下にて」という条件式を書いているつもりなのですが、キーの反応が無く、実際は全く動作していません。

可能であれば、スクリプトの解説も交えてご教授願いたいです。よろしくお願いいたします。


CC BY-SA 3.0
2016-09-19T07:23:23.817
28981
2016-09-22T13:13:07.483
2016-09-19T08:35:40.470
3974
18843
question
c# unity3d
Unity C#を用いて条件式に座標入力を行なう方法、その他　についての質問です。


`if(Input.GetKey(KeyCode.Space) && pos.x< 100 )`  
の条件式についてですが、  
キー入力を受ける度に、ということなら  
キーを押下中ずっとtrueを返す`Input.GetKey()`でなく  
キー押下したフレームでのみtrueを返す`Input.GetKeyDown()`を利用したほうが良いでしょう。

[code]

    void update () {
    //      int x;
            transform.localPosition = new Vector3(-11, 0, 0);
            Vector3 pos = transform.position;
            ...
            }
[/code]

まず、update関数の頭文字が小文字になっています。  
毎フレーム呼び出されるようにするには`void Update ()`です。  
初期化に使うstart関数も中は空ですが、同様に頭文字が小文字になっていますね。

気になった点ですが、毎フレーム呼び出される場合、  
`transform.localPosition`が毎フレーム`Vector3 (-11, 0, 0)`で初期化されるのは  
動作として意図したものでしょうか？

`transform.localPosition`と`transform.position`が混在しているのも気になります。


CC BY-SA 3.0
2016-09-21T16:19:07.167
29036
2016-09-22T13:13:07.483
2016-09-22T13:13:07.483
18873
18873
28981
answer