2017-12-04 13 views
0

Unityでジョイスティックを使ってカメラの動きに問題があります。私はこのコードを私のジョイスティックに書きましたUnityでジョイスティックを使ってカメラを動かすには?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 
using UnityEngine.EventSystems; 


public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler { 

private Image bgImg; 
private Image joystickImg; 
private Vector2 pos; 


private void Start() 
{ 
    bgImg = GetComponent<Image>(); 
    joystickImg = transform.GetChild(0).GetComponent<Image>(); 
} 


public virtual void OnDrag(PointerEventData ped) 
{ 
    Vector2 pos; 
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle(bgImg.rectTransform, ped.position, ped.pressEventCamera, out pos)) 
    { 
     pos.x = (pos.x * 2 + 1)/bgImg.rectTransform.sizeDelta.x; 
     pos.y = (pos.y * 2 - 1)/bgImg.rectTransform.sizeDelta.y; 


     pos = (pos.magnitude > 1.0f) ? pos.normalized : pos; 

     // Move Joystrick IMG 
     joystickImg.rectTransform.anchoredPosition = new Vector2(pos.x * (bgImg.rectTransform.sizeDelta.x/3), pos.y * (bgImg.rectTransform.sizeDelta.y/3)); 
    } 
} 

public virtual void OnPointerDown(PointerEventData ped) 
{ 
    OnDrag(ped); 
} 

public virtual void OnPointerUp(PointerEventData ped) 
{ 
    pos = Vector2.zero; 
    joystickImg.rectTransform.anchoredPosition = Vector2.zero; 
} 

public float Horizontal() 
{ 
    if (pos.x != 0) 
    { 
     return pos.x; 
    } 
    else 
    { 
     return Input.GetAxis("Horizontal"); 
    } 
} 

public float Vertical() 
{ 
    if (pos.y != 0) 
    { 
     return pos.y; 
    } 
    else 
    { 
     return Input.GetAxis("Vertical"); 
    } 
} 
} 

このコードはうまく動き、Vector2(x、y)を動的に返します。だから、私はこのジョイスティックとこれらの座標を使ってカメラを移動したい(位置X、Yを変えたい)。どのようにそれを行うか考えていますか? everyonesのは

答えて

0

カメラ回転し、あなたが翻訳し シーン内の他のゲームオブジェクトのように振る舞い、スケール(表示されません)

原因...キューブまたは球を移動しない方法と、どこにもカメラを翻訳する方法を示していますTransformコンポーネントを持っています。

0

これは、簡単にあなたがまた必ず動きは、すべてのデバイス上で、同じであることを確認すること数(速度)とTime.deltaTimeを乗算する必要がTranslate機能

Camera.main.transform.Translate(pos, Space.World); 

で行うことができます。

だから、これはコードは次のようになります方法です:あなたOnDragまたはUpdate機能では、次に

private Vector2 pos; 
public float moveSpeed = 100f; 

Vector3 newPos = new Vector3(pos.x * moveSpeed, pos.y * moveSpeed, 0); 
newPos *= Time.deltaTime; 

Camera.main.transform.Translate(newPos, Space.World); 
関連する問題