添加了更多的材质函数,部分与引擎新特性重合,这是为了能够脱离引擎在多个版本中更具可移植性。

添加了多种对程序流程控制与保全的脚本,而且现在可以更快速的构建一个具有线性关系的协程了。
  添加了一个支持多种模式的单维梯度控制器,类似unity的颜色梯度类型。
  添加了一个用于看向某个物体的旋转控制器。
  添加了一个加载宏。
  完善了批处理脚本流程。
This commit is contained in:
2023-11-23 11:10:40 +08:00
parent d691f8cde8
commit a658cc424b
70 changed files with 24698 additions and 69 deletions

View File

@@ -0,0 +1,157 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XericLibrary.Runtime.Type;
namespace XericLibrary
{
/// <summary>
/// <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class ProgramFlowLinear : WeaklyObject
{
#region ί<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
/// <summary>
/// <20>ָ<EFBFBD><D6B8><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>¼<EFBFBD><C2BC>б<EFBFBD>
/// </summary>
public event Action RecoveredCoroutineList;
#endregion
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><EFBFBD>Ƿ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
/// </summary>
public bool LoopProgramFlow
{
get => loopProgramFlow;
set
{
if(TargetEvent == null)
loopProgramFlow = value;
else
Debug.LogError("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>л<EFBFBD>");
}
}
/// <summary>
/// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
/// </summary>
private bool loopProgramFlow = true;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ִ<EFBFBD>м<EFBFBD><D0BC><EFBFBD>
/// </summary>
public int MaxEmbeddedLoopCount = 100;
/// <summary>
/// <20><>ǰЭ<C7B0><D0AD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>
/// </summary>
private int embeddedLoopCount = 0;
/// <summary>
/// <20>ȴ<EFBFBD>ִ<EFBFBD>е<EFBFBD>Э<EFBFBD><D0AD>
/// </summary>
private LinkedList<IEnumerator> routines = new LinkedList<IEnumerator>();
/// <summary>
/// <20><>ǰִ<C7B0>е<EFBFBD>Э<EFBFBD><D0AD>
/// </summary>
private Coroutine TargetEvent;
/// <summary>
/// <20>־õ<D6BE><C3B5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private MonoBehaviour assure;
/// <summary>
/// <20><>һ<EFBFBD><D2BB>ִ<EFBFBD><D6B4>
/// </summary>
private bool firstTime = true;
#endregion
/// <summary>
/// <20><><EFBFBD><EFBFBD>Э<EFBFBD>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һϵ<D2BB><CFB5>Э<EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="recoveredListTodo"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>̵Ĺ<CCB5><C4B9>̽<EFBFBD><CCBD>ж<EFBFBD><D0B6><EFBFBD></param>
/// <param name="assure">Э<>̴<EFBFBD><CCB4><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ű<EFBFBD></param>
/// <param name="executeImmediately"><3E>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>Э<EFBFBD><D0AD></param>
/// <param name="loopProgram"><3E>趨Э<E8B6A8><D0AD>ѭ<EFBFBD><D1AD>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>start<72><74><EFBFBD><EFBFBD></param>
public ProgramFlowLinear(Action recoveredListTodo, MonoBehaviour assure, bool executeImmediately = true, bool loopProgram = true)
{
RecoveredCoroutineList = recoveredListTodo;
this.loopProgramFlow = loopProgram;
firstTime = true;
if(executeImmediately)
StartCoroutine();
}
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
/// </summary>
/// <param name="routine"></param>
public void AddCoroutine(IEnumerator routine)
{
routines.AddLast(routine);
}
/// <summary>
/// Э<>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void StartCoroutine()
{
if(TargetEvent == null)
{
if(firstTime && routines.Count <= 0)
RecoveredCoroutineList();
if(routines.Count <= 0)
{
Debug.LogError(<>̲<EFBFBD><CCB2><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2>dz<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λջΪ<D5BB><CEAA>");
return;
}
TargetEvent = assure.StartCoroutine(routines.First.Value);
routines.RemoveFirst();
firstTime = false;
}
}
/// <summary>
/// ִ<><D6B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Э<EFBFBD><D0AD>
/// </summary>
public void NextCoroutine()
{
if(loopProgramFlow && routines.Count <= 0)
RecoveredCoroutineList();
if(TargetEvent != null)
TargetEvent = null;
else
Debug.LogError(<>е<EFBFBD>Э<EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD>ʼ<EFBFBD><CABC>");
StartCoroutine();
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ִ<EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԽԤ<D4BD>Χ<E8B7B6><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֹͣЭ<D6B9><D0AD>
/// </summary>
public bool TryPromoteEmbedded()
{
if(++embeddedLoopCount > MaxEmbeddedLoopCount)
{
embeddedLoopCount = 0;
return true;
}
return false;
}
#endregion
}
}