2016-10-31 2 views
0

Unity에서 VR 카메라의 FOV 값을 변경하려고합니다. 편집기에서 잘 작동하지만 휴대 전화에 앱을 올려 놓으면 thecamera에 FOV 값이 잘못 표시됩니다. 누군가 제가 전화로 FOV 값을 어떻게 효과적으로 바꿀 수 있습니까? 감사합니다.Unity VR app에서 FOV 변경

답변

0

코드를 통해 수행 할 수 있습니다. 실시간으로 FOV를 조절할 수있는 스크립트가 있습니다.

using UnityEngine; 
using System.Collections; 

using UnityEngine.VR; // you always need this to use special VR functions 

public class VRUtility : MonoBehaviour { 
public GameObject camGroup; 
public Camera leftCam; 
public Camera rightCam; 

public float fov; 
private float fovMin = 40; 
private float fovMax = 100; 

private float camGroupX = 0; 
private float camGroupXMin = 0; 
private float camGroupXMax = 100; 
private float camGroupXStep = 20; 


// Use this for initialization 
public void Start() { 
    // set render quality to 50%, sacrificing speed for visual quality 
    // this is pretty important on laptops, where the framerate is often quite low 
    // 50% quality actually isn't that bad 
    VRSettings.renderScale = 3.0f; 

    OVRTouchpad.Create(); 
    OVRTouchpad.TouchHandler += HandleTouchHandler; 

    leftCam.fieldOfView = fov; 
    rightCam.fieldOfView = fov; 
} 

// Update is called once per frame 
void Update() { 

    if (Input.GetKeyDown(KeyCode.R)) { 
     InputTracking.Recenter(); // recenter "North" for VR, so that you don't have to twist around randomlys 
    } 

    // dynamically adjust VR visual quality in-game 
    if (Input.GetKeyDown(KeyCode.RightBracket)) { // increase visual quality 
     VRSettings.renderScale = Mathf.Clamp01(VRSettings.renderScale + 0.1f); 
    } 
    if (Input.GetKeyDown(KeyCode.LeftBracket)) { // decrease visual quality 
     VRSettings.renderScale = Mathf.Clamp01(VRSettings.renderScale - 0.1f); 
    } 
} 

private void HandleTouchHandler(object sender, System.EventArgs e){ 

    var touchArgs = (OVRTouchpad.TouchArgs)e; 
    if (touchArgs.TouchType == OVRTouchpad.TouchEvent.SingleTap) { 

     fov += 10; 
     if (fov > fovMax) { 
      fov = fovMin; 
     } 

     leftCam.fieldOfView = fov; 
     rightCam.fieldOfView = fov; 
    } 

    if (touchArgs.TouchType == OVRTouchpad.TouchEvent.Left || touchArgs.TouchType == OVRTouchpad.TouchEvent.Right){ 

     camGroupX += camGroupXStep; 
     if (camGroupX > camGroupXMax){ 
      camGroupX = camGroupXMin; 
     } 

     camGroup.transform.position = new Vector3(camGroupX, 0, 0); 
    } 
} 

}

는 또한 위치 사이에 카메라를 이동하지만, 그냥 무시하고있다.

관련 문제