Unity3D根据缩放级别在两个摄像机之间切换

时间:2016-03-11 16:25:37

标签: c# unity3d

我在尝试使用Unity3D项目时遇到问题。

这包括两个游戏摄像头,第三人称摄像头和RTS摄像头,以及一个摄像头管理器,可以处理两者之间的切换。

两个相机都有一个公共变量currentDistance,因此管理员可以根据相机与用户的距离处理不同模式之间的切换。

例如,如果处于第三人称模式的用户缩小超过9.5(最大值为10),则禁用第三方摄像头并启用RTS。

或者对于RTS到第三人模式,RTS相机必须放大到> 48.f

要从RTS模式切换回第3人,用户必须缩小至48.0f。这是问题发生的地方,因为相机在启用和禁用之间来回滑动。

据我所知,这是因为相机的最后位置仍然在开关阈值范围内,所以当任一相机激活它时会触发开关,但是我无法理解的是我需要的逻辑以便阻止这种情况发生。我试着简单地重置每个摄像机的高度或距离,但这样可以防止我卡在我碰巧碰到的任何相机中。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class CameraManager : MonoBehaviour {

public GameObject thirdpersonCamera;
public GameObject rtsCamera;

private WoWCamera thirdPersoncam;
private RTSCam rtscam;


public float RTS_MODE_THRESHOLD = 9.5f;
public float THIRD_PERSON_MODE_THRESHOLD = 48.0f;

// Use this for initialization
void Start ()
{
    thirdpersonCamera = GameObject.FindGameObjectWithTag ("MainCamera");
    rtsCamera = GameObject.FindGameObjectWithTag ("RTSCam");

    thirdPersoncam = thirdpersonCamera.GetComponent<WoWCamera> ();
    rtscam = rtsCamera.GetComponent<RTSCam> ();
    //disable RTS cam by default, only activate it when the user zooms out past the  RTS_MODE_THRESHOLD
    rtsCamera.SetActive (false);
}

// Update is called once per frame
void Update ()
{
    int cameraID = DetermineActiveCamera ();
    if (cameraID == 1 && thirdPersoncam.currentDistance > RTS_MODE_THRESHOLD) {


            //player is in third person mode and  has zoomed out switch to RTS Cam


            //todo: need to reset cameras distance so it doesnt flip between them
            rtscam.ResetHeight();
            //thirdPersoncam.currentDistance = 8.0f;
            thirdpersonCamera.SetActive (false);
            rtsCamera.SetActive (true);

    }else if (cameraID == 2 && rtscam.currentHeight < THIRD_PERSON_MODE_THRESHOLD) {
        Debug.Log ("rts cam distance " + rtscam.currentHeight +  " and  threshold " + THIRD_PERSON_MODE_THRESHOLD);
            //player is in RTS mode and has zoomed in switch to Third person camera
            rtsCamera.SetActive (false);
            thirdpersonCamera.SetActive (true);

    }

}

//return 1 for thirdperosn camera 2 for rts, 0 for niether
int DetermineActiveCamera()
{
    if (thirdpersonCamera.activeInHierarchy != false) {
        return 1;
    } else if (rtsCamera.activeInHierarchy != false) {
        return 2;
    }
    return 0;
}
 }

对于长篇大论的问题,我很抱歉,我只想提供尽可能多的信息。

编辑:就像添加因为似乎有些混乱,我确实有 ONE 脚本来控制哪个摄像头在任何时候都处于活动状态。不同之处在于每个Camera都有自己的脚本来控制它们对按键的响应方式和public currentDistance变量。 (因为RTS凸轮只需要测量它在玩家上方的高度,所以第三人称相机需要测量它有多远) 感谢

0 个答案:

没有答案