CapersProject/Assets/Plugins/AllIn1VfxToolkit/Scripts/AllIn1VfxFakeLightDirSetter.cs

57 lines
1.6 KiB
C#
Raw Normal View History

2025-02-10 05:47:48 +00:00
using System;
using UnityEngine;
namespace AllIn1VfxToolkit
{
[ExecuteInEditMode]
public class AllIn1VfxFakeLightDirSetter : MonoBehaviour
{
[Header("This script gets executed in edit mode too")]
[SerializeField] private bool setOnAwake = true;
[SerializeField] private bool setOnUpdate = false;
[Space, Header("If target is null we'll use this object as target")]
[Header("Direction is target's forward vector")]
[SerializeField] private Transform target;
private int lightDirId = 0;
private void Awake()
{
if(setOnAwake) SetGlobalFakeLightDir();
}
private void Update()
{
if(setOnUpdate) SetGlobalFakeLightDir();
}
private void OnValidate()
{
SetGlobalFakeLightDir();
}
public void SetGlobalFakeLightDir()
{
if(lightDirId == 0) lightDirId = Shader.PropertyToID("_All1VfxLightDir");
if(target == null) target = transform;
Shader.SetGlobalVector(lightDirId, target.forward.normalized);
}
public void SetNewFakeLightDir(Vector3 newFakeLightDir)
{
if(lightDirId == 0) lightDirId = Shader.PropertyToID("_All1VfxLightDir");
Shader.SetGlobalVector(lightDirId, newFakeLightDir.normalized);
}
public void SetNewTarget(Transform newTarget)
{
target = newTarget;
}
public void SetOnUpdateBool(bool newSetOnUpdateValue)
{
setOnUpdate = newSetOnUpdateValue;
}
}
}