|
|
(同じ利用者による、間の2版が非表示) |
行1: |
行1: |
− | ==徐々にcubeboxを変更するSkyboxShader==
| + | [[Unity/Shader/skybox/徐々に変更/色]] |
− | 公式のCubeBlend.shaderを使って行う
| + | |
− | ===CubeBlendのShaderのDLについて===
| + | |
− | 2種類ある。
| + | |
− | https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/DefaultResourcesExtra/Cubemaps/CubeBlend.shader
| + | |
| | | |
− | https://unity.com/releases/editor/archive のwindowsやmacの"Build in Shaders"からDL。builtin_shaders-2021.3.4f1/DefaultResourcesExtra/Cubemaps/CubeBlend.shaderにもある。
| + | [[Unity/Shader/skybox/徐々に変更/cubebox]] |
− | | + | |
− | 参考:https://bluebirdofoz.hatenablog.com/entry/2019/07/25/093410
| + | |
− | | + | |
− | ===作り方===
| + | |
− | #Shaderのdirを作成して、新規でShaderを作り、"Skybox_CubeBlendShader"にファイル名を変更して、CubeBuild.Shaderを貼り付け。コード内のhiddenをskyboxに変更。
| + | |
− | #Materialを新規作成して、InspectorのShaderを、Skybox/CubeBlendに変更する。
| + | |
− | #2箇所のskyboxにcubemapをドラッグして設定。
| + | |
− | | + | |
− | <pre>
| + | |
− | using System.Collections;
| + | |
− | using UnityEngine;
| + | |
− | | + | |
− | public class SkyboxCubeBlend : MonoBehaviour
| + | |
− | {
| + | |
− | [SerializeField] Material _skyMat = default;
| + | |
− | [SerializeField, Range(0f, 1f)] float _rate = 0.05f;
| + | |
− | Coroutine _coroutine = default;
| + | |
− | Material _runtimeMaterial = default;
| + | |
− | | + | |
− | public void Start()
| + | |
− | {
| + | |
− | FadeSkybox();
| + | |
− | }
| + | |
− | public void FadeSkybox()
| + | |
− | {
| + | |
− | if (_coroutine == null)
| + | |
− | {
| + | |
− | _runtimeMaterial = Instantiate(_skyMat);
| + | |
− | RenderSettings.skybox = _runtimeMaterial;
| + | |
− | _coroutine = StartCoroutine(FadeSkyboxRoutine(_rate));
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | IEnumerator FadeSkyboxRoutine(float rate)
| + | |
− | {
| + | |
− | float blend = 0f;
| + | |
− | while (blend < 1)
| + | |
− | {
| + | |
− | _runtimeMaterial.SetFloat("_value", blend);
| + | |
− | blend += rate;
| + | |
− | Debug.Log("_value=" + blend);
| + | |
− | yield return null;
| + | |
− | }
| + | |
− | _runtimeMaterial.SetFloat("_value", 1);
| + | |
− | _coroutine = null;
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | | + | |
− | ==オブジェクトが表示されない問題==
| + | |
− | Shader内の、"ZTest Always"を消すとよい。
| + | |
− | | + | |
− | 理由は、ZTestは、奥手前を制御するもので、Alwaysとすると、常にskyboxが、手前となるため。
| + | |
− | | + | |
− | 公式ZTest:https://docs.unity3d.com/ja/2018.4/Manual/SL-Pass.html
| + | |