質問: worldposition + distance; でエラーになります。 あと、このままだとオブジェクトが画面からはみ出てしまうこともあるので、 画面内に納まる制限をつけた動きにする(オブジェクトが画面外に、はみ出ようとするとそれ以上動かないようにする)ことを、 コードで組みたいのですが、どうすればよいでしょうか?
回答: スワイプの定義にもよりますが、「タッチ開始位置とタッチ終了(=離された)位置の差」を取ればいいかと。 位置がVector3なら`Vector3.Distance(開始位置, 終了位置)`で距離(float)が取れますし、 `終了位置 - 開始位置`で2点間のベクトル(Vector)が取れます。 画面サイズに応じた補正については以下。 Unity : モバイルでのスワイプ、ドラッグ入力量を補正する - いんでぃーづ そもそもスワイプをどう取得するかは「unity スワイプ」「unity フリック」等で検索をどうぞ。 一例:Unity-フリック操作について - Qiita (追記分) 「キューブの元の位置から、タッチ位置を動かした分だけ移動」だと思うので、考え方としては `cube.transform.position = cube.transform.position + distance;` こうだと思います。 で、最初の回答にも書きましたがVector3.Distanceは距離(float)を取得します。 Vecor3(三次元)とfloat(一次元)は足すことは出来ないので、ここは`終了位置 - 開始位置`を使って差のベクトルを取得して、キューブの元の位置に足し算します。 なお、distanceも「タッチ開始位置から現在のタッチ位置まで」になっていなかったので修正しています。 ``` Vector3 startPos; //タッチ開始位置 void Update () { if(Input.GetMouseButtonDown(0)){ //タッチ開始位置を保存 startPos = Input.mousePosition; }else if(Input.GetMouseButton(0)){ Vector3 position = Input.mousePosition; position.z = 10f; Vector3 worldposition = Camera.main.ScreenToWorldPoint(position); //「現在位置-タッチ開始位置」の差のベクトルを取る Vector3 distance = worldposition - startPos; cube.transform.position += distance; //元の位置に足す } } ``` 「ベクトルの足し算引き算」(プログラムではなく数学の範疇)を調べてみるといいと思います。 (Unityの場合、「ベクトル」も「座標」もVector3を使うのでどっちなのか理解した上でコードを読み書きする必要あり) 移動制限については「unity 移動制限」で検索すれば色々出て来るので都合の良い方法を探してみてください。