This commit is contained in:
2025-07-13 18:27:36 +08:00
52 changed files with 33692 additions and 16288 deletions

View File

@@ -15,7 +15,8 @@ namespace Ichni.RhythmGame
{
public partial class GameCamera : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule
{
[FormerlySerializedAs("camera")] public Camera gameCamera;
[FormerlySerializedAs("camera")]
public Camera gameCamera;
public Transform rotationPoint;
public Transform positionPoint;
public Transform cameraTransform;
@@ -92,22 +93,23 @@ namespace Ichni.RhythmGame
public partial class GameCamera
{
private Vector3 GetWorldEulerAngles()
private void LateUpdate() // 处理LookAt
{
Vector3 output = transformSubmodule.originalEulerAngles;
GameElement element = this;
while (element != null)
if (transformSubmodule?.lookAt is not null &&
transformSubmodule.eulerAnglesOffsetLock &&
transformSubmodule.eulerAnglesDirtyMark)
{
if (element is IHaveTransformSubmodule)
{
output += ((TransformSubmodule)element.submoduleList.Where(r => r is TransformSubmodule).First()).currentEulerAngles;
}
element = element.parentElement;
Vector3 offset = transformSubmodule.eulerAnglesOffset.Sum();
transformSubmodule.currentEulerAngles = transformSubmodule.originalEulerAngles + offset;
transform.LookAt(transformSubmodule.lookAt.lookAtObject.transform);
transform.localEulerAngles += transformSubmodule.currentEulerAngles;
transformSubmodule.eulerAnglesDirtyMark = false;
transformSubmodule.eulerAnglesOffset.Clear();
}
return output;
}
public void SetTransformObserver()
{
Observable.EveryLateUpdate().Subscribe(_ =>
@@ -118,47 +120,32 @@ namespace Ichni.RhythmGame
}
bool willRefresh = false;
if (transformSubmodule.eulerAnglesOffsetLock)
if (!transformSubmodule.eulerAnglesOffsetLock && transformSubmodule.eulerAnglesDirtyMark)
{
transform.localEulerAngles = transformSubmodule.originalEulerAngles;
}
else if (transformSubmodule.eulerAnglesDirtyMark)
{
Vector3 offset = Vector3.zero;
foreach (Vector3 eulerOffset in transformSubmodule.eulerAnglesOffset)
{
offset += eulerOffset;
}
Vector3 offset = transformSubmodule.eulerAnglesOffset.Sum();
transformSubmodule.currentEulerAngles = transformSubmodule.originalEulerAngles + offset;
transform.localEulerAngles = transformSubmodule.currentEulerAngles;
transformSubmodule.eulerAnglesDirtyMark = false;
willRefresh = true;
transformSubmodule.eulerAnglesOffset.Clear();
}
if (transformSubmodule.positionDirtyMark)
{
Vector3 offset = Vector3.zero;
foreach (Vector3 posOffset in transformSubmodule.positionOffset)
{
offset += posOffset;
}
Vector3 offset = transformSubmodule.positionOffset.Sum();
transformSubmodule.currentPosition = transformSubmodule.originalPosition + offset;
transform.localPosition = transformSubmodule.currentPosition;
transformSubmodule.positionDirtyMark = false;
willRefresh = true;
transformSubmodule.positionOffset.Clear();
}
if (willRefresh)
{
this.Refresh();
Refresh();
}
transformSubmodule.eulerAnglesOffset.Clear();
transformSubmodule.positionOffset.Clear();
}).AddTo(gameObject);
}
}

View File

@@ -17,7 +17,7 @@ namespace Ichni.RhythmGame
public string backgroundSpriteName;
public Sprite backgroundSprite;
[FormerlySerializedAs("skyboxController")] public SkyboxSubsetter skyboxSubsetter;
public SkyboxSubsetter skyboxSubsetter;
public static BackgroundSetter GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, GameElement parentElement, bool useSkybox, string skyboxThemeBundleName,