基础内容-5

主题包;
测试NoteVisual与NoteEffect;
LookAt旋转动画与FlexibleBool
动画杂项
控制台初步
This commit is contained in:
SoulliesOfficial
2025-01-29 23:49:18 -05:00
parent 7520983b20
commit 39b4a5e7ff
102 changed files with 3492 additions and 261 deletions

View File

@@ -0,0 +1,71 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Lean.Pool;
using UnityEngine;
using UnityEngine.Serialization;
namespace Ichni.RhythmGame
{
/// <summary>
/// 将物体的z轴指向目标物体注意LookAt的启用期间物体的旋转将被锁定
/// </summary>
public class LookAt : AnimationBase
{
public TransformSubmodule targetTransformSubmodule;
public BaseElement lookAtObject;
public FlexibleBool enabling;
public static LookAt GenerateElement(string elementName, BaseElement targetObject,
BaseElement lookAtTarget, FlexibleBool enabling)
{
LookAt swirl = LeanPool.Spawn(EditorManager.instance.basePrefabs.emptyObject).AddComponent<LookAt>();
swirl.NewInitialize(elementName, targetObject);
swirl.lookAtObject = lookAtTarget;
swirl.enabling = enabling;
swirl.animationReturnType = FlexibleReturnType.Before;
if (targetObject.transformSubmodule != null)
{
swirl.targetTransformSubmodule = targetObject.transformSubmodule;
}
else
{
throw new System.Exception("Target object does not have a TransformSubmodule");
}
swirl.SetTimeDuration(-999, 999); //TODO: 换为(-delay, songLength)
return swirl;
}
private void Start()
{
targetTransformSubmodule = targetObject.transformSubmodule;
}
protected override void UpdateAnimation(float songTime)
{
enabling.UpdateFlexibleBool(songTime);
if (enabling.value)
{
animationReturnType = FlexibleReturnType.MiddleExecuting;
Vector3 lookingDirection =
(lookAtObject.transform.position - targetObject.transform.position).normalized;
Vector3 eulerAnglesOffset = Quaternion.LookRotation(lookingDirection).eulerAngles;
targetTransformSubmodule.eulerAnglesOffsetLock = true;
targetTransformSubmodule.currentEulerAngles = eulerAnglesOffset;
}
else
{
animationReturnType = FlexibleReturnType.MiddleInterval;
targetTransformSubmodule.eulerAnglesOffsetLock = false;
}
}
}
}