您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

57 行
1.7 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class Lights : MonoBehaviour
{
[Header("Generation")]
public int lightCount = 10;
public float radius = 1.0f;
public Color lightColor;
public float intensity = 5.0f;
[SerializeField]
private Light[] lights;
#if UNITY_EDITOR
[ContextMenu("Create Lights")]
void CreateLights()
{
if(lights != null && lights.Length > 0)
{
foreach(var light in lights)
{
DestroyImmediate(light.gameObject);
}
}
lights = new Light[lightCount];
for (int i = 0; i < lightCount; ++i)
{
var go = new GameObject("Light" + i);
lights[i] = go.AddComponent(typeof(Light)) as Light;
lights[i].type = LightType.Point;
lights[i].color = lightColor;
lights[i].range = 5.0f;
lights[i].intensity = (lightCount + i) / 2.0f * intensity / (lightCount * lightCount);
float angle = Mathf.PI + 2.0f * (i + 1) * Mathf.PI / lightCount;
go.transform.parent = gameObject.transform;
go.transform.localPosition = new Vector3(Mathf.Cos(angle), Mathf.Sin(angle), 0.0f);
go.transform.eulerAngles = new Vector3(0, 0, (360 * i / (float)lightCount)-60);
}
}
#endif
[Header("Runtime")]
public float intensityScale = 1.0f;
// Update is called once per frame
void Update()
{
for (int i = 0; i < lights.Length; ++i)
lights[i].intensity = Mathf.Max(0.0f, (lightCount + i) / 2.0f * Mathf.Sqrt(intensityScale) * intensity / (lightCount * lightCount));
}
}