아이템 드랍 및 인벤토리 기능 구현
This commit is contained in:
@@ -79,3 +79,8 @@ MonoBehaviour:
|
|||||||
SourcePrefabToOverride: {fileID: 0}
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
SourceHashToOverride: 0
|
SourceHashToOverride: 0
|
||||||
OverridingTargetPrefab: {fileID: 0}
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
- Override: 0
|
||||||
|
Prefab: {fileID: 1253970051563370359, guid: 1d7655b1088c3ea46b8f52f6c6760047, type: 3}
|
||||||
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
|
SourceHashToOverride: 0
|
||||||
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
|||||||
18
Assets/Item_Resource.asset
Normal file
18
Assets/Item_Resource.asset
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a6974a6b8e6365d469ae0566ed23abf5, type: 3}
|
||||||
|
m_Name: Item_Resource
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::ItemData
|
||||||
|
itemID: 0
|
||||||
|
itemName: Resource
|
||||||
|
icon: {fileID: -2861443707260385499, guid: 2d8756227812cb6418ddf659e94f7226, type: 3}
|
||||||
|
originalBlockPrefab: {fileID: 989066657509100432, guid: 17532917e1ada23469c573abf64905f0, type: 3}
|
||||||
8
Assets/Item_Resource.asset.meta
Normal file
8
Assets/Item_Resource.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 953ceca9a25978549a56f0a4ff5d6a2c
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
267
Assets/Prefabs/GenericDroppedItem.prefab
Normal file
267
Assets/Prefabs/GenericDroppedItem.prefab
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &1253970051563370359
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 6576339220651823204}
|
||||||
|
- component: {fileID: 563888218831231194}
|
||||||
|
- component: {fileID: 3836426729625921531}
|
||||||
|
- component: {fileID: 6291056385836363784}
|
||||||
|
- component: {fileID: 6380490795664845462}
|
||||||
|
- component: {fileID: 3712338024365698940}
|
||||||
|
m_Layer: 14
|
||||||
|
m_Name: GenericDroppedItem
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &6576339220651823204
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -1.66592, y: 2.86682, z: -4}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 8170592411553038934}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &563888218831231194
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
|
GlobalObjectIdHash: 720625276
|
||||||
|
InScenePlacedSourceGlobalObjectIdHash: 720625276
|
||||||
|
DeferredDespawnTick: 0
|
||||||
|
Ownership: 1
|
||||||
|
AlwaysReplicateAsRoot: 0
|
||||||
|
SynchronizeTransform: 1
|
||||||
|
ActiveSceneSynchronization: 0
|
||||||
|
SceneMigrationSynchronization: 0
|
||||||
|
SpawnWithObservers: 1
|
||||||
|
DontDestroyWithOwner: 0
|
||||||
|
AutoObjectParentSync: 1
|
||||||
|
SyncOwnerTransformWhenParented: 1
|
||||||
|
AllowOwnerToParent: 0
|
||||||
|
--- !u!135 &3836426729625921531
|
||||||
|
SphereCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 3
|
||||||
|
m_Radius: 0.5
|
||||||
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &6291056385836363784
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 0f19261df3e7c984f89c3427aff0522a, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::DroppedItem
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
myFilter: {fileID: 8145339523266927793}
|
||||||
|
myRenderer: {fileID: 1476831640209354726}
|
||||||
|
dropScale: 0.3
|
||||||
|
jumpForce: 2
|
||||||
|
spreadForce: 1
|
||||||
|
rotationSpeed: 100
|
||||||
|
--- !u!54 &6380490795664845462
|
||||||
|
Rigidbody:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
serializedVersion: 5
|
||||||
|
m_Mass: 10
|
||||||
|
m_LinearDamping: 0
|
||||||
|
m_AngularDamping: 0.5
|
||||||
|
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||||
|
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||||
|
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ImplicitCom: 1
|
||||||
|
m_ImplicitTensor: 1
|
||||||
|
m_UseGravity: 1
|
||||||
|
m_IsKinematic: 0
|
||||||
|
m_Interpolate: 1
|
||||||
|
m_Constraints: 0
|
||||||
|
m_CollisionDetection: 0
|
||||||
|
--- !u!114 &3712338024365698940
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1253970051563370359}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
NetworkTransformExpanded: 0
|
||||||
|
AutoOwnerAuthorityTickOffset: 1
|
||||||
|
PositionInterpolationType: 0
|
||||||
|
RotationInterpolationType: 0
|
||||||
|
ScaleInterpolationType: 0
|
||||||
|
PositionLerpSmoothing: 1
|
||||||
|
PositionMaxInterpolationTime: 0.1
|
||||||
|
RotationLerpSmoothing: 1
|
||||||
|
RotationMaxInterpolationTime: 0.1
|
||||||
|
ScaleLerpSmoothing: 1
|
||||||
|
ScaleMaxInterpolationTime: 0.1
|
||||||
|
AuthorityMode: 0
|
||||||
|
TickSyncChildren: 0
|
||||||
|
UseUnreliableDeltas: 0
|
||||||
|
SyncPositionX: 1
|
||||||
|
SyncPositionY: 1
|
||||||
|
SyncPositionZ: 1
|
||||||
|
SyncRotAngleX: 1
|
||||||
|
SyncRotAngleY: 1
|
||||||
|
SyncRotAngleZ: 1
|
||||||
|
SyncScaleX: 1
|
||||||
|
SyncScaleY: 1
|
||||||
|
SyncScaleZ: 1
|
||||||
|
PositionThreshold: 0.001
|
||||||
|
RotAngleThreshold: 0.01
|
||||||
|
ScaleThreshold: 0.01
|
||||||
|
UseQuaternionSynchronization: 0
|
||||||
|
UseQuaternionCompression: 0
|
||||||
|
UseHalfFloatPrecision: 0
|
||||||
|
InLocalSpace: 0
|
||||||
|
SwitchTransformSpaceWhenParented: 0
|
||||||
|
Interpolate: 1
|
||||||
|
SlerpPosition: 0
|
||||||
|
--- !u!1 &5445318480987147192
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 8170592411553038934}
|
||||||
|
- component: {fileID: 8145339523266927793}
|
||||||
|
- component: {fileID: 1476831640209354726}
|
||||||
|
m_Layer: 14
|
||||||
|
m_Name: Visual
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &8170592411553038934
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5445318480987147192}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 6576339220651823204}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!33 &8145339523266927793
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5445318480987147192}
|
||||||
|
m_Mesh: {fileID: 0}
|
||||||
|
--- !u!23 &1476831640209354726
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5445318480987147192}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 1
|
||||||
|
m_ReceiveShadows: 1
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_StaticShadowCaster: 0
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 2
|
||||||
|
m_RayTraceProcedural: 0
|
||||||
|
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||||
|
m_RayTracingAccelStructBuildFlags: 1
|
||||||
|
m_SmallMeshCulling: 1
|
||||||
|
m_ForceMeshLod: -1
|
||||||
|
m_MeshLodSelectionBias: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 0}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 3
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_GlobalIlluminationMeshLod: 0
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_MaskInteraction: 0
|
||||||
|
m_AdditionalVertexStreams: {fileID: 0}
|
||||||
7
Assets/Prefabs/GenericDroppedItem.prefab.meta
Normal file
7
Assets/Prefabs/GenericDroppedItem.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1d7655b1088c3ea46b8f52f6c6760047
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -219,6 +219,9 @@ PrefabInstance:
|
|||||||
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 4197956822729057335}
|
addedObject: {fileID: 4197956822729057335}
|
||||||
|
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
||||||
|
insertIndex: -1
|
||||||
|
addedObject: {fileID: 5271692149337681293}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
||||||
--- !u!4 &2152733048352974824 stripped
|
--- !u!4 &2152733048352974824 stripped
|
||||||
Transform:
|
Transform:
|
||||||
@@ -335,7 +338,7 @@ MonoBehaviour:
|
|||||||
interactRange: 3
|
interactRange: 3
|
||||||
interactableLayer:
|
interactableLayer:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 9216
|
m_Bits: 25600
|
||||||
constructionLayer:
|
constructionLayer:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 256
|
m_Bits: 256
|
||||||
@@ -435,6 +438,19 @@ MonoBehaviour:
|
|||||||
Synchronize: 1
|
Synchronize: 1
|
||||||
ParameterType: 9
|
ParameterType: 9
|
||||||
AnimatorParametersExpanded: 0
|
AnimatorParametersExpanded: 0
|
||||||
|
--- !u!114 &5271692149337681293
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2473992278589500093}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: a1edd64a97d0b4f4aa71f0a23f32564f, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::PlayerInventory
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
--- !u!4 &5371267496600762819 stripped
|
--- !u!4 &5371267496600762819 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: 7214371169738337839, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
m_CorrespondingSourceObject: {fileID: 7214371169738337839, guid: ffaf1ddb2ff58d2448ccfdd357387f63, type: 3}
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
GlobalObjectIdHash: 1191681468
|
GlobalObjectIdHash: 822699884
|
||||||
InScenePlacedSourceGlobalObjectIdHash: 3862515551
|
InScenePlacedSourceGlobalObjectIdHash: 1191681468
|
||||||
DeferredDespawnTick: 0
|
DeferredDespawnTick: 0
|
||||||
Ownership: 1
|
Ownership: 1
|
||||||
AlwaysReplicateAsRoot: 0
|
AlwaysReplicateAsRoot: 0
|
||||||
@@ -155,6 +155,8 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier: Assembly-CSharp::MineableBlock
|
m_EditorClassIdentifier: Assembly-CSharp::MineableBlock
|
||||||
ShowTopMostFoldoutHeaderGroup: 1
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
maxHp: 100
|
maxHp: 100
|
||||||
|
dropItemData: {fileID: 11400000, guid: 953ceca9a25978549a56f0a4ff5d6a2c, type: 2}
|
||||||
|
genericDropPrefab: {fileID: 1253970051563370359, guid: 1d7655b1088c3ea46b8f52f6c6760047, type: 3}
|
||||||
shakeDuration: 0.1
|
shakeDuration: 0.1
|
||||||
shakeMagnitude: 0.1
|
shakeMagnitude: 0.1
|
||||||
--- !u!114 &-8077891763218709486
|
--- !u!114 &-8077891763218709486
|
||||||
|
|||||||
@@ -586,7 +586,7 @@ MeshCollider:
|
|||||||
m_ProvidesContacts: 0
|
m_ProvidesContacts: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
serializedVersion: 5
|
serializedVersion: 5
|
||||||
m_Convex: 0
|
m_Convex: 1
|
||||||
m_CookingOptions: 30
|
m_CookingOptions: 30
|
||||||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
|
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
--- !u!23 &290482134
|
--- !u!23 &290482134
|
||||||
@@ -1312,6 +1312,7 @@ Transform:
|
|||||||
- {fileID: 1866217603}
|
- {fileID: 1866217603}
|
||||||
- {fileID: 412220987}
|
- {fileID: 412220987}
|
||||||
- {fileID: 1842105546}
|
- {fileID: 1842105546}
|
||||||
|
- {fileID: 931645607}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &707831773
|
--- !u!1 &707831773
|
||||||
@@ -1652,6 +1653,52 @@ PrefabInstance:
|
|||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 445606027}
|
addedObject: {fileID: 445606027}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 443aa97110814434cb36b26656f1884c, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 443aa97110814434cb36b26656f1884c, type: 3}
|
||||||
|
--- !u!1 &931645606
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 931645607}
|
||||||
|
- component: {fileID: 931645608}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: ItemDatabase
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &931645607
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 931645606}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 670724422}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &931645608
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 931645606}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: e1161d1386968b54483e219677fcc729, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::ItemDatabase
|
||||||
|
allItems:
|
||||||
|
- {fileID: 11400000, guid: 953ceca9a25978549a56f0a4ff5d6a2c, type: 2}
|
||||||
--- !u!1 &1044242050
|
--- !u!1 &1044242050
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -2448,10 +2495,6 @@ PrefabInstance:
|
|||||||
propertyPath: GlobalObjectIdHash
|
propertyPath: GlobalObjectIdHash
|
||||||
value: 822699884
|
value: 822699884
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7528764990365051674, guid: 17532917e1ada23469c573abf64905f0, type: 3}
|
|
||||||
propertyPath: InScenePlacedSourceGlobalObjectIdHash
|
|
||||||
value: 1191681468
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
@@ -2833,7 +2876,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!4 &1842105546
|
--- !u!4 &1842105546
|
||||||
Transform:
|
Transform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
109
Assets/Scripts/GameBase/DroppedItem.cs
Normal file
109
Assets/Scripts/GameBase/DroppedItem.cs
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class DroppedItem : NetworkBehaviour, IInteractable
|
||||||
|
{
|
||||||
|
[SerializeField] private MeshFilter myFilter; // 자식의 MeshFilter 연결
|
||||||
|
[SerializeField] private MeshRenderer myRenderer; // 자식의 MeshRenderer 연결
|
||||||
|
[SerializeField] private float dropScale = 0.3f;
|
||||||
|
|
||||||
|
private Rigidbody _rb;
|
||||||
|
[SerializeField] private float jumpForce = 5f; // 위로 솟구치는 힘
|
||||||
|
[SerializeField] private float spreadForce = 2f; // 옆으로 퍼지는 힘
|
||||||
|
[SerializeField] private float rotationSpeed = 100f; // 빙글빙글 도는 속도
|
||||||
|
|
||||||
|
private NetworkVariable<int> _itemDataID = new NetworkVariable<int>();
|
||||||
|
private bool _isProcessed = false; // 중복 획득 방지 (서버용)
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
_rb = GetComponent<Rigidbody>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnNetworkSpawn()
|
||||||
|
{
|
||||||
|
UpdateVisuals();
|
||||||
|
_itemDataID.OnValueChanged += (oldVal, newVal) => UpdateVisuals();
|
||||||
|
|
||||||
|
if (IsServer)
|
||||||
|
{
|
||||||
|
ApplyInitialPop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyInitialPop()
|
||||||
|
{
|
||||||
|
// 위쪽 방향 + 무작위 주변 방향으로 힘을 줍니다.
|
||||||
|
Vector3 force = Vector3.up * jumpForce + Random.insideUnitSphere * spreadForce;
|
||||||
|
_rb.AddForce(force, ForceMode.Impulse);
|
||||||
|
|
||||||
|
// 무작위 회전력(Torque)을 주어 던져지는 느낌을 냅니다.
|
||||||
|
_rb.AddTorque(Random.insideUnitSphere * spreadForce, ForceMode.Impulse);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize(int id)
|
||||||
|
{
|
||||||
|
if (IsServer) _itemDataID.Value = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
// 비주얼만 빙글빙글 돌게 하고 싶다면 (선택 사항)
|
||||||
|
transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateVisuals()
|
||||||
|
{
|
||||||
|
ItemData data = ItemDatabase.Instance.GetItemByID(_itemDataID.Value);
|
||||||
|
|
||||||
|
if (data != null && data.originalBlockPrefab != null)
|
||||||
|
{
|
||||||
|
// 원본 프리팹(큰 블록)에서 비주얼 컴포넌트를 찾습니다.
|
||||||
|
MeshFilter sourceFilter = data.originalBlockPrefab.GetComponentInChildren<MeshFilter>();
|
||||||
|
MeshRenderer sourceRenderer = data.originalBlockPrefab.GetComponentInChildren<MeshRenderer>();
|
||||||
|
|
||||||
|
if (sourceFilter != null && myFilter != null)
|
||||||
|
myFilter.sharedMesh = sourceFilter.sharedMesh;
|
||||||
|
|
||||||
|
if (sourceRenderer != null && myRenderer != null)
|
||||||
|
myRenderer.sharedMaterial = sourceRenderer.sharedMaterial;
|
||||||
|
|
||||||
|
// 크기를 작게 줄여서 아이템처럼 보이게 합니다.
|
||||||
|
transform.localScale = Vector3.one * dropScale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 플레이어의 OnInteractTap에서 호출될 함수입니다.
|
||||||
|
public void Interact(GameObject interactor)
|
||||||
|
{
|
||||||
|
Debug.Log("<color=yellow>[DroppedItem] 상호작용 시도됨</color>");
|
||||||
|
// 1. 상호작용한 플레이어가 본인(Owner)인지 확인합니다.
|
||||||
|
if (interactor.TryGetComponent<NetworkObject>(out var playerNetObj) && playerNetObj.IsOwner)
|
||||||
|
{
|
||||||
|
// 2. 서버에 이 아이템을 줍겠다고 요청합니다.
|
||||||
|
RequestPickupServerRpc(playerNetObj.NetworkObjectId);
|
||||||
|
Debug.Log("<color=yellow>[DroppedItem] 아이템 획득 요청 서버 RPC 호출됨</color>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
|
||||||
|
private void RequestPickupServerRpc(ulong playerNetId)
|
||||||
|
{
|
||||||
|
if (_isProcessed) return;
|
||||||
|
|
||||||
|
// 서버에서 아이템 데이터를 가져오고 플레이어 인벤토리에 추가합니다.
|
||||||
|
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(playerNetId, out var playerObj))
|
||||||
|
{
|
||||||
|
if (playerObj.TryGetComponent<PlayerInventory>(out var inventory))
|
||||||
|
{
|
||||||
|
_isProcessed = true;
|
||||||
|
ItemData data = ItemDatabase.Instance.GetItemByID(_itemDataID.Value);
|
||||||
|
|
||||||
|
inventory.AddItem(data); // 인벤토리에 추가
|
||||||
|
|
||||||
|
// 3. 획득 성공 시 네트워크 상에서 제거합니다.
|
||||||
|
GetComponent<NetworkObject>().Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/GameBase/DroppedItem.cs.meta
Normal file
2
Assets/Scripts/GameBase/DroppedItem.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0f19261df3e7c984f89c3427aff0522a
|
||||||
12
Assets/Scripts/GameBase/ItemData.cs
Normal file
12
Assets/Scripts/GameBase/ItemData.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Item")]
|
||||||
|
public class ItemData : ScriptableObject
|
||||||
|
{
|
||||||
|
public int itemID;
|
||||||
|
public string itemName;
|
||||||
|
public Sprite icon;
|
||||||
|
|
||||||
|
[Header("Visual Source")]
|
||||||
|
public GameObject originalBlockPrefab; // 이제 이것만 있으면 됩니다!
|
||||||
|
}
|
||||||
2
Assets/Scripts/GameBase/ItemData.cs.meta
Normal file
2
Assets/Scripts/GameBase/ItemData.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a6974a6b8e6365d469ae0566ed23abf5
|
||||||
12
Assets/Scripts/GameBase/ItemDatabase.cs
Normal file
12
Assets/Scripts/GameBase/ItemDatabase.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class ItemDatabase : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static ItemDatabase Instance;
|
||||||
|
public List<ItemData> allItems;
|
||||||
|
|
||||||
|
void Awake() => Instance = this;
|
||||||
|
|
||||||
|
public ItemData GetItemByID(int id) => allItems.Find(x => x.itemID == id);
|
||||||
|
}
|
||||||
2
Assets/Scripts/GameBase/ItemDatabase.cs.meta
Normal file
2
Assets/Scripts/GameBase/ItemDatabase.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e1161d1386968b54483e219677fcc729
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
using NUnit.Framework.Interfaces;
|
||||||
|
using System.Collections;
|
||||||
using Unity.Netcode;
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections;
|
|
||||||
|
|
||||||
public class MineableBlock : NetworkBehaviour
|
public class MineableBlock : NetworkBehaviour
|
||||||
{
|
{
|
||||||
@@ -9,6 +10,8 @@ public class MineableBlock : NetworkBehaviour
|
|||||||
// [동기화] 모든 플레이어가 동일한 블록 체력을 보게 함
|
// [동기화] 모든 플레이어가 동일한 블록 체력을 보게 함
|
||||||
private NetworkVariable<int> _currentHp = new NetworkVariable<int>();
|
private NetworkVariable<int> _currentHp = new NetworkVariable<int>();
|
||||||
|
|
||||||
|
[SerializeField] private ItemData dropItemData;
|
||||||
|
[SerializeField] private GameObject genericDropPrefab; // 여기에 위에서 만든 'GenericDroppedItem' 프리팹을 넣으세요.
|
||||||
|
|
||||||
[Header("Visuals")]
|
[Header("Visuals")]
|
||||||
private Outline _outline;
|
private Outline _outline;
|
||||||
@@ -60,6 +63,7 @@ public class MineableBlock : NetworkBehaviour
|
|||||||
|
|
||||||
private void DestroyBlock()
|
private void DestroyBlock()
|
||||||
{
|
{
|
||||||
|
DropItem();
|
||||||
// 2. 서버에서 네트워크 오브젝트 제거 (모든 클라이언트에서 사라짐)
|
// 2. 서버에서 네트워크 오브젝트 제거 (모든 클라이언트에서 사라짐)
|
||||||
GetComponent<NetworkObject>().Despawn();
|
GetComponent<NetworkObject>().Despawn();
|
||||||
}
|
}
|
||||||
@@ -84,8 +88,6 @@ public class MineableBlock : NetworkBehaviour
|
|||||||
private IEnumerator ShakeRoutine()
|
private IEnumerator ShakeRoutine()
|
||||||
{
|
{
|
||||||
float elapsed = 0.0f;
|
float elapsed = 0.0f;
|
||||||
Debug.Log("흔들림 코루틴 시작"); // 시작 확인
|
|
||||||
|
|
||||||
while (elapsed < shakeDuration)
|
while (elapsed < shakeDuration)
|
||||||
{
|
{
|
||||||
Vector3 randomOffset = Random.insideUnitSphere * shakeMagnitude;
|
Vector3 randomOffset = Random.insideUnitSphere * shakeMagnitude;
|
||||||
@@ -99,6 +101,22 @@ public class MineableBlock : NetworkBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
transform.localPosition = _originalPos;
|
transform.localPosition = _originalPos;
|
||||||
Debug.Log("흔들림 코루틴 종료 및 위치 복구");
|
}
|
||||||
|
|
||||||
|
private void DropItem()
|
||||||
|
{
|
||||||
|
if (!IsServer || dropItemData == null || genericDropPrefab == null) return;
|
||||||
|
|
||||||
|
// 원본 블록이 아니라 '범용 컨테이너'를 소환합니다.
|
||||||
|
GameObject dropObj = Instantiate(genericDropPrefab, transform.position + Vector3.up * 0.5f, Quaternion.identity);
|
||||||
|
|
||||||
|
NetworkObject netObj = dropObj.GetComponent<NetworkObject>();
|
||||||
|
netObj.Spawn();
|
||||||
|
|
||||||
|
// 소환된 컨테이너에 "너는 어떤 아이템의 모양을 따라해야 해"라고 알려줍니다.
|
||||||
|
if (dropObj.TryGetComponent<DroppedItem>(out var droppedItem))
|
||||||
|
{
|
||||||
|
droppedItem.Initialize(dropItemData.itemID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
24
Assets/Scripts/Player/ItemPickup.cs
Normal file
24
Assets/Scripts/Player/ItemPickup.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class ItemPickup : NetworkBehaviour
|
||||||
|
{
|
||||||
|
public ItemData itemData;
|
||||||
|
|
||||||
|
public void SetItem(ItemData data) => itemData = data;
|
||||||
|
|
||||||
|
private void OnTriggerEnter(Collider medical)
|
||||||
|
{
|
||||||
|
if (!IsServer) return;
|
||||||
|
|
||||||
|
// 플레이어인지 확인
|
||||||
|
if (medical.CompareTag("Player"))
|
||||||
|
{
|
||||||
|
if (medical.TryGetComponent<PlayerInventory>(out var inventory))
|
||||||
|
{
|
||||||
|
inventory.AddItem(itemData);
|
||||||
|
GetComponent<NetworkObject>().Despawn(); // 먹었으므로 제거
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/Player/ItemPickup.cs.meta
Normal file
2
Assets/Scripts/Player/ItemPickup.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1e494b2626c9e354eba277618a850ee8
|
||||||
23
Assets/Scripts/Player/PlayerInventory.cs
Normal file
23
Assets/Scripts/Player/PlayerInventory.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class PlayerInventory : NetworkBehaviour
|
||||||
|
{
|
||||||
|
// 아이템 이름과 개수를 저장
|
||||||
|
private Dictionary<string, int> items = new Dictionary<string, int>();
|
||||||
|
|
||||||
|
public void AddItem(ItemData data)
|
||||||
|
{
|
||||||
|
if (!IsServer) return;
|
||||||
|
|
||||||
|
if (items.ContainsKey(data.itemName))
|
||||||
|
items[data.itemName]++;
|
||||||
|
else
|
||||||
|
items.Add(data.itemName, 1);
|
||||||
|
|
||||||
|
Debug.Log($"[Inventory] {data.itemName} 획득! (현재: {items[data.itemName]}개)");
|
||||||
|
|
||||||
|
// 여기서 클라이언트 UI를 갱신하는 ClientRpc를 호출할 수 있습니다.
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/Player/PlayerInventory.cs.meta
Normal file
2
Assets/Scripts/Player/PlayerInventory.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a1edd64a97d0b4f4aa71f0a23f32564f
|
||||||
@@ -17,7 +17,7 @@ PhysicsManager:
|
|||||||
m_EnableAdaptiveForce: 0
|
m_EnableAdaptiveForce: 0
|
||||||
m_ClothInterCollisionDistance: 0.1
|
m_ClothInterCollisionDistance: 0.1
|
||||||
m_ClothInterCollisionStiffness: 0.2
|
m_ClothInterCollisionStiffness: 0.2
|
||||||
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffffffffbfffffffffffffffffffffffffffffffffffffffbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
m_SimulationMode: 0
|
m_SimulationMode: 0
|
||||||
m_AutoSyncTransforms: 0
|
m_AutoSyncTransforms: 0
|
||||||
m_ReuseCollisionCallbacks: 1
|
m_ReuseCollisionCallbacks: 1
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ TagManager:
|
|||||||
- Tunnel
|
- Tunnel
|
||||||
- Mineable
|
- Mineable
|
||||||
- TunnelNode
|
- TunnelNode
|
||||||
-
|
- DroppedItem
|
||||||
-
|
-
|
||||||
-
|
-
|
||||||
-
|
-
|
||||||
|
|||||||
Reference in New Issue
Block a user