接入火山情绪模块深入

This commit is contained in:
2025-05-14 15:35:28 +08:00
parent 578171e884
commit 6dc1abc958
15 changed files with 904 additions and 159 deletions
+12 -1
View File
@@ -68,7 +68,7 @@ MonoBehaviour:
m_PreInfinity: 0
m_PostInfinity: 0
m_RotationOrder: 0
- m_From: Eye DeepCamera
- m_From: Emo Deep Camera
m_To: '**ANY CAMERA**'
m_Blend:
m_Style: 0
@@ -79,3 +79,14 @@ MonoBehaviour:
m_PreInfinity: 0
m_PostInfinity: 0
m_RotationOrder: 0
- m_From: '**ANY CAMERA**'
m_To: Emo Deep Camera
m_Blend:
m_Style: 0
m_Time: 2
m_CustomCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 0
m_PostInfinity: 0
m_RotationOrder: 0
@@ -19,27 +19,72 @@ MonoBehaviour:
m_Key: line:0ef7bff
m_Metadata:
m_Items:
- rid: 7848877248308838403
- rid: 7848877270717431810
- m_Id: 180190609408
m_Key: line:088b598
m_Metadata:
m_Items:
- rid: 7848877248308838404
- rid: 7848877270717431811
- m_Id: 180190609409
m_Key: line:0dac12c
m_Metadata:
m_Items:
- rid: 7848877248308838405
- rid: 7848877270717431812
- m_Id: 180190609410
m_Key: line:0ad2190
m_Metadata:
m_Items:
- rid: 7848877248308838406
- rid: 7848877270717431813
- m_Id: 180194803712
m_Key: line:0466fea
m_Metadata:
m_Items:
- rid: 7848877248308838407
- rid: 7848877270717431814
- m_Id: 385815380393984
m_Key: line:3adc1a6b
m_Metadata:
m_Items:
- rid: 7848877270717431815
- m_Id: 385815418142720
m_Key: line:88de144d
m_Metadata:
m_Items:
- rid: 7848877270717431816
- m_Id: 385815418142721
m_Key: line:6e39d94c
m_Metadata:
m_Items:
- rid: 7848877270717431817
- m_Id: 385815422337024
m_Key: line:10a52b00
m_Metadata:
m_Items:
- rid: 7848877270717431818
- m_Id: 385815422337025
m_Key: line:bbda6a4d
m_Metadata:
m_Items:
- rid: 7848877270717431819
- m_Id: 385815422337026
m_Key: line:18803fd4
m_Metadata:
m_Items:
- rid: 7848877270717431820
- m_Id: 385815422337027
m_Key: line:29e5d4fb
m_Metadata:
m_Items:
- rid: 7848877270717431821
- m_Id: 385815422337028
m_Key: line:819f5fc5
m_Metadata:
m_Items:
- rid: 7848877270717431822
- m_Id: 385815422337029
m_Key: line:c51438fd
m_Metadata:
m_Items:
- rid: 7848877270717431823
m_Metadata:
m_Items: []
m_KeyGenerator:
@@ -51,28 +96,73 @@ MonoBehaviour:
type: {class: DistributedUIDGenerator, ns: UnityEngine.Localization.Tables, asm: Unity.Localization}
data:
m_CustomEpoch: 1747115029650
- rid: 7848877248308838403
- rid: 7848877270717431810
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: Start
tags: []
- rid: 7848877248308838404
- rid: 7848877270717431811
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: Center
tags: []
- rid: 7848877248308838405
- rid: 7848877270717431812
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "UserA_\u5708\u5C42\u8C61\u5F81\u8005"
tags: []
- rid: 7848877248308838406
- rid: 7848877270717431813
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "UserA_\u5708\u5C42\u8C61\u5F81\u8005"
tags: []
- rid: 7848877248308838407
- rid: 7848877270717431814
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "UserA_\u5708\u5C42\u8C61\u5F81\u8005"
tags: []
- rid: 7848877270717431815
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: Start
tags: []
- rid: 7848877270717431816
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u60C5\u7EEA\u63A2\u7D22\u5B8C\u6210"
tags: []
- rid: 7848877270717431817
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u81EA\u5351\u627E\u5230\u4E86"
tags: []
- rid: 7848877270717431818
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u7F9E\u803B\u627E\u5230\u4E86"
tags: []
- rid: 7848877270717431819
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u6050\u60E7\u627E\u5230\u4E86"
tags: []
- rid: 7848877270717431820
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u7ED3\u675F\u60C5\u7EEA\u6A21\u5757\u63A2\u7D22"
tags: []
- rid: 7848877270717431821
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u627E\u5230\u7F9E\u803B\u5BF9\u8BDD"
tags: []
- rid: 7848877270717431822
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u627E\u5230\u6050\u60E7\u5BF9\u8BDD"
tags: []
- rid: 7848877270717431823
type: {class: LineMetadata, ns: Yarn.Unity.UnityLocalization, asm: YarnSpinner.Unity}
data:
nodeName: "\u627E\u5230\u81EA\u5351\u5BF9\u8BDD"
tags: []
@@ -38,6 +38,42 @@ MonoBehaviour:
m_Localized: "me:\u770B\u8D77\u6765\u5B8C\u5168\u4E0D\u884C\u5462\uFF0C\u8BD5\u8BD5\u522B\u7684\u5427"
m_Metadata:
m_Items: []
- m_Id: 385815380393984
m_Localized: "\u6DF1\u5165\u60C5\u7EEA\u6A21\u5757"
m_Metadata:
m_Items: []
- m_Id: 385815418142720
m_Localized: "\u60C5\u7EEA\u63A2\u7D22\u5B8C\u6210\u4E86"
m_Metadata:
m_Items: []
- m_Id: 385815418142721
m_Localized: "\u81EA\u5351\u627E\u5230\u4E86"
m_Metadata:
m_Items: []
- m_Id: 385815422337024
m_Localized: "\u7F9E\u803B\u627E\u5230\u4E86"
m_Metadata:
m_Items: []
- m_Id: 385815422337025
m_Localized: "\u6050\u60E7\u627E\u5230\u4E86"
m_Metadata:
m_Items: []
- m_Id: 385815422337026
m_Localized: "\u5360\u4F4D"
m_Metadata:
m_Items: []
- m_Id: 385815422337027
m_Localized: "\u7F9E\u803B"
m_Metadata:
m_Items: []
- m_Id: 385815422337028
m_Localized: "\u6050\u60E7"
m_Metadata:
m_Items: []
- m_Id: 385815422337029
m_Localized: "\u81EA\u5351"
m_Metadata:
m_Items: []
references:
version: 2
RefIds: []
@@ -6,6 +6,8 @@ position: 205,-53
<<switch_fix_system_to "BodyModule" "Head">>
->深入表达模块 #line:0ef7bff
<<switch_fix_system_to Expression>>
->深入情绪模块
<<switch_fix_system_to Emo>>
// <<switch_fix_system_to Expression>>
// <<jump VarsInit>>
===
@@ -49,3 +49,32 @@ position: 480,-2840
---
<<jump 检查视觉>>
===
title: 情绪探索完成
tags: 待编辑
colorID: 8
position: 480,-2840
---
情绪探索完成了
===
title: 自卑找到了
tags: 待编辑
colorID: 8
position: 480,-2840
---
自卑找到了
===
title: 羞耻找到了
tags: 待编辑
colorID: 8
position: 480,-2840
---
羞耻找到了
===
title: 恐惧找到了
tags: 待编辑
colorID: 8
position: 480,-2840
---
恐惧找到了
===
@@ -0,0 +1,25 @@
title: 结束情绪模块探索
tags:
colorID: 8
position: 272,-1156
---
占位
===
title: 找到羞耻对话
position: 275,-222
---
羞耻
===
title: 找到恐惧对话
position: 275,-222
---
恐惧
===
title: 找到自卑对话
position: 275,-222
---
自卑
===
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: bb3b7274d4bc5264eb62c0f71e81029a
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 94073015eacc34c1d8fc6786e43d60ca, type: 3}
File diff suppressed because it is too large Load Diff
@@ -30,6 +30,8 @@ public class MemoryProcess : MonoBehaviour
public float targetFrequency = 1.25f; // 目标频率
public float targetClarity = 5.7f; // 目标频率
private GameObject memoryGroup;
private float lockThreshold = 0.06f; // 锁定阈值
private bool isProcessing = false; // 新增变量来追踪是否正在处理记忆
@@ -51,6 +53,7 @@ public class MemoryProcess : MonoBehaviour
public void OpenMemoryView()
{
memoryView.gameObject.SetActive(true);
memoryGroup.SetActive(true);
}
public IEnumerator DropMemoryProjector()
@@ -70,6 +73,7 @@ public class MemoryProcess : MonoBehaviour
public void CloseMemoryView()
{
memoryView.gameObject.SetActive(false);
memoryGroup.SetActive(false);
}
public void OnEnter()
{
@@ -92,6 +96,7 @@ public class MemoryProcess : MonoBehaviour
public void OnExit()
{
FavoritesManager.Instance.CloseFavorites();
CloseMemoryView();
// 离开视图时的逻辑
Debug.Log("MemoryView exited.");
}
@@ -104,6 +109,8 @@ public class MemoryProcess : MonoBehaviour
private void InitSystem()
{
FixSystemCenter.SystemDic.Register(this);
memoryGroup = transform.Find("Memory Group").gameObject;
memoryGroup.SetActive(false);
var virtualCam = transform.Find("Memory Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Memory, virtualCam);
}
+45 -7
View File
@@ -61,6 +61,7 @@ namespace AibisDream.FixSystem
FixState.UF => new UfState(),
FixState.Gear => new GearState(),
FixState.Expression => new ExpressionState(),
FixState.Emo => new EmoState(),
_ => new ClinicState()
};
@@ -79,7 +80,8 @@ namespace AibisDream.FixSystem
UF,
Expression,
Engine,
Gear
Gear,
Emo
}
public interface IState
@@ -116,7 +118,7 @@ namespace AibisDream.FixSystem
public struct BodyModuleState : IState
{
private string _args;
public FixState GetState => FixState.BodyModule;
public void SetArgs(string args)
@@ -136,7 +138,7 @@ namespace AibisDream.FixSystem
{
bodyModuleSystem.SwitchModuleGroup(moduleState);
}
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
// 开启交互
@@ -174,7 +176,7 @@ namespace AibisDream.FixSystem
// 先切BodyModule
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModule.SwitchModuleGroup(ModuleState.Body);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
@@ -213,7 +215,7 @@ namespace AibisDream.FixSystem
{
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModule.SwitchModuleGroup(ModuleState.Body);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
}
@@ -368,7 +370,7 @@ namespace AibisDream.FixSystem
memorySystem.PullMemoryProjector();
}
}
public struct ExpressionState : IState
public struct ExpressionState : IState
{
public FixState GetState => FixState.Expression;
@@ -386,8 +388,9 @@ namespace AibisDream.FixSystem
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModule.SwitchModuleGroup(ModuleState.Head);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
}
}
// 切换相机
expressionManager.OpenView();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
//expressionManager.OpenView();
@@ -405,4 +408,39 @@ namespace AibisDream.FixSystem
yield break;
}
}
public struct EmoState : IState
{
public FixState GetState => FixState.Emo;
public void SetArgs(string args)
{
}
public IEnumerator Enter()
{
var emoManager = FixSystemCenter.SystemDic.Get<EmoManager>();
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModule.SwitchModuleGroup(ModuleState.Head);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
}
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Emo);
emoManager.OpenView();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EmoDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
}
public IEnumerator Exit()
{
var emoManager = FixSystemCenter.SystemDic.Get<EmoManager>();
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModuleSystem.ResetPlug();
emoManager.CloseView();
yield break;
}
}
}
+44 -9
View File
@@ -19,18 +19,22 @@ namespace AibisDream.Framework
#region
private CinemachineBrain _cameraBrain;
private CinemachineBrain _orthoCameraBrain;
private CinemachineBrain _perspectiveCameraBrain;
private readonly Dictionary<CameraEnum, ICinemachineCamera> _virtualCameraDict = new();
private readonly Dictionary<CameraEnum, CamState> _camInitStateDict = new();
private CameraEnum _curCameraEnum;
private CamState _curInitState;
public Camera uiCamera;
private Camera _orthoMainCamera;
private Camera _perspectiveMainCamera;
private struct CamState
{
public Vector3 pos;
public float initOrthoSize;
public bool isPerspective;
}
#endregion
@@ -41,11 +45,18 @@ namespace AibisDream.Framework
public override void OnSingletonInit()
{
_cameraBrain = Camera.main?.GetComponent<CinemachineBrain>();
// 获取正交相机
_orthoMainCamera = Camera.main;
_orthoCameraBrain = _orthoMainCamera?.GetComponent<CinemachineBrain>();
// 获取透视相机
_perspectiveMainCamera = GameObject.Find("PerspectiveMainCamera")?.GetComponent<Camera>();
_perspectiveCameraBrain = _perspectiveMainCamera?.GetComponent<CinemachineBrain>();
_curCameraEnum = CameraEnum.Default;
// 获取UICamera
if (Camera.main && Camera.main.TryGetComponent<UniversalAdditionalCameraData>(out var cameraData))
if (_orthoMainCamera && _orthoMainCamera.TryGetComponent<UniversalAdditionalCameraData>(out var cameraData))
{
// 获取Stack Cameras
var stackCameras = cameraData.cameraStack;
@@ -76,7 +87,7 @@ namespace AibisDream.Framework
}
}
public void RegisterCamera(CameraEnum camType, ICinemachineCamera virtualCamera)
public void RegisterCamera(CameraEnum camType, ICinemachineCamera virtualCamera, bool isPerspective = false)
{
_virtualCameraDict[camType] = virtualCamera;
@@ -84,7 +95,8 @@ namespace AibisDream.Framework
{
pos = virtualCamera.VirtualCameraGameObject.transform.localPosition,
initOrthoSize = virtualCamera.VirtualCameraGameObject.gameObject
.GetComponent<CinemachineVirtualCamera>().m_Lens.OrthographicSize
.GetComponent<CinemachineVirtualCamera>().m_Lens.OrthographicSize,
isPerspective = isPerspective
};
_camInitStateDict[camType] = initState;
}
@@ -142,6 +154,12 @@ namespace AibisDream.Framework
yield break;
}
// 切换主相机
bool isPerspective = _camInitStateDict[camType].isPerspective;
_orthoMainCamera.gameObject.SetActive(!isPerspective);
_perspectiveMainCamera.gameObject.SetActive(isPerspective);
// 设置虚拟相机优先级
foreach (var camPair in _virtualCameraDict)
{
if (camPair.Key == camType) camPair.Value.Priority = HighPriority;
@@ -149,13 +167,17 @@ namespace AibisDream.Framework
}
_curInitState = _camInitStateDict[camType];
yield return new WaitForSeconds(_cameraBrain.m_DefaultBlend.BlendTime);
_curCameraEnum = camType;
// 等待相机切换完成
var activeBrain = isPerspective ? _perspectiveCameraBrain : _orthoCameraBrain;
yield return new WaitForSeconds(activeBrain.m_DefaultBlend.BlendTime);
}
public Tween TransCamera(Vector3 targetPos, float targetOrthographicSize, float duration)
{
// 寻找现在正在激活的相机
var curCamera = _cameraBrain.ActiveVirtualCamera;
var curCamera = _orthoCameraBrain.ActiveVirtualCamera;
var sq = DOTween.Sequence();
// 移动
@@ -173,7 +195,7 @@ namespace AibisDream.Framework
public IEnumerator TransCameraAsync(Vector3 targetPos, float duration)
{
var curCamera = _cameraBrain.ActiveVirtualCamera;
var curCamera = _orthoCameraBrain.ActiveVirtualCamera;
yield return curCamera.DOLocalMove(targetPos, duration).WaitForCompletion();
}
@@ -191,11 +213,22 @@ namespace AibisDream.Framework
[Obsolete]
public IEnumerator ShakeCamera(float duration, float strength, int vibrate)
{
var curCamera = _cameraBrain.ActiveVirtualCamera;
var curCamera = _orthoCameraBrain.ActiveVirtualCamera;
yield return curCamera.VirtualCameraGameObject.transform
.DOShakePosition(duration, strength, vibrate, 90, false, false)
.WaitForCompletion();
}
/// <summary>
/// 获取当前激活的相机
/// </summary>
public Camera GetCurrentCamera()
{
return _camInitStateDict.TryGetValue(_curCameraEnum, out var state) && state.isPerspective ?
_perspectiveMainCamera :
_orthoMainCamera;
}
}
public static class CinemachineExtension
@@ -273,5 +306,7 @@ namespace AibisDream.Framework
Gear,
EyeDeep,
ExpressionDeep,
Emo,
EmoDeep
}
}
@@ -0,0 +1,32 @@
using UnityEngine;
using AibisDream.FixSystem;
using Cinemachine;
using AibisDream.Framework;
namespace AibisDream
{
public class EmoManager : MonoBehaviour
{
private GameObject emoView;
void Start()
{
FixSystemCenter.SystemDic.Register(this);
emoView = transform.Find("Emo View").gameObject;
var virtualCam = transform.Find("Emo Camera").GetComponent<ICinemachineCamera>();
var virtualCam2 = transform.Find("Emo Deep Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Emo, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.EmoDeep, virtualCam2,true);
}
public void OpenView()
{
gameObject.SetActive(true);
}
public void CloseView()
{
gameObject.SetActive(false);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e519c3520e8cfc546a9b52372bd21274
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -5,6 +5,7 @@ using UnityEngine.UI;
using TMPro;
using Yarn.Unity;
using AibisDream;
using AibisDream.Framework;
[ExecuteAlways]
public class LakeLineDrawer : ImmediateModeShapeDrawer
@@ -218,6 +219,7 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
private void Start()
{
// 添加按钮点击事件监听
if (upButton != null) upButton.onClick.AddListener(MoveUp);
if (downButton != null) downButton.onClick.AddListener(MoveDown);
@@ -783,6 +785,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
// 计算每个点的位置和涟漪效果
private void CalculatePointPositions(float step, float halfField, float halfVisible)
{
// 获取当前物体的位置作为偏移
Vector3 followOffset = transform.position;
// 遍历每个点,计算其位置和涟漪影响
for (int i = 0; i < pointCount; i++)
{
@@ -806,8 +811,8 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
float finalY = baseHeight + ripple.heightOffset;
// 创建点的坐标
Vector3 pos = new Vector3(x, finalY, z);
// 创建点的坐标,添加跟随偏移
Vector3 pos = new Vector3(x, finalY, z) + followOffset;
points[index] = pos; // 存储计算得到的点
// 计算亮度:基于高度,越高越亮
@@ -875,6 +880,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
private void DrawEdgeLines(float halfField, float halfVisible)
{
// 获取当前物体的位置作为偏移
Vector3 followOffset = transform.position;
// 绘制湖面边缘的向下线条(无扰动)
float step = fieldSize / (pointCount - 1);
float halfEdgeLineLength = edgeLineLength * 0.5f; // 设置边缘线长度
@@ -884,9 +892,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
{
float worldZ = z + fieldOffset.y;
float x = halfField + fieldOffset.x; // 右边
DrawEdgeLine(x, worldZ, halfVisible);
DrawEdgeLine(x, worldZ, halfVisible, followOffset);
x = -halfField + fieldOffset.x; // 左边
DrawEdgeLine(x, worldZ, halfVisible);
DrawEdgeLine(x, worldZ, halfVisible, followOffset);
}
// 2. 绘制 Z 轴的边缘线(上边和下边)
@@ -894,13 +902,13 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
{
float worldX = x + fieldOffset.x;
float z = halfField + fieldOffset.y; // 上边
DrawEdgeLine(worldX, z, halfVisible);
DrawEdgeLine(worldX, z, halfVisible, followOffset);
z = -halfField + fieldOffset.y; // 下边
DrawEdgeLine(worldX, z, halfVisible);
DrawEdgeLine(worldX, z, halfVisible, followOffset);
}
}
private void DrawEdgeLine(float x, float z, float halfVisible)
private void DrawEdgeLine(float x, float z, float halfVisible, Vector3 followOffset)
{
// 检查点是否在可视区域内
if (Mathf.Abs(x) > halfVisible || Mathf.Abs(z) > halfVisible)
@@ -912,10 +920,10 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
float startY = GetHeight(x - fieldOffset.x, z - fieldOffset.y, time); // 获取湖面高度
// 设置边缘线的起始点
Vector3 start = new Vector3(x, startY, z);
Vector3 start = new Vector3(x, startY, z) + followOffset;
// 设置边缘线的终止点,向下延伸一定的长度
Vector3 end = new Vector3(x, startY - edgeLineLength, z); // 向下延伸的线条
Vector3 end = new Vector3(x, startY - edgeLineLength, z) + followOffset; // 向下延伸的线条
// 设置颜色,基于高度
float heightT = Mathf.InverseLerp(-waveHeight, waveHeight, startY);
@@ -929,6 +937,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
// 绘制目标点
private void DrawTargetPoints()
{
// 获取当前物体的位置作为偏移
Vector3 followOffset = transform.position;
float step = fieldSize / (pointCount - 1);
float halfField = fieldSize * 0.5f;
float halfVisible = visibleAreaSize * 0.5f;
@@ -950,7 +961,7 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
// 添加额外的起伏效果和高度偏移
float floatOffset = Mathf.Sin(time * floatFrequency) * floatAmplitude;
Vector3 position = new Vector3(x, height + floatOffset + targetHeightOffset, z);
Vector3 position = new Vector3(x, height + floatOffset + targetHeightOffset, z) + followOffset;
// 计算旋转
float rotation = time * rotationSpeed;
@@ -1015,6 +1026,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
private void DrawObstacles()
{
// 获取当前物体的位置作为偏移
Vector3 followOffset = transform.position;
float step = fieldSize / (pointCount - 1);
float halfField = fieldSize * 0.5f;
float halfVisible = visibleAreaSize * 0.5f;
@@ -1045,7 +1059,7 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
float riseHeight = obstacleHeight * (Application.isPlaying ? obstacle.riseProgress : 1f);
// 绘制障碍物
Vector3 basePos = new Vector3(x, height, z);
Vector3 basePos = new Vector3(x, height, z) + followOffset;
float halfWidth = obstacleWidth * 0.5f;
// 绘制底部
@@ -1071,6 +1085,9 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
private void DrawCollisionEffects()
{
// 获取当前物体的位置作为偏移
Vector3 followOffset = transform.position;
foreach (var effect in collisionEffects)
{
float elapsed = Time.time - effect.startTime;
@@ -1086,7 +1103,7 @@ public class LakeLineDrawer : ImmediateModeShapeDrawer
// 计算效果位置
Vector3 effectPos = new Vector3(effect.position.x,
GetHeight(effect.position.x - fieldOffset.x, effect.position.y - fieldOffset.y, time),
effect.position.y);
effect.position.y) + followOffset;
// 绘制同心圆涟漪
for (int i = 0; i < collisionEffectRingCount; i++)
@@ -21,7 +21,7 @@ namespace AibisDream
private void Start()
{
_expressionManager = transform.parent.GetComponent<ExpressionManager>();
_expressionManager = transform.parent.transform.parent.GetComponent<ExpressionManager>();
InitializeSystem();
}