質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2214閲覧

Unity5.4:二つの位置の距離を保ったまま移動させたい

ra-men

総合スコア98

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/09/24 17:15

編集2016/09/25 05:34

タッチした場所(この後スワイプ)とオブジェクトの距離はそのままにオブジェクトを移動させたいです。
座標で例えるとタッチ(1.1)→(2.2)になった場合,obj(2.2)→(3.3)のような感じです。

よろしくお願い致します。

現在下記のように書いております。

c#

1Vector3 screenPos = Input.mousePosition; 2 Vector3 worldPos = Camera.main.ScreenToWorldPoint(screenPos); 3 Vector3 distance = worldPos-transform.position; 4 5 6 transform.position = new Vector3(worldPos.x + distance.x,transform.position.y + distance.y, 0);

図:理想的な動き
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

これでどこをタッチしても、距離を保ったまま移動できる

C#

1float distanceX = 0; 2float distanceY = 0; 3 4void Start() { 5........... 6void Upload() { 7 8 Vector3 screenPos = Input.mousePosition; 9 Vector3 worldPos = Camera.main.ScreenToWorldPoint(screenPos); 10#if UNITY_IOS || UNITY_ANDROID 11 12 if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) 13 { 14 15 transform.position = new Vector3(worldPos.x + distanceX, worldPos.y + distanceY, 0); 16 } 17 else { 18 distanceX = transform.position.x - worldPos.x; 19 distanceY = transform.position.y - worldPos.y; 20 } 21......

投稿2016/09/25 14:33

ra-men

総合スコア98

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちょっと書いてみました。

###ポイント mousePosition
Input.mousePositionの座標をScreenToWorldPointで変換しても、いつも同じ値が返ってきしまいます。これは、スクリーン上のマウス座標が2次元でZ軸がないので正しく変換できません。なのでカメラのz軸を引いてあげるといいと思います。

###実装
・以下コードを適当なオブジェクトにつける。
・インスペクタ上のobjに動かしたいゲームオブジェクトを指定
・インスペクタ上のobjOffsetにマウスから離したい距離を指定

C#

1using UnityEngine; 2using System.Collections; 3 4public class moveMouseFollowObj : MonoBehaviour { 5 6 [SerializeField] 7 private GameObject obj; 8 [SerializeField] 9 private Vector3 objOffset; 10 private Camera cam; 11 12 void Awake() 13 { 14 cam = Camera.main; 15 } 16 17 void Update() 18 { 19 if(Input.GetMouseButton(0)) 20 { 21 Vector3 mousePos = Input.mousePosition; 22 mousePos.z -= cam.transform.position.z; 23 Vector3 move = cam.ScreenToWorldPoint(mousePos); 24 move += objOffset; 25 obj.transform.position = move; 26 } 27 } 28}

投稿2016/09/25 08:54

編集2016/09/25 09:16
IShix

総合スコア1724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ra-men

2016/09/25 14:26

申し訳ありません、距離が可変ということもあり、違う書き方にしました。 お答えいただき誠に感謝いたします。
IShix

2016/09/25 15:11

いえいえ。解決できてよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問