From b82da95b5181ac8bbae38efb13e950d5e88a4caa Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 23 Oct 2020 13:08:43 +0800 Subject: =?UTF-8?q?*=E7=A7=BB=E5=8A=A8amplify=20shader=20editor=E5=88=B0th?= =?UTF-8?q?ird=20party=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterializeFX/Scripts/MfxController.cs | 87 ++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Assets/ThirdParty/MaterializeFX/Scripts/MfxController.cs (limited to 'Assets/ThirdParty/MaterializeFX/Scripts/MfxController.cs') diff --git a/Assets/ThirdParty/MaterializeFX/Scripts/MfxController.cs b/Assets/ThirdParty/MaterializeFX/Scripts/MfxController.cs new file mode 100644 index 00000000..35aaa3e7 --- /dev/null +++ b/Assets/ThirdParty/MaterializeFX/Scripts/MfxController.cs @@ -0,0 +1,87 @@ +using UnityEngine; + +namespace Assets.MaterializeFX.Scripts +{ + internal sealed class MfxController : MonoBehaviour + { + private const string MfxMaskOffsetProperty = "_MaskOffset"; + private const string MfxMaskPositionProperty = "_MaskWorldPosition"; + + public AnimationCurve MaskOffsetCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f); + public float ScaleTimeFactor = 1; + public float ScaleOffsetFactor = 1; + public bool ModifyChildren = true; + public GameObject TargetObject; + + public bool ByDistance; + public GameObject DistanceBasedObject; + + public bool ReplaceMaterial; + public bool ReplaceMaterialMode; //Runtime, Editor + public Material MfxMaterial; + + private float _startTime; + private bool _isEnabled; + private MfxObjectMaterialUpdater _mfxObjectMaterialUpdater; + private Transform _targetTransform; + + public GameObject Target + { + get + { + return TargetObject != null ? TargetObject : gameObject; + } + } + + public void ReplaceMaterials() + { + _mfxObjectMaterialUpdater.Replace(MfxMaterial); + } + + public void RevertMaterials() + { + _mfxObjectMaterialUpdater.Revert(); + } + + private void Start() + { + _mfxObjectMaterialUpdater = new MfxObjectMaterialUpdater(Target, ModifyChildren, ReplaceMaterial, MfxMaterial); + + _targetTransform = Target.transform; + _startTime = Time.time; + } + + private void Update() + { + if (!_isEnabled || _targetTransform == null) + return; + + if (ByDistance) + { + if (DistanceBasedObject == null) + { + Debug.LogError("By distance property was set, but object was not set"); + return; + } + + _mfxObjectMaterialUpdater.SetVector(MfxMaskPositionProperty, DistanceBasedObject.transform.position); + + return; + } + + var time = Time.time - _startTime; + var maskOffset = MaskOffsetCurve.Evaluate(time / ScaleTimeFactor) * ScaleOffsetFactor; + _mfxObjectMaterialUpdater.SetFloat(MfxMaskOffsetProperty, maskOffset); + } + + private void OnEnable() + { + _isEnabled = true; + } + + private void OnDisable() + { + _isEnabled = false; + } + } +} \ No newline at end of file -- cgit v1.1-26-g67d0