コード例 #1
0
    public IEnumerator animate(Camera from, Camera to, float time, bool copyFromCamera = true)
    {
        from.enabled = false;
        from.gameObject.SetActive(false);
        to.enabled = false;
        to.gameObject.SetActive(false);

        // Cameras info
        Vector3 fromWorldPosition = Misc.getWorldPos(from.transform);
        float   fromFieldOfView   = from.fieldOfView;
        float   toFieldOfView     = to.fieldOfView;

        // Copy "from" camera
        GameObject cameraCopy = GameObject.Instantiate(copyFromCamera ? from.gameObject : to.gameObject);

        cameraCopy.transform.parent   = null;
        cameraCopy.transform.position = fromWorldPosition;
        Camera cameraCopyCamera = cameraCopy.GetComponent <Camera>();

        cameraCopyCamera.fieldOfView = fromFieldOfView;
        AudioListener copyAudioListener = cameraCopy.GetComponentInChildren <AudioListener>();

        if (copyAudioListener != null)
        {
            Destroy(copyAudioListener);
        }

        // Move AudioListener from "from" camera into temporary camera
        AudioListenerHolder fromAudioListenerHolder = Misc.FindAudioListenerHolder(from.gameObject);
        AudioListener       audioListener           = fromAudioListenerHolder.GetComponentInChildren <AudioListener>();

        audioListener.transform.parent        = cameraCopy.transform;
        audioListener.transform.localPosition = fromAudioListenerHolder.relativePos;

        AudioListenerHolder toAudioListenerHolder = Misc.FindAudioListenerHolder(to.gameObject);

        Vector3 audioListenerMoveVector = toAudioListenerHolder.relativePos - fromAudioListenerHolder.relativePos;

        cameraCopyCamera.enabled = true;
        cameraCopy.SetActive(true);
        CameraHandler.currentRenderCamera = cameraCopyCamera;

        yield return(doAnimate(cameraCopy.GetComponent <Camera>(), to.transform, toFieldOfView, audioListener, audioListenerMoveVector, time));

//        Debug.Log("Audio listener before pos: " + Misc.getWorldPos(audioListener.transform));
        audioListener.transform.parent = toAudioListenerHolder.transform;
        bool    hasParent = toAudioListenerHolder.transform.parent != null;
        Vector3 audioListenerLocalPosition = hasParent ? Misc.DivideVectors(toAudioListenerHolder.relativePos, toAudioListenerHolder.transform.parent.localScale) : toAudioListenerHolder.relativePos;

        audioListener.transform.localPosition = audioListenerLocalPosition;
//        Debug.Log("To camera pos: " + Misc.getWorldPos(to.transform));
//        Debug.Log("Audio listener after pos: " + Misc.getWorldPos(audioListener.transform));

        to.enabled = true;
        to.gameObject.SetActive(true);
        CameraHandler.currentRenderCamera = to;
        cameraCopyCamera.enabled          = false;
        cameraCopy.SetActive(false);
        Destroy(cameraCopy);
    }
コード例 #2
0
    public static AudioListenerHolder FindAudioListenerHolder(GameObject gameObject)
    {
        AudioListenerHolder audioListenerHolder = gameObject.GetComponent <AudioListenerHolder>();

        if (audioListenerHolder != null)
        {
            return(audioListenerHolder);
        }
        for (int child = 0; child < gameObject.transform.childCount; child++)
        {
            audioListenerHolder = Misc.FindAudioListenerHolder(gameObject.transform.GetChild(child).gameObject);
            if (audioListenerHolder != null)
            {
                return(audioListenerHolder);
            }
        }
        return(null);
    }