您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
57 行
1.7 KiB
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));
|
|
}
|
|
}
|