Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
namespace FishingGame { public class SkyCubeUpdater : MonoBehaviour { [SerializeField] private int cubemapSize = 128; [SerializeField] private LayerMask mask; [SerializeField] private float updateInterval = 1f; // время между рендерами И длительность лерпа [SerializeField] private Camera cam; [SerializeField] private UniStormClouds clouds; private RenderTexture renderTexture0; private RenderTexture renderTexture1; private bool currentIs0 = true; // какая текстура сейчас "активна" (в _Cube) private float lastRenderTime; IEnumerator Start() { yield return null; for (int i = 0; i < 20; i++) { if (clouds != null) clouds.UpdateTex(); // ← раскомментируйте, если метод существует } } void OnDisable() { DestroyImmediate(cam); if (renderTexture0 != null) DestroyImmediate(renderTexture0); if (renderTexture1 != null) DestroyImmediate(renderTexture1); } void LateUpdate() { if (renderTexture0 == null) { renderTexture0 = CreateCubemapRT("Cube0"); currentIs0 = true; UpdateCubemap(55); } if (renderTexture1 == null) { renderTexture1 = CreateCubemapRT("Cube1"); currentIs0 = false; UpdateCubemap(55); } // Всегда обновляем _Lerp float timeSinceRender = Time.time - lastRenderTime; float lerp = Mathf.Clamp01(timeSinceRender / updateInterval); GetComponent
().sharedMaterial.SetFloat("_Lerp", lerp); // Пора рендерить новую кубмапу? if (timeSinceRender >= updateInterval) { // Переключаем буфер currentIs0 = !currentIs0; // Обновляем облака (если нужно) if (clouds != null) clouds.UpdateTex(); // ← раскомментируйте, если метод существует // Рендерим в "новую" текстуру UpdateCubemap(55); // Запоминаем время рендера — начало нового цикла lastRenderTime = Time.time; } } void UpdateCubemap(int faceMask) { if (!cam) { GameObject obj = new GameObject("CubemapCamera", typeof(Camera)); obj.hideFlags = HideFlags.HideAndDontSave; obj.transform.position = transform.position; obj.transform.rotation = Quaternion.identity; cam = obj.GetComponent
(); cam.clearFlags = CameraClearFlags.Skybox; cam.farClipPlane = 100; cam.enabled = false; cam.cullingMask = mask; } //if (renderTexture0 == null) //{ // renderTexture0 = CreateCubemapRT("Cube0"); //} //if (renderTexture1 == null) //{ // renderTexture1 = CreateCubemapRT("Cube1"); //} // Рендерим в текстуру, которая НЕ является текущей RenderTexture newRT = currentIs0 ? renderTexture0 : renderTexture1; cam.transform.position = transform.position; cam.RenderToCubemap(newRT, faceMask); // Назначаем текстуры в материал: // _Cube — старая (активная до этого момента) // _Cube1 — новая (только что отрендеренная) Renderer renderer = GetComponent
(); Material mat = renderer.sharedMaterial; if (currentIs0) { // Новая — renderTexture0, значит старая — renderTexture1 mat.SetTexture("_Cube", renderTexture1); // старая mat.SetTexture("_Cube1", renderTexture0); // новая } else { // Новая — renderTexture1, значит старая — renderTexture0 mat.SetTexture("_Cube", renderTexture0); // старая mat.SetTexture("_Cube1", renderTexture1); // новая } GetComponent
().sharedMaterial.SetFloat("_Lerp", 0); // _Lerp будет начинаться с 0 автоматически, потому что lastRenderTime = Time.time } RenderTexture CreateCubemapRT(string name) { RenderTexture rt = new RenderTexture(cubemapSize, cubemapSize, 0); rt.dimension = UnityEngine.Rendering.TextureDimension.Cube; rt.hideFlags = HideFlags.HideAndDontSave; rt.name = name; rt.useMipMap = true; // ← добавьте это rt.autoGenerateMips = true; // ← и это return rt; } } }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)