Files
ScienceLab.AtmosphericPressure/Assets/Scripts/MercuryAtmosphereSystem.cs
2026-05-29 18:21:53 +03:00

67 lines
2.1 KiB
C#

using UnityEngine;
[ExecuteAlways]
public class MercuryAtmosphereSystem : MonoBehaviour
{
public float mercuryRadiusUnits = 2.4395f;
public float heightMultiplier = 8f;
void OnEnable()
{
if (!Application.isPlaying && transform.childCount == 0)
BuildLayers();
}
[ContextMenu("Ïåðåáóäóâàòè øàðè")]
public void BuildLayers()
{
for (int i = transform.childCount - 1; i >= 0; i--)
{
Transform child = transform.GetChild(i);
if (child.name.StartsWith("Layer_"))
{
if (Application.isPlaying) Destroy(child.gameObject);
else DestroyImmediate(child.gameObject);
}
}
CreateLayer();
}
void CreateLayer()
{
float radiusUnits = mercuryRadiusUnits + (2000f / 1000f) * heightMultiplier;
GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
obj.name = "Layer_Exosphere";
obj.transform.parent = this.transform;
obj.transform.localPosition = Vector3.zero;
obj.transform.localScale = Vector3.one * radiusUnits * 2f;
if (Application.isPlaying) Destroy(obj.GetComponent<Collider>());
else DestroyImmediate(obj.GetComponent<Collider>());
Material mat = new Material(Shader.Find("Custom/AtmosphereLayer"));
mat.SetColor("_RimColor", new Color(1f, 0.75f, 0.2f));
mat.SetColor("_CoreColor", new Color(0.8f, 0.4f, 0.0f));
mat.SetFloat("_RimPower", 1.8f);
mat.SetFloat("_RimIntensity", 4f);
mat.SetFloat("_CoreIntensity", 0.8f);
mat.SetFloat("_PulseSpeed", 0.5f);
mat.SetFloat("_PulseStrength", 0.3f);
obj.GetComponent<Renderer>().material = mat;
}
public void SetIntensity(float level)
{
Transform layer = transform.Find("Layer_Exosphere");
if (layer == null) return;
Renderer r = layer.GetComponent<Renderer>();
if (r == null) return;
r.material.SetFloat("_RimIntensity", Mathf.Lerp(0f, 4f, level));
r.material.SetFloat("_CoreIntensity", Mathf.Lerp(0f, 0.8f, level));
}
}