Merge remote-tracking branch 'origin/Luo'

This commit is contained in:
bzx
2026-03-20 18:49:31 +08:00
7 changed files with 345 additions and 36 deletions

Binary file not shown.

View File

@ -0,0 +1,138 @@
fileFormatVersion: 2
guid: c7089232fc29b014f970636baafa5e8f
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations:
- serializedVersion: 16
name: "\u6254\u5E7D\u7075"
takeName: Take 001
internalID: 1827226128182048838
firstFrame: 0
lastFrame: 100
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -105,10 +105,10 @@ AnimatorStateMachine:
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 2841690997665387767}
m_Position: {x: 450, y: 290, z: 0}
m_Position: {x: 390, y: 370, z: 0}
- serializedVersion: 1
m_State: {fileID: -9039481108547387752}
m_Position: {x: 762.47046, y: 353.65445, z: 0}
m_Position: {x: 690, y: 410, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []

View File

@ -1,5 +1,27 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-9219469375051992505
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7820496553238198887}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.94
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1107 &-7501048581804035218
AnimatorStateMachine:
serializedVersion: 6
@ -11,10 +33,13 @@ AnimatorStateMachine:
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: -4661813889618432727}
m_Position: {x: 260, y: 400, z: 0}
m_Position: {x: 80, y: 450, z: 0}
- serializedVersion: 1
m_State: {fileID: 7820496553238198887}
m_Position: {x: 260, y: 240, z: 0}
- serializedVersion: 1
m_State: {fileID: 1069791650338107702}
m_Position: {x: 460, y: 450, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
@ -37,6 +62,7 @@ AnimatorState:
m_CycleOffset: 0
m_Transitions:
- {fileID: 8977837539387090479}
- {fileID: 4495544168063020523}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@ -142,6 +168,85 @@ AnimatorController:
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &1069791650338107702
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: "\u6254\u5E7D\u7075"
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 6536301934859382806}
- {fileID: -9219469375051992505}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1827226128182048838, guid: c7089232fc29b014f970636baafa5e8f,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &4495544168063020523
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Summon
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1069791650338107702}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &6536301934859382806
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Throw
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -4661813889618432727}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.94
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &7820496553238198887
AnimatorState:
serializedVersion: 6
@ -154,6 +259,7 @@ AnimatorState:
m_CycleOffset: 0
m_Transitions:
- {fileID: -3457870087006147639}
- {fileID: 8595878504398405683}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@ -170,7 +276,7 @@ AnimatorState:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &8977837539387090479
--- !u!1101 &8595878504398405683
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
@ -179,9 +285,31 @@ AnimatorStateTransition:
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Idle
m_ConditionEvent: Summon
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 1069791650338107702}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &8977837539387090479
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7820496553238198887}
m_Solo: 0
m_Mute: 0

View File

@ -288482,8 +288482,8 @@ MonoBehaviour:
swordAttachPoint: {fileID: 0}
poisonApplePrefab: {fileID: 6932340588733953491, guid: 08c07a1efc6272a4e9c2dc8e60cb5aff,
type: 3}
targetAppleCount: 2
appleSpawnInterval: 1.5
targetAppleCount: 30
appleSpawnInterval: 4
ghostPrefab: {fileID: 1012488050875606214, guid: d2133e78601c21643b85faf7ac37ff4b,
type: 3}
ghostSpawnInterval: 15

View File

@ -666,32 +666,8 @@ namespace SpiritSystem
Vector3 targetPos = playerHead.position
+ playerForward * introDistance
+ Vector3.up * introHeight;
// 仅在苹果场景中检查目标位置是否在玩家面前160度内
if (isInAppleScene)
{
Vector3 directionToTarget = (targetPos - playerHead.position).normalized;
float angle = Vector3.Angle(playerForward, directionToTarget);
// 如果角度小于80度即在玩家前方160度扇区内则移动到玩家后方
if (angle < 90f)
{
Debug.Log($"[SpiritController] 苹果场景目标位置在玩家面前160度内 (角度: {angle:F1}),重新定位到后方");
// 使用后方方向180度旋转
Vector3 playerBackward = -playerForward;
targetPos = playerHead.position
+ playerBackward * introDistance
+ Vector3.up * introHeight;
}
else
{
Debug.Log($"[SpiritController] 苹果场景:目标位置在玩家后方 (角度: {angle:F1})");
}
}
else
{
Debug.Log($"[SpiritController] 非苹果场景:保持原位置");
}
Debug.Log($"[SpiritController] 目标位置: {targetPos}, 起始位置: {transform.position}");
@ -768,7 +744,16 @@ namespace SpiritSystem
}
/// <summary>
/// 播放跳舞动画 - 移到正前方并跳舞
/// 保持在当前位置不动(不跟随玩家)
/// </summary>
public void StayAtCurrentPosition()
{
SetState(SpiritState.StayInFront);
Debug.Log("[SpiritController] 保持在当前位置不移动");
}
/// <summary>
/// 播放跳舞动画 - 移到正前方并跳舞,动画结束后飞回固定位置
/// </summary>
public void PlayDance(Action onComplete = null)
{
@ -782,6 +767,9 @@ namespace SpiritSystem
{
if (playerHead == null) yield break;
// 记录当前固定位置
Vector3 fixedPosition = transform.position;
// 飞到正前方
Vector3 playerForward = playerHead.forward;
Vector3 targetPos = playerHead.position
@ -808,10 +796,39 @@ namespace SpiritSystem
ReturnToFollow();
// 通知外部完成
onComplete?.Invoke();
// 跳舞动画播放完成后,飞回固定位置
yield return new WaitForSeconds(2f); // 等待跳舞动画持续约2秒
// 飞回固定位置
yield return FlyToFixedPosition(fixedPosition);
// 回到固定不移动状态
SetState(SpiritState.StayInFront);
}
/// <summary>
/// 播放沮丧动画 - 移到正前方并沮丧
/// 飞回固定位置
/// </summary>
private IEnumerator FlyToFixedPosition(Vector3 fixedPosition)
{
float t = 0;
Vector3 startPos = transform.position;
float duration = 0.5f;
while (t < 1f)
{
t += Time.deltaTime / duration;
float smoothT = Mathf.SmoothStep(0, 1, t);
transform.position = Vector3.Lerp(startPos, fixedPosition, smoothT);
yield return null;
}
transform.position = fixedPosition;
}
/// <summary>
/// 播放沮丧动画 - 移到正前方并沮丧,动画结束后飞回固定位置
/// </summary>
public void PlaySad(Action onComplete = null)
{
@ -825,6 +842,9 @@ namespace SpiritSystem
{
if (playerHead == null) yield break;
// 记录当前固定位置
Vector3 fixedPosition = transform.position;
// 飞到正前方
Vector3 playerForward = playerHead.forward;
Vector3 targetPos = playerHead.position
@ -851,6 +871,15 @@ namespace SpiritSystem
ReturnToFollow();
// 通知外部完成
onComplete?.Invoke();
// 沮丧动画播放完成后,飞回固定位置
yield return new WaitForSeconds(2f); // 等待沮丧动画持续约2秒
// 飞回固定位置
yield return FlyToFixedPosition(fixedPosition);
// 回到固定不移动状态
SetState(SpiritState.StayInFront);
}
/// <summary>

View File

@ -194,10 +194,10 @@ public class DreamAppleEvent : CutsceneBase
yield return new WaitForSeconds(2f); // 等待女巫生成动画
// 女巫出现后,小精灵回到跟随模式
// 女巫出现后,小精灵保持在当前位置不移动
if (spirit != null)
{
spirit.ReturnToFollow();
spirit.StayAtCurrentPosition();
}
// ========== 开始战斗 ==========
@ -391,6 +391,13 @@ public class DreamAppleEvent : CutsceneBase
if (debugMode)
Debug.Log($"[DreamAppleEvent] 苹果被切开!进度: {slicedAppleCount}/{targetAppleCount}");
// 播放小精灵跳舞动画
var spirit = SpiritSystem.SpiritController.Instance;
if (spirit != null && currentState == DreamEventState.Battle)
{
spirit.PlayDance();
}
// 更新UI
UpdateBattleUI();
@ -410,6 +417,13 @@ public class DreamAppleEvent : CutsceneBase
if (debugMode)
Debug.Log($"[DreamAppleEvent] 苹果未击中!已错过: {missedAppleCount}");
// // 播放小精灵沮丧动画
// var spirit = SpiritSystem.SpiritController.Instance;
// if (spirit != null && currentState == DreamEventState.Battle)
// {
// spirit.PlaySad();
// }
}
/// <summary>