Exemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        _transform = transform;

        _effectAnimation = gameObject.transform.FindChild("CameraEffects").gameObject.GetComponent <Animation>();

        string cameraPath = _forwardCameraPath;

        if (GameSettings.Instance.IsDeferredShadingActived())
        {
            cameraPath = _deferredCameraPath;
        }
        GameObject camObj = InJoy.AssetBundles.AssetBundles.Load(cameraPath, typeof(GameObject)) as GameObject;

        camObj = GameObject.Instantiate(camObj) as GameObject;
        camObj.transform.parent        = _cameraParent;
        camObj.transform.localPosition = Vector3.zero;
        camObj.transform.localRotation = Quaternion.identity;
        camObj.transform.localScale    = Vector3.one;
        _coreCamera = camObj.gameObject.GetComponent <Camera>();
        _timer      = 0.0f;
        _duration   = 1000.0f;
        _fovFactor  = GameSettings.Instance.FovFactor;

        _shakeCamera = new ShakeCamera();
        _shakeCamera.SetAnim(_effectAnimation, _effectAnimation.clip.name);

        if (_currentCamera == null)
        {
            Assertion.Check(_cameraModes.Length > 0);
            SetCurrentCamera(CameraMode.Standard);
        }

        _oldCamera = null;

        _coreCamera.backgroundColor = RenderSettings.fogColor;

        LevelLightInfo level = GameObject.FindObjectOfType(typeof(LevelLightInfo)) as LevelLightInfo;

        Renderer [] sceneRenderers = new Renderer[0];
        if (level != null)
        {
            sceneRenderers = level.GetComponentsInChildren <Renderer>();
        }
        if (!GameSettings.Instance.IsFullSceneDisplay())
        {
            int layer = LayerMask.NameToLayer("NONE");
            foreach (Renderer r in sceneRenderers)
            {
                string shaderName = r.sharedMaterial.shader.name;
                if (shaderName.Contains("(noshadow)"))
                {
                    r.gameObject.layer = layer;
                }
            }
        }

        if (GameSettings.Instance.IsDirectionalShadowActived())
        {
            _shadowRT = RenderTexture.GetTemporary(800, 800, 0, RenderTextureFormat.ARGB32);
            GameObject cameraObj = GameObject.Instantiate(_shadowCamera) as GameObject;
            _shadowCameraInstance = cameraObj.GetComponentInChildren <Camera>();
            if (_shadowCameraInstance != null)
            {
                _shadowCameraInstance.targetTexture = _shadowRT;
                _shadowCameraInstance.enabled       = false;
                _shadowCameraInstance.SetReplacementShader(_shadowShader, "");
                _shadowCameraInstance.Render();
                _shadowCameraInstance.aspect = 1.0f;

                foreach (Renderer r in sceneRenderers)
                {
                    if (null != r && null != r.sharedMaterial)
                    {
                        r.sharedMaterial.SetTexture("_shadowTex", _shadowRT);
                    }
                }
            }
            _shadowCameraTransform = cameraObj.GetComponent <Transform>();
            _shadowRenderer        = _shadowCameraInstance.GetComponentInChildren <ShadowRenderer>();
            GameObject mainLight = GameObject.FindWithTag("MainLight");
            if (mainLight != null && _shadowRenderer != null)
            {
                _shadowRenderer.SetDirectionalLight(mainLight.transform);
            }
            Shader.SetGlobalTexture("_shadowBorder", _shadowBorder);
        }
    }