인터랙션 숨김 조건 추가
This commit is contained in:
parent
a7d741b81e
commit
ab734e8081
@ -98,6 +98,9 @@ GameObject:
|
|||||||
- component: {fileID: 3697702677815423220}
|
- component: {fileID: 3697702677815423220}
|
||||||
- component: {fileID: 3591347921553422000}
|
- component: {fileID: 3591347921553422000}
|
||||||
- component: {fileID: 4456475204957017828}
|
- component: {fileID: 4456475204957017828}
|
||||||
|
- component: {fileID: 2950132940454135295}
|
||||||
|
- component: {fileID: 29040892075516248}
|
||||||
|
- component: {fileID: 1332098886975329103}
|
||||||
m_Layer: 7
|
m_Layer: 7
|
||||||
m_Name: RestaurantOrder
|
m_Name: RestaurantOrder
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -154,4 +157,265 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c0b1e0992510498b8d33d5b6094b8f4b, type: 3}
|
m_Script: {fileID: 11500000, guid: c0b1e0992510498b8d33d5b6094b8f4b, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
orderType: 0
|
_currentRestaurantOrderType: 0
|
||||||
|
--- !u!135 &2950132940454135295
|
||||||
|
SphereCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4103096974375017811}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 1
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 3
|
||||||
|
m_Radius: 0.2
|
||||||
|
m_Center: {x: -0.4, y: 0, z: 0}
|
||||||
|
--- !u!114 &29040892075516248
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4103096974375017811}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 888380afc233049ce9e618f9f36c8ba8, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
profile: {fileID: 0}
|
||||||
|
profileSync: 0
|
||||||
|
camerasLayerMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
effectGroup: 0
|
||||||
|
effectTarget: {fileID: 0}
|
||||||
|
effectGroupLayer:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
effectNameFilter:
|
||||||
|
effectNameUseRegEx: 0
|
||||||
|
combineMeshes: 0
|
||||||
|
alphaCutOff: 0.5
|
||||||
|
cullBackFaces: 0
|
||||||
|
padding: 0
|
||||||
|
ignoreObjectVisibility: 0
|
||||||
|
reflectionProbes: 0
|
||||||
|
GPUInstancing: 1
|
||||||
|
sortingPriority: 0
|
||||||
|
optimizeSkinnedMesh: 1
|
||||||
|
depthClip: 0
|
||||||
|
cameraDistanceFade: 0
|
||||||
|
cameraDistanceFadeNear: 0
|
||||||
|
cameraDistanceFadeFar: 1000
|
||||||
|
normalsOption: 0
|
||||||
|
ignore: 0
|
||||||
|
_highlighted: 0
|
||||||
|
fadeInDuration: 0
|
||||||
|
fadeOutDuration: 0
|
||||||
|
flipY: 0
|
||||||
|
constantWidth: 1
|
||||||
|
extraCoveragePixels: 0
|
||||||
|
minimumWidth: 0
|
||||||
|
subMeshMask: -1
|
||||||
|
overlay: 0
|
||||||
|
overlayMode: 0
|
||||||
|
overlayColor: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||||
|
overlayAnimationSpeed: 1
|
||||||
|
overlayMinIntensity: 0.5
|
||||||
|
overlayBlending: 1
|
||||||
|
overlayTexture: {fileID: 0}
|
||||||
|
overlayTextureUVSpace: 0
|
||||||
|
overlayTextureScale: 1
|
||||||
|
overlayTextureScrolling: {x: 0, y: 0}
|
||||||
|
overlayVisibility: 0
|
||||||
|
outline: 1
|
||||||
|
outlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
outlineColorStyle: 0
|
||||||
|
outlineGradient:
|
||||||
|
serializedVersion: 2
|
||||||
|
key0: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
key1: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
key2: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
key6: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
ctime0: 0
|
||||||
|
ctime1: 65535
|
||||||
|
ctime2: 0
|
||||||
|
ctime3: 0
|
||||||
|
ctime4: 0
|
||||||
|
ctime5: 0
|
||||||
|
ctime6: 0
|
||||||
|
ctime7: 0
|
||||||
|
atime0: 0
|
||||||
|
atime1: 65535
|
||||||
|
atime2: 0
|
||||||
|
atime3: 0
|
||||||
|
atime4: 0
|
||||||
|
atime5: 0
|
||||||
|
atime6: 0
|
||||||
|
atime7: 0
|
||||||
|
m_Mode: 0
|
||||||
|
m_ColorSpace: -1
|
||||||
|
m_NumColorKeys: 2
|
||||||
|
m_NumAlphaKeys: 2
|
||||||
|
outlineGradientInLocalSpace: 0
|
||||||
|
outlineWidth: 0.45
|
||||||
|
outlineBlurPasses: 2
|
||||||
|
outlineQuality: 2
|
||||||
|
outlineEdgeMode: 0
|
||||||
|
outlineEdgeThreshold: 0.995
|
||||||
|
outlineSharpness: 1
|
||||||
|
outlineDownsampling: 1
|
||||||
|
outlineVisibility: 0
|
||||||
|
glowBlendMode: 0
|
||||||
|
outlineBlitDebug: 0
|
||||||
|
outlineIndependent: 0
|
||||||
|
outlineContourStyle: 0
|
||||||
|
outlineMaskMode: 0
|
||||||
|
glow: 0
|
||||||
|
glowWidth: 0.4
|
||||||
|
glowQuality: 2
|
||||||
|
glowBlurMethod: 0
|
||||||
|
glowDownsampling: 2
|
||||||
|
glowHQColor: {r: 0.64, g: 1, b: 0, a: 1}
|
||||||
|
glowDithering: 1
|
||||||
|
glowDitheringStyle: 0
|
||||||
|
glowMagicNumber1: 0.75
|
||||||
|
glowMagicNumber2: 0.5
|
||||||
|
glowAnimationSpeed: 1
|
||||||
|
glowVisibility: 0
|
||||||
|
glowBlitDebug: 0
|
||||||
|
glowBlendPasses: 1
|
||||||
|
glowPasses:
|
||||||
|
- offset: 4
|
||||||
|
alpha: 0.1
|
||||||
|
color: {r: 0.64, g: 1, b: 0, a: 1}
|
||||||
|
- offset: 3
|
||||||
|
alpha: 0.2
|
||||||
|
color: {r: 0.64, g: 1, b: 0, a: 1}
|
||||||
|
- offset: 2
|
||||||
|
alpha: 0.3
|
||||||
|
color: {r: 0.64, g: 1, b: 0, a: 1}
|
||||||
|
- offset: 1
|
||||||
|
alpha: 0.4
|
||||||
|
color: {r: 0.64, g: 1, b: 0, a: 1}
|
||||||
|
glowMaskMode: 0
|
||||||
|
innerGlow: 0
|
||||||
|
innerGlowWidth: 1
|
||||||
|
innerGlowColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
innerGlowBlendMode: 0
|
||||||
|
innerGlowVisibility: 0
|
||||||
|
targetFX: 0
|
||||||
|
targetFXTexture: {fileID: 0}
|
||||||
|
targetFXColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
targetFXCenter: {fileID: 0}
|
||||||
|
targetFXRotationSpeed: 50
|
||||||
|
targetFXInitialScale: 4
|
||||||
|
targetFXEndScale: 1.5
|
||||||
|
targetFXScaleToRenderBounds: 1
|
||||||
|
targetFXUseEnclosingBounds: 0
|
||||||
|
targetFXAlignToGround: 0
|
||||||
|
targetFXOffset: {x: 0, y: 0, z: 0}
|
||||||
|
targetFXFadePower: 32
|
||||||
|
targetFXGroundMaxDistance: 10
|
||||||
|
targetFXGroundLayerMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
targetFXTransitionDuration: 0.5
|
||||||
|
targetFXStayDuration: 1.5
|
||||||
|
targetFXVisibility: 1
|
||||||
|
iconFX: 0
|
||||||
|
iconFXMesh: {fileID: 0}
|
||||||
|
iconFXLightColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
iconFXDarkColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||||
|
iconFXCenter: {fileID: 0}
|
||||||
|
iconFXRotationSpeed: 50
|
||||||
|
iconFXAnimationOption: 0
|
||||||
|
iconFXAnimationAmount: 0.1
|
||||||
|
iconFXAnimationSpeed: 3
|
||||||
|
iconFXScale: 1
|
||||||
|
iconFXScaleToRenderBounds: 0
|
||||||
|
iconFXOffset: {x: 0, y: 1, z: 0}
|
||||||
|
iconFXTransitionDuration: 0.5
|
||||||
|
iconFXStayDuration: 1.5
|
||||||
|
seeThrough: 2
|
||||||
|
seeThroughOccluderMask:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 4294967295
|
||||||
|
seeThroughOccluderThreshold: 0.3
|
||||||
|
seeThroughOccluderMaskAccurate: 0
|
||||||
|
seeThroughOccluderCheckInterval: 1
|
||||||
|
seeThroughOccluderCheckIndividualObjects: 0
|
||||||
|
seeThroughDepthOffset: 0
|
||||||
|
seeThroughMaxDepth: 0
|
||||||
|
seeThroughIntensity: 0.8
|
||||||
|
seeThroughTintAlpha: 0.5
|
||||||
|
seeThroughTintColor: {r: 1, g: 0, b: 0, a: 1}
|
||||||
|
seeThroughNoise: 1
|
||||||
|
seeThroughBorder: 0
|
||||||
|
seeThroughBorderColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
seeThroughBorderOnly: 0
|
||||||
|
seeThroughBorderWidth: 0.45
|
||||||
|
seeThroughOrdered: 0
|
||||||
|
seeThroughTexture: {fileID: 0}
|
||||||
|
seeThroughTextureUVSpace: 0
|
||||||
|
seeThroughTextureScale: 1
|
||||||
|
seeThroughChildrenSortingMode: 0
|
||||||
|
rmsCount: 1
|
||||||
|
hitFxInitialIntensity: 0
|
||||||
|
hitFxMode: 0
|
||||||
|
hitFxFadeOutDuration: 0.25
|
||||||
|
hitFxColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
hitFxRadius: 0.5
|
||||||
|
--- !u!114 &1332098886975329103
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 4103096974375017811}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: f0feb22ab60a4d1885271637838f43b9, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_availableStyle:
|
||||||
|
Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
Width: 1
|
||||||
|
Opacity: 1
|
||||||
|
_focusedStyle:
|
||||||
|
Color: {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||||
|
Width: 1
|
||||||
|
Opacity: 1
|
||||||
|
_unavailableStyle:
|
||||||
|
Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||||
|
Width: 0.5
|
||||||
|
Opacity: 1
|
||||||
|
_objectiveStyle:
|
||||||
|
Color: {r: 0, g: 1, b: 1, a: 1}
|
||||||
|
Width: 1
|
||||||
|
Opacity: 1
|
||||||
|
_breathingSpeed: 2
|
||||||
|
_breathingRange: 0.3
|
||||||
|
_enableBreathingEffect: 1
|
||||||
|
_alphaCutOff: 0.5
|
||||||
|
_combineMeshes: 1
|
||||||
|
_constantWidth: 1
|
||||||
|
_outlineQuality: 2
|
||||||
|
_outlineIndependent: 1
|
||||||
|
_outlineBlurPasses: 1
|
||||||
|
_outlineSharpness: 8
|
||||||
|
_currentOutlineType: 0
|
||||||
|
_currentOpacityMultiplier: 1
|
||||||
|
@ -39,7 +39,7 @@ public InteractionDisplayParameters(string messageKey = "")
|
|||||||
public interface IInteractable
|
public interface IInteractable
|
||||||
{
|
{
|
||||||
bool CanInteract();
|
bool CanInteract();
|
||||||
bool IsInteractionHidden();
|
bool IsInteractionHidden(IInteractor interactor = null);
|
||||||
void OnInteracted(IInteractor interactor, ScriptableObject causerPayload = null);
|
void OnInteracted(IInteractor interactor, ScriptableObject causerPayload = null);
|
||||||
InteractionType GetInteractionType();
|
InteractionType GetInteractionType();
|
||||||
GameObject GetInteractableGameObject();
|
GameObject GetInteractableGameObject();
|
||||||
|
@ -25,7 +25,6 @@ public override TaskStatus OnUpdate()
|
|||||||
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
|
var blackboard = gameObject.GetComponent<IAISharedBlackboard>();
|
||||||
var target = blackboard?.GetBlackboardGameObject(nameof(RestaurantCustomerBlackboardKey.CurrentInteractionTarget));
|
var target = blackboard?.GetBlackboardGameObject(nameof(RestaurantCustomerBlackboardKey.CurrentInteractionTarget));
|
||||||
IInteractable currentInteractable = target?.GetComponent<IInteractable>();
|
IInteractable currentInteractable = target?.GetComponent<IInteractable>();
|
||||||
|
|
||||||
if (_targetOrderType == RestaurantOrderType.Wait)
|
if (_targetOrderType == RestaurantOrderType.Wait)
|
||||||
{
|
{
|
||||||
// 레스토랑 주문 인터랙션 후보를 가져옴
|
// 레스토랑 주문 인터랙션 후보를 가져옴
|
||||||
@ -54,7 +53,6 @@ public override TaskStatus OnUpdate()
|
|||||||
return TaskStatus.Failure;
|
return TaskStatus.Failure;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (currentInteractable == null)
|
if (currentInteractable == null)
|
||||||
{
|
{
|
||||||
|
@ -84,7 +84,7 @@ public bool CanSolveInteractionType(InteractionType type)
|
|||||||
{
|
{
|
||||||
if (_cachedSolvers.TryGetValue(type, out var cachedSolver)) return cachedSolver != null;
|
if (_cachedSolvers.TryGetValue(type, out var cachedSolver)) return cachedSolver != null;
|
||||||
|
|
||||||
if (RestaurantInteractionEventSolvers.TypeToSolver.TryGetValue(type, out var solverType) == false) return false;
|
if (!FetchSolverTypeForInteraction(type, out var solverType)) return false;
|
||||||
|
|
||||||
if (transform.TryGetComponent(solverType, out var component) == false) return false;
|
if (transform.TryGetComponent(solverType, out var component) == false) return false;
|
||||||
|
|
||||||
@ -92,7 +92,12 @@ public bool CanSolveInteractionType(InteractionType type)
|
|||||||
_cachedSolvers[type] = solver;
|
_cachedSolvers[type] = solver;
|
||||||
return solver != null;
|
return solver != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual bool FetchSolverTypeForInteraction(InteractionType type, out Type solverType)
|
||||||
|
{
|
||||||
|
return RestaurantInteractionEventSolvers.TypeToSolver.TryGetValue(type, out solverType);
|
||||||
|
}
|
||||||
|
|
||||||
public bool CanInteractTo(IInteractable interactable, ScriptableObject payloadSo = null)
|
public bool CanInteractTo(IInteractable interactable, ScriptableObject payloadSo = null)
|
||||||
{
|
{
|
||||||
if (interactable == null) return false;
|
if (interactable == null) return false;
|
||||||
|
@ -185,7 +185,7 @@ protected IInteractable GetNearestInteractable()
|
|||||||
if (col.TryGetComponent<IInteractable>(out var interactable) == false) continue;
|
if (col.TryGetComponent<IInteractable>(out var interactable) == false) continue;
|
||||||
|
|
||||||
var type = interactable.GetInteractionType();
|
var type = interactable.GetInteractionType();
|
||||||
if (interactable.IsInteractionHidden()) continue;
|
if (interactable.IsInteractionHidden(this)) continue;
|
||||||
if (CanSolveInteractionType(type) == false) continue;
|
if (CanSolveInteractionType(type) == false) continue;
|
||||||
|
|
||||||
float distance = Vector3.Distance(transform.position, col.transform.position);
|
float distance = Vector3.Distance(transform.position, col.transform.position);
|
||||||
@ -198,5 +198,15 @@ protected IInteractable GetNearestInteractable()
|
|||||||
|
|
||||||
return closest;
|
return closest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool FetchSolverTypeForInteraction(InteractionType type, out Type solverType)
|
||||||
|
{
|
||||||
|
if (RestaurantInteractionEventSolvers.TypeToPlayerSolver.TryGetValue(type, out solverType))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.FetchSolverTypeForInteraction(type, out solverType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
@ -157,8 +158,8 @@ private InteractionOutlineType GetCurrentOutlineType()
|
|||||||
// IInteractable 인터페이스로 캐스팅하여 상태 확인
|
// IInteractable 인터페이스로 캐스팅하여 상태 확인
|
||||||
if (_interactionComponent is not IInteractable interactable)
|
if (_interactionComponent is not IInteractable interactable)
|
||||||
return InteractionOutlineType.None;
|
return InteractionOutlineType.None;
|
||||||
|
|
||||||
if (_interactionComponent.IsInteractionHidden())
|
if (_interactionComponent.IsInteractionHidden(_interactor))
|
||||||
{
|
{
|
||||||
return InteractionOutlineType.None;
|
return InteractionOutlineType.None;
|
||||||
}
|
}
|
||||||
|
@ -67,11 +67,26 @@ public virtual bool CanInteract()
|
|||||||
return isInteractionVisible && hasValidSubsystem;
|
return isInteractionVisible && hasValidSubsystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool IsInteractionHidden()
|
public virtual bool IsInteractionHidden(IInteractor interactor = null)
|
||||||
{
|
{
|
||||||
var currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState;
|
var currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState;
|
||||||
var flowDisabled = (currentGameFlowState & _interactionAvailableFlows) == 0;
|
var flowDisabled = (currentGameFlowState & _interactionAvailableFlows) == 0;
|
||||||
return flowDisabled;
|
if (flowDisabled)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// only check if interactor is valid. if not, pass the check.
|
||||||
|
if (interactor != null && HasSubsystem(_interactionType))
|
||||||
|
{
|
||||||
|
bool canSolve = interactor.CanSolveInteractionType(_interactionType);
|
||||||
|
if (!canSolve)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnInteracted(IInteractor interactor, ScriptableObject payload = null)
|
public virtual void OnInteracted(IInteractor interactor, ScriptableObject payload = null)
|
||||||
@ -119,7 +134,7 @@ private bool HasSubsystem(InteractionType interactionType)
|
|||||||
|
|
||||||
private IInteractionSubsystemObject GetSubsystem(InteractionType interactionType)
|
private IInteractionSubsystemObject GetSubsystem(InteractionType interactionType)
|
||||||
{
|
{
|
||||||
return _subsystems.GetValueOrDefault(interactionType) as IInteractionSubsystemObject;
|
return _subsystems.GetValueOrDefault(interactionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryGetSubsystem(InteractionType interactionType, out IInteractionSubsystemObject subsystem)
|
private bool TryGetSubsystem(InteractionType interactionType, out IInteractionSubsystemObject subsystem)
|
||||||
|
Loading…
Reference in New Issue
Block a user