タイトルの通りです。
タッチした座標からRayを発射して、ドラッグした場合マップ上の差分だけカメラを移動させるようなプログラムを作成したのですが、思うようにうまく動きません。
gifだとうまくいっているように見えますが、1フレームごとに別座標を行き来しているようで、カメラがとてもぶれてしまっています。
どなたかコード等でアドバイスをいただければ幸いです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CameraTest : MonoBehaviour 6{ 7 [SerializeField] 8 private Collider plane = null; 9 10 private Vector3 touchStartPos = Vector3.zero; 11 private Vector3 touchStartCamPos = Vector3.zero; 12 13 private bool touching = false; 14 15 // Start is called before the first frame update 16 void Start() 17 { 18 19 } 20 21 // Update is called once per frame 22 void Update() 23 { 24 if(Input.GetMouseButtonDown(0)) 25 { 26 touchStartPos = GetPointedPlanePos(); 27 touchStartCamPos = Camera.main.transform.position; 28 touching = true; 29 } 30 else if (Input.GetMouseButton(0) && touching) 31 { 32 MoveCamera(); 33 } 34 else if(touching && Input.GetMouseButtonUp(0)) 35 { 36 touching = false; 37 } 38 39 } 40 41 private void MoveCamera() 42 { 43 var touchPos = GetPointedPlanePos(); 44 var diff = touchStartPos - touchPos; 45 46 var pos = touchStartCamPos + diff; 47 48 Camera.main.transform.position = pos; 49 } 50 51 private Vector3 GetPointedPlanePos() 52 { 53 Vector3 pos = Vector3.zero; 54 55 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 56 RaycastHit hit; 57 58 if (plane.Raycast(ray, out hit, Mathf.Infinity)) 59 pos = hit.point; 60 61 return pos; 62 } 63} 64
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/25 09:46 編集
2020/08/25 09:45
2020/08/25 09:49
2020/08/25 09:59
2020/08/25 10:06 編集
2020/08/25 10:01
2020/08/25 10:31