no message

This commit is contained in:
2026-02-13 07:55:30 +00:00
parent d564c5f44e
commit a45873aee0
11 changed files with 149 additions and 37 deletions

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Unity.VisualScripting.YamlDotNet.Core.Tokens;
namespace EasyTalk.Nodes.Tags namespace EasyTalk.Nodes.Tags
{ {

8
Assets/Resources.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5175ed1863ade5245a3cfbb17a986f04
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -61,6 +61,9 @@ public abstract class Character : MonoBehaviour
[SerializeField] [SerializeField]
private NavMeshAgent navMeshAgent; private NavMeshAgent navMeshAgent;
[SerializeField]
[Tooltip("Max distance used to snap this character to the nearest NavMesh point at startup.")]
private float navMeshSnapDistance = 2f;
[Header("Animation Settings")] [Header("Animation Settings")]
[SerializeField] [SerializeField]
@@ -156,11 +159,36 @@ public abstract class Character : MonoBehaviour
} }
} }
protected virtual void Start()
{
EnsureNavMeshAgentReady();
}
protected virtual void Update() protected virtual void Update()
{ {
UpdateMovementAnimatorParams(); UpdateMovementAnimatorParams();
} }
protected bool EnsureNavMeshAgentReady()
{
if (navMeshAgent == null || !navMeshAgent.isActiveAndEnabled)
{
return false;
}
if (navMeshAgent.isOnNavMesh)
{
return true;
}
if (NavMesh.SamplePosition(transform.position, out NavMeshHit hit, navMeshSnapDistance, NavMesh.AllAreas))
{
return navMeshAgent.Warp(hit.position) && navMeshAgent.isOnNavMesh;
}
return false;
}
public void TakeDamage(int damageToTake) public void TakeDamage(int damageToTake)
{ {
if (damageToTake < 0) damageToTake = 0; if (damageToTake < 0) damageToTake = 0;
@@ -421,7 +449,7 @@ public abstract class Character : MonoBehaviour
if (animator == null) return; if (animator == null) return;
float speed = 0f; float speed = 0f;
if (navMeshAgent != null) if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled && EnsureNavMeshAgentReady())
{ {
speed = navMeshAgent.velocity.magnitude; speed = navMeshAgent.velocity.magnitude;

View File

@@ -334,7 +334,19 @@ public class ClickToMoveInputSystem : MonoBehaviour
{ {
// fallback: try to find NavMeshAgent on player root // fallback: try to find NavMeshAgent on player root
var agent = Player.current.GetComponent<NavMeshAgent>(); var agent = Player.current.GetComponent<NavMeshAgent>();
if (agent != null) agent.SetDestination(groundHit.point); if (agent != null && agent.isActiveAndEnabled)
{
if (agent.isOnNavMesh)
{
agent.SetDestination(groundHit.point);
}
else if (NavMesh.SamplePosition(Player.current.transform.position, out NavMeshHit hit, 2f, NavMesh.AllAreas) &&
agent.Warp(hit.position) &&
agent.isOnNavMesh)
{
agent.SetDestination(groundHit.point);
}
}
} }
} }
} }

View File

@@ -10,10 +10,12 @@ public class NavMeshMovementController : MonoBehaviour
[Header("Rotation")] [Header("Rotation")]
public bool enableSmartRotation = true; public bool enableSmartRotation = true;
public float rotationSpeed = 10f; public float rotationSpeed = 10f;
public float navMeshSnapDistance = 2f;
NavMeshAgent agent; NavMeshAgent agent;
Vector3 lastVelocity = Vector3.zero; Vector3 lastVelocity = Vector3.zero;
Vector3? lookAtTarget = null; // Optional target to face when stopped Vector3? lookAtTarget = null; // Optional target to face when stopped
bool navMeshSnapAttempted = false;
void Awake() void Awake()
{ {
@@ -24,9 +26,14 @@ public class NavMeshMovementController : MonoBehaviour
} }
} }
void Start()
{
EnsureAgentReady();
}
void Update() void Update()
{ {
if (agent == null) return; if (!EnsureAgentReady()) return;
// Update rotation based on movement direction // Update rotation based on movement direction
if (enableSmartRotation) if (enableSmartRotation)
@@ -65,7 +72,7 @@ public class NavMeshMovementController : MonoBehaviour
public void MoveTo(Vector3 worldPosition) public void MoveTo(Vector3 worldPosition)
{ {
if (agent == null) return; if (!EnsureAgentReady()) return;
agent.isStopped = false; agent.isStopped = false;
agent.SetDestination(worldPosition); agent.SetDestination(worldPosition);
lookAtTarget = null; // Clear look target when starting new movement lookAtTarget = null; // Clear look target when starting new movement
@@ -73,7 +80,7 @@ public class NavMeshMovementController : MonoBehaviour
public void MoveToAndLookAt(Vector3 worldPosition, Vector3 lookTarget) public void MoveToAndLookAt(Vector3 worldPosition, Vector3 lookTarget)
{ {
if (agent == null) return; if (!EnsureAgentReady()) return;
agent.isStopped = false; agent.isStopped = false;
agent.SetDestination(worldPosition); agent.SetDestination(worldPosition);
lookAtTarget = lookTarget; // Set look target for when we arrive lookAtTarget = lookTarget; // Set look target for when we arrive
@@ -81,7 +88,7 @@ public class NavMeshMovementController : MonoBehaviour
public void Stop() public void Stop()
{ {
if (agent == null) return; if (!EnsureAgentReady()) return;
agent.isStopped = true; agent.isStopped = true;
} }
@@ -97,11 +104,38 @@ public class NavMeshMovementController : MonoBehaviour
public bool IsAtDestination(float tolerance = 0.1f) public bool IsAtDestination(float tolerance = 0.1f)
{ {
if (agent == null) return true; if (!EnsureAgentReady()) return true;
return !agent.pathPending && agent.remainingDistance <= agent.stoppingDistance + tolerance; return !agent.pathPending && agent.remainingDistance <= agent.stoppingDistance + tolerance;
} }
public Vector3 GetVelocity() => lastVelocity; public Vector3 GetVelocity() => lastVelocity;
public float GetSpeed() => agent != null ? agent.velocity.magnitude : 0f; public float GetSpeed() => EnsureAgentReady() ? agent.velocity.magnitude : 0f;
bool EnsureAgentReady()
{
if (agent == null || !agent.isActiveAndEnabled)
{
return false;
}
if (agent.isOnNavMesh)
{
return true;
}
if (navMeshSnapAttempted)
{
return false;
}
navMeshSnapAttempted = true;
if (NavMesh.SamplePosition(transform.position, out NavMeshHit hit, navMeshSnapDistance, NavMesh.AllAreas))
{
return agent.Warp(hit.position) && agent.isOnNavMesh;
}
return false;
}
} }

View File

@@ -98,7 +98,7 @@ public class TriggerEvents : MonoBehaviour
// Fallback to NavMeshAgent // Fallback to NavMeshAgent
UnityEngine.AI.NavMeshAgent agent = target.GetComponent<UnityEngine.AI.NavMeshAgent>(); UnityEngine.AI.NavMeshAgent agent = target.GetComponent<UnityEngine.AI.NavMeshAgent>();
if (agent != null) if (agent != null && agent.isActiveAndEnabled && agent.isOnNavMesh)
{ {
agent.isStopped = true; agent.isStopped = true;
agent.ResetPath(); agent.ResetPath();

View File

@@ -53,6 +53,7 @@ MonoBehaviour:
m_AdditionalLightsShadowResolutionTierHigh: 1024 m_AdditionalLightsShadowResolutionTierHigh: 1024
m_ReflectionProbeBlending: 1 m_ReflectionProbeBlending: 1
m_ReflectionProbeBoxProjection: 1 m_ReflectionProbeBoxProjection: 1
m_ReflectionProbeAtlas: 1
m_ShadowDistance: 50 m_ShadowDistance: 50
m_ShadowCascadeCount: 1 m_ShadowCascadeCount: 1
m_Cascade2Split: 0.25 m_Cascade2Split: 0.25
@@ -78,11 +79,11 @@ MonoBehaviour:
m_UseAdaptivePerformance: 1 m_UseAdaptivePerformance: 1
m_ColorGradingMode: 0 m_ColorGradingMode: 0
m_ColorGradingLutSize: 32 m_ColorGradingLutSize: 32
m_AllowPostProcessAlphaOutput: 0
m_UseFastSRGBLinearConversion: 1 m_UseFastSRGBLinearConversion: 1
m_SupportDataDrivenLensFlare: 1 m_SupportDataDrivenLensFlare: 1
m_SupportScreenSpaceLensFlare: 1 m_SupportScreenSpaceLensFlare: 1
m_GPUResidentDrawerMode: 0 m_GPUResidentDrawerMode: 0
m_UseLegacyLightmaps: 0
m_SmallMeshScreenPercentage: 0 m_SmallMeshScreenPercentage: 0
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
m_ShadowType: 1 m_ShadowType: 1
@@ -100,23 +101,24 @@ MonoBehaviour:
m_Keys: [] m_Keys: []
m_Values: m_Values:
m_PrefilteringModeMainLightShadows: 3 m_PrefilteringModeMainLightShadows: 3
m_PrefilteringModeAdditionalLight: 4 m_PrefilteringModeAdditionalLight: 3
m_PrefilteringModeAdditionalLightShadows: 0 m_PrefilteringModeAdditionalLightShadows: 0
m_PrefilterXRKeywords: 1 m_PrefilterXRKeywords: 1
m_PrefilteringModeForwardPlus: 1 m_PrefilteringModeForwardPlus: 0
m_PrefilteringModeDeferredRendering: 0 m_PrefilteringModeDeferredRendering: 0
m_PrefilteringModeScreenSpaceOcclusion: 0 m_PrefilteringModeScreenSpaceOcclusion: 0
m_PrefilterDebugKeywords: 1 m_PrefilterDebugKeywords: 1
m_PrefilterWriteRenderingLayers: 1 m_PrefilterWriteRenderingLayers: 1
m_PrefilterHDROutput: 1 m_PrefilterHDROutput: 1
m_PrefilterAlphaOutput: 1
m_PrefilterSSAODepthNormals: 1 m_PrefilterSSAODepthNormals: 1
m_PrefilterSSAOSourceDepthLow: 1 m_PrefilterSSAOSourceDepthLow: 1
m_PrefilterSSAOSourceDepthMedium: 0 m_PrefilterSSAOSourceDepthMedium: 1
m_PrefilterSSAOSourceDepthHigh: 1 m_PrefilterSSAOSourceDepthHigh: 1
m_PrefilterSSAOInterleaved: 0 m_PrefilterSSAOInterleaved: 1
m_PrefilterSSAOBlueNoise: 1 m_PrefilterSSAOBlueNoise: 1
m_PrefilterSSAOSampleCountLow: 1 m_PrefilterSSAOSampleCountLow: 1
m_PrefilterSSAOSampleCountMedium: 0 m_PrefilterSSAOSampleCountMedium: 1
m_PrefilterSSAOSampleCountHigh: 1 m_PrefilterSSAOSampleCountHigh: 1
m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT1: 1
m_PrefilterDBufferMRT2: 1 m_PrefilterDBufferMRT2: 1
@@ -128,6 +130,10 @@ MonoBehaviour:
m_PrefilterScreenCoord: 1 m_PrefilterScreenCoord: 1
m_PrefilterNativeRenderPass: 1 m_PrefilterNativeRenderPass: 1
m_PrefilterUseLegacyLightmaps: 0 m_PrefilterUseLegacyLightmaps: 0
m_PrefilterBicubicLightmapSampling: 1
m_PrefilterReflectionProbeBlending: 0
m_PrefilterReflectionProbeBoxProjection: 0
m_PrefilterReflectionProbeAtlas: 1
m_ShaderVariantLogLevel: 0 m_ShaderVariantLogLevel: 0
m_ShadowCascades: 0 m_ShadowCascades: 0
m_Textures: m_Textures:

View File

@@ -53,6 +53,7 @@ MonoBehaviour:
m_AdditionalLightsShadowResolutionTierHigh: 1024 m_AdditionalLightsShadowResolutionTierHigh: 1024
m_ReflectionProbeBlending: 1 m_ReflectionProbeBlending: 1
m_ReflectionProbeBoxProjection: 1 m_ReflectionProbeBoxProjection: 1
m_ReflectionProbeAtlas: 1
m_ShadowDistance: 50 m_ShadowDistance: 50
m_ShadowCascadeCount: 4 m_ShadowCascadeCount: 4
m_Cascade2Split: 0.25 m_Cascade2Split: 0.25
@@ -78,11 +79,11 @@ MonoBehaviour:
m_UseAdaptivePerformance: 1 m_UseAdaptivePerformance: 1
m_ColorGradingMode: 0 m_ColorGradingMode: 0
m_ColorGradingLutSize: 32 m_ColorGradingLutSize: 32
m_AllowPostProcessAlphaOutput: 0
m_UseFastSRGBLinearConversion: 0 m_UseFastSRGBLinearConversion: 0
m_SupportDataDrivenLensFlare: 1 m_SupportDataDrivenLensFlare: 1
m_SupportScreenSpaceLensFlare: 1 m_SupportScreenSpaceLensFlare: 1
m_GPUResidentDrawerMode: 0 m_GPUResidentDrawerMode: 0
m_UseLegacyLightmaps: 0
m_SmallMeshScreenPercentage: 0 m_SmallMeshScreenPercentage: 0
m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
m_ShadowType: 1 m_ShadowType: 1
@@ -100,15 +101,16 @@ MonoBehaviour:
m_Keys: [] m_Keys: []
m_Values: m_Values:
m_PrefilteringModeMainLightShadows: 3 m_PrefilteringModeMainLightShadows: 3
m_PrefilteringModeAdditionalLight: 4 m_PrefilteringModeAdditionalLight: 0
m_PrefilteringModeAdditionalLightShadows: 0 m_PrefilteringModeAdditionalLightShadows: 2
m_PrefilterXRKeywords: 1 m_PrefilterXRKeywords: 1
m_PrefilteringModeForwardPlus: 1 m_PrefilteringModeForwardPlus: 2
m_PrefilteringModeDeferredRendering: 0 m_PrefilteringModeDeferredRendering: 0
m_PrefilteringModeScreenSpaceOcclusion: 1 m_PrefilteringModeScreenSpaceOcclusion: 2
m_PrefilterDebugKeywords: 1 m_PrefilterDebugKeywords: 1
m_PrefilterWriteRenderingLayers: 0 m_PrefilterWriteRenderingLayers: 1
m_PrefilterHDROutput: 1 m_PrefilterHDROutput: 1
m_PrefilterAlphaOutput: 1
m_PrefilterSSAODepthNormals: 0 m_PrefilterSSAODepthNormals: 0
m_PrefilterSSAOSourceDepthLow: 1 m_PrefilterSSAOSourceDepthLow: 1
m_PrefilterSSAOSourceDepthMedium: 1 m_PrefilterSSAOSourceDepthMedium: 1
@@ -120,14 +122,18 @@ MonoBehaviour:
m_PrefilterSSAOSampleCountHigh: 1 m_PrefilterSSAOSampleCountHigh: 1
m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT1: 1
m_PrefilterDBufferMRT2: 1 m_PrefilterDBufferMRT2: 1
m_PrefilterDBufferMRT3: 0 m_PrefilterDBufferMRT3: 1
m_PrefilterSoftShadowsQualityLow: 0 m_PrefilterSoftShadowsQualityLow: 1
m_PrefilterSoftShadowsQualityMedium: 0 m_PrefilterSoftShadowsQualityMedium: 1
m_PrefilterSoftShadowsQualityHigh: 0 m_PrefilterSoftShadowsQualityHigh: 1
m_PrefilterSoftShadows: 0 m_PrefilterSoftShadows: 0
m_PrefilterScreenCoord: 1 m_PrefilterScreenCoord: 1
m_PrefilterNativeRenderPass: 1 m_PrefilterNativeRenderPass: 1
m_PrefilterUseLegacyLightmaps: 0 m_PrefilterUseLegacyLightmaps: 0
m_PrefilterBicubicLightmapSampling: 1
m_PrefilterReflectionProbeBlending: 0
m_PrefilterReflectionProbeBoxProjection: 0
m_PrefilterReflectionProbeAtlas: 0
m_ShaderVariantLogLevel: 0 m_ShaderVariantLogLevel: 0
m_ShadowCascades: 0 m_ShadowCascades: 0
m_Textures: m_Textures:

View File

@@ -63,7 +63,21 @@ MonoBehaviour:
- rid: 2559183924860551175 - rid: 2559183924860551175
- rid: 2559183924860551176 - rid: 2559183924860551176
m_RuntimeSettings: m_RuntimeSettings:
m_List: [] m_List:
- rid: 6852985685364965378
- rid: 6852985685364965379
- rid: 6852985685364965380
- rid: 6852985685364965381
- rid: 6852985685364965384
- rid: 6852985685364965385
- rid: 6852985685364965392
- rid: 6852985685364965394
- rid: 8712630790384254976
- rid: 2559183924860551169
- rid: 2559183924860551171
- rid: 2559183924860551172
- rid: 2559183924860551175
- rid: 2559183924860551176
m_AssetVersion: 8 m_AssetVersion: 8
m_ObsoleteDefaultVolumeProfile: {fileID: 0} m_ObsoleteDefaultVolumeProfile: {fileID: 0}
m_RenderingLayerNames: m_RenderingLayerNames:

View File

@@ -36,10 +36,8 @@ GraphicsSettings:
- {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
m_PreloadedShaders: [] m_PreloadedShaders: []
m_PreloadShadersBatchTimeLimit: -1 m_PreloadShadersBatchTimeLimit: -1
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
type: 0} m_CustomRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd, type: 2}
m_CustomRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd,
type: 2}
m_TransparencySortMode: 0 m_TransparencySortMode: 0
m_TransparencySortAxis: {x: 0, y: 0, z: 1} m_TransparencySortAxis: {x: 0, y: 0, z: 1}
m_DefaultRenderingPath: 1 m_DefaultRenderingPath: 1
@@ -60,8 +58,7 @@ GraphicsSettings:
m_FogKeepExp2: 1 m_FogKeepExp2: 1
m_AlbedoSwatchInfos: [] m_AlbedoSwatchInfos: []
m_RenderPipelineGlobalSettingsMap: m_RenderPipelineGlobalSettingsMap:
UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa, type: 2}
type: 2}
m_LightsUseLinearIntensity: 1 m_LightsUseLinearIntensity: 1
m_LightsUseColorTemperature: 1 m_LightsUseColorTemperature: 1
m_LogWhenShaderIsCompiled: 0 m_LogWhenShaderIsCompiled: 0

View File

@@ -143,7 +143,8 @@ PlayerSettings:
visionOSBundleVersion: 1.0 visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0 tvOSBundleVersion: 1.0
bundleVersion: 0.1.0 bundleVersion: 0.1.0
preloadedAssets: [] preloadedAssets:
- {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
metroInputSource: 0 metroInputSource: 0
wsaTransparentSwapchain: 0 wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1 m_HolographicPauseOnTrackingLoss: 1
@@ -521,7 +522,10 @@ PlayerSettings:
m_Height: 720 m_Height: 720
m_Kind: 1 m_Kind: 1
m_SubKind: m_SubKind:
m_BuildTargetBatching: [] m_BuildTargetBatching:
- m_BuildTarget: WebGL
m_StaticBatching: 0
m_DynamicBatching: 0
m_BuildTargetShaderSettings: [] m_BuildTargetShaderSettings: []
m_BuildTargetGraphicsJobs: [] m_BuildTargetGraphicsJobs: []
m_BuildTargetGraphicsJobMode: [] m_BuildTargetGraphicsJobMode: []
@@ -557,6 +561,9 @@ PlayerSettings:
- serializedVersion: 3 - serializedVersion: 3
m_BuildTarget: Android m_BuildTarget: Android
m_Formats: 03000000 m_Formats: 03000000
- serializedVersion: 3
m_BuildTarget: WebGL
m_Formats: 05000000
playModeTestRunnerEnabled: 0 playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0 runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1 actionOnDotNetUnhandledException: 1
@@ -824,6 +831,7 @@ PlayerSettings:
webEnableSubmoduleStrippingCompatibility: 0 webEnableSubmoduleStrippingCompatibility: 0
scriptingDefineSymbols: scriptingDefineSymbols:
Standalone: TEXTMESHPRO_INSTALLED Standalone: TEXTMESHPRO_INSTALLED
WebGL: TEXTMESHPRO_INSTALLED
additionalCompilerArguments: {} additionalCompilerArguments: {}
platformArchitecture: {} platformArchitecture: {}
scriptingBackend: scriptingBackend:
@@ -845,7 +853,7 @@ PlayerSettings:
m_RenderingPath: 1 m_RenderingPath: 1
m_MobileRenderingPath: 1 m_MobileRenderingPath: 1
metroPackageName: TopDownRPG metroPackageName: TopDownRPG
metroPackageVersion: metroPackageVersion: 1.0.0.0
metroCertificatePath: metroCertificatePath:
metroCertificatePassword: metroCertificatePassword:
metroCertificateSubject: metroCertificateSubject:
@@ -853,7 +861,7 @@ PlayerSettings:
metroCertificateNotAfter: 0000000000000000 metroCertificateNotAfter: 0000000000000000
metroApplicationDescription: TopDownRPG metroApplicationDescription: TopDownRPG
wsaImages: {} wsaImages: {}
metroTileShortName: metroTileShortName: TopDownRPG
metroTileShowName: 0 metroTileShowName: 0
metroMediumTileShowName: 0 metroMediumTileShowName: 0
metroLargeTileShowName: 0 metroLargeTileShowName: 0