건설 퀵슬롯 생성

This commit is contained in:
2026-01-28 00:37:56 +09:00
parent 8799c4f8f4
commit 68a2e4e340
18 changed files with 2507 additions and 167 deletions

View File

@@ -54,6 +54,7 @@
<Compile Include="Assets\Scripts\ITeamMember.cs" /> <Compile Include="Assets\Scripts\ITeamMember.cs" />
<Compile Include="Assets\Scripts\EnemyUnit.cs" /> <Compile Include="Assets\Scripts\EnemyUnit.cs" />
<Compile Include="Assets\Scripts\PlayerActionSystem.cs" /> <Compile Include="Assets\Scripts\PlayerActionSystem.cs" />
<Compile Include="Assets\Scripts\BuildingQuickslotUI.cs" />
<Compile Include="Assets\Scripts\TeamType.cs" /> <Compile Include="Assets\Scripts\TeamType.cs" />
<Compile Include="Assets\Scripts\CoreResourceManager.cs" /> <Compile Include="Assets\Scripts\CoreResourceManager.cs" />
<Compile Include="Assets\Scripts\Building.cs" /> <Compile Include="Assets\Scripts\Building.cs" />
@@ -70,6 +71,7 @@
<Compile Include="Assets\Scripts\BuildingData.cs" /> <Compile Include="Assets\Scripts\BuildingData.cs" />
<Compile Include="Assets\Scripts\Resource.cs" /> <Compile Include="Assets\Scripts\Resource.cs" />
<Compile Include="Assets\Scripts\AutoTargetSystem.cs" /> <Compile Include="Assets\Scripts\AutoTargetSystem.cs" />
<Compile Include="Assets\Scripts\BuildingSlotButton.cs" />
<Compile Include="Assets\FlatKit\[Render Pipeline] URP\Water\Scripts\Buoyancy.cs" /> <Compile Include="Assets\FlatKit\[Render Pipeline] URP\Water\Scripts\Buoyancy.cs" />
<Compile Include="Assets\Scripts\BuildingFoundation.cs" /> <Compile Include="Assets\Scripts\BuildingFoundation.cs" />
<Compile Include="Assets\Scripts\AttackAction.cs" /> <Compile Include="Assets\Scripts\AttackAction.cs" />

View File

@@ -229,7 +229,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Mining m_Name: Mining
m_Speed: 1 m_Speed: 2
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
- {fileID: -7535493336948512429} - {fileID: -7535493336948512429}

View File

@@ -14,6 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingData m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingData
buildingName: Wall buildingName: Wall
prefab: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3} prefab: {fileID: 2938167817760513538, guid: 04e95700704d92248b63ce5674bd9638, type: 3}
icon: {fileID: 0}
width: 16 width: 16
length: 4 length: 4
height: 4 height: 4
@@ -21,7 +22,13 @@ MonoBehaviour:
allowRotation: 1 allowRotation: 1
requiredWorkAmount: 100 requiredWorkAmount: 100
workPerInteraction: 10 workPerInteraction: 10
interactionCooldown: 1 interactionCooldown: 0
constructionAnimationTrigger: Mining
constructionEquipment:
socketName: handslot.r
equipmentPrefab: {fileID: 919132149155446097, guid: 804d477fc7f114c498aa6f95452be893, type: 3}
attachOnStart: 1
detachOnEnd: 1
maxHealth: 100 maxHealth: 100
isIndestructible: 0 isIndestructible: 0
autoRegenerate: 0 autoRegenerate: 0

BIN
Assets/External/button_default.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

156
Assets/External/button_default.png.meta vendored Normal file
View File

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: e713d4394d6c5914eb4b8aa2aafe5429
TextureImporter:
internalIDToNameTable:
- first:
213: -2771146889623541776
second: button_default_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: button_default_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 256
height: 256
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 0f76f870698ea89d0800000000000000
internalID: -2771146889623541776
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
button_default_0: -2771146889623541776
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -199,6 +199,78 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
""processors"": """", ""processors"": """",
""interactions"": """", ""interactions"": """",
""initialStateCheck"": false ""initialStateCheck"": false
},
{
""name"": ""QuickSlot1"",
""type"": ""Button"",
""id"": ""a2770ad5-abea-4586-89d3-abe1f089a700"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot2"",
""type"": ""Button"",
""id"": ""3cb693ce-bffe-45a4-8da4-a559ae530b14"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot3"",
""type"": ""Button"",
""id"": ""2567af20-ee99-4dcd-ae99-054518802343"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot4"",
""type"": ""Button"",
""id"": ""6755ed3b-f228-4721-9190-49951c828334"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot5"",
""type"": ""Button"",
""id"": ""29e349bf-7b0a-4697-b3d4-de9b2fcb40e7"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot6"",
""type"": ""Button"",
""id"": ""ab1ff2fb-1ae4-4554-8e59-51d5df769d09"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot7"",
""type"": ""Button"",
""id"": ""76ca934f-b1b5-4713-bb89-ead70f878105"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""QuickSlot8"",
""type"": ""Button"",
""id"": ""75c85d75-4924-45b9-b136-02dff28bb4fd"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
} }
], ],
""bindings"": [ ""bindings"": [
@@ -619,6 +691,94 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
""action"": ""Build"", ""action"": ""Build"",
""isComposite"": false, ""isComposite"": false,
""isPartOfComposite"": false ""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""de0e54c7-cb32-4c9e-867b-291bd28c0683"",
""path"": ""<Keyboard>/1"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot1"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""a288feb3-0ce0-49f9-a1a4-7353aeeab7fb"",
""path"": ""<Keyboard>/2"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot2"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""90bf2585-bb5e-4faf-9136-fd1220ade8c9"",
""path"": ""<Keyboard>/3"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot3"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""82326dad-afdc-4287-a4e9-4827820192bc"",
""path"": ""<Keyboard>/4"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot4"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""591efa08-5304-4c8e-b41e-dea9549877d5"",
""path"": ""<Keyboard>/5"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot5"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""3d5537cc-1e13-4126-bdbe-2b29a87bd554"",
""path"": ""<Keyboard>/6"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot6"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""5b7e3c99-0c87-45d9-be22-070abf3eaa9e"",
""path"": ""<Keyboard>/7"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot7"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""596e0582-4f59-497e-a75b-0fbd4515b931"",
""path"": ""<Keyboard>/8"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""QuickSlot8"",
""isComposite"": false,
""isPartOfComposite"": false
} }
] ]
}, },
@@ -1216,6 +1376,14 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
m_Player_ToggleBuildMode = m_Player.FindAction("Toggle Build Mode", throwIfNotFound: true); m_Player_ToggleBuildMode = m_Player.FindAction("Toggle Build Mode", throwIfNotFound: true);
m_Player_Rotate = m_Player.FindAction("Rotate", throwIfNotFound: true); m_Player_Rotate = m_Player.FindAction("Rotate", throwIfNotFound: true);
m_Player_Build = m_Player.FindAction("Build", throwIfNotFound: true); m_Player_Build = m_Player.FindAction("Build", throwIfNotFound: true);
m_Player_QuickSlot1 = m_Player.FindAction("QuickSlot1", throwIfNotFound: true);
m_Player_QuickSlot2 = m_Player.FindAction("QuickSlot2", throwIfNotFound: true);
m_Player_QuickSlot3 = m_Player.FindAction("QuickSlot3", throwIfNotFound: true);
m_Player_QuickSlot4 = m_Player.FindAction("QuickSlot4", throwIfNotFound: true);
m_Player_QuickSlot5 = m_Player.FindAction("QuickSlot5", throwIfNotFound: true);
m_Player_QuickSlot6 = m_Player.FindAction("QuickSlot6", throwIfNotFound: true);
m_Player_QuickSlot7 = m_Player.FindAction("QuickSlot7", throwIfNotFound: true);
m_Player_QuickSlot8 = m_Player.FindAction("QuickSlot8", throwIfNotFound: true);
// UI // UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true); m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true); m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@@ -1321,6 +1489,14 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
private readonly InputAction m_Player_ToggleBuildMode; private readonly InputAction m_Player_ToggleBuildMode;
private readonly InputAction m_Player_Rotate; private readonly InputAction m_Player_Rotate;
private readonly InputAction m_Player_Build; private readonly InputAction m_Player_Build;
private readonly InputAction m_Player_QuickSlot1;
private readonly InputAction m_Player_QuickSlot2;
private readonly InputAction m_Player_QuickSlot3;
private readonly InputAction m_Player_QuickSlot4;
private readonly InputAction m_Player_QuickSlot5;
private readonly InputAction m_Player_QuickSlot6;
private readonly InputAction m_Player_QuickSlot7;
private readonly InputAction m_Player_QuickSlot8;
/// <summary> /// <summary>
/// Provides access to input actions defined in input action map "Player". /// Provides access to input actions defined in input action map "Player".
/// </summary> /// </summary>
@@ -1381,6 +1557,38 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
/// </summary> /// </summary>
public InputAction @Build => m_Wrapper.m_Player_Build; public InputAction @Build => m_Wrapper.m_Player_Build;
/// <summary> /// <summary>
/// Provides access to the underlying input action "Player/QuickSlot1".
/// </summary>
public InputAction @QuickSlot1 => m_Wrapper.m_Player_QuickSlot1;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot2".
/// </summary>
public InputAction @QuickSlot2 => m_Wrapper.m_Player_QuickSlot2;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot3".
/// </summary>
public InputAction @QuickSlot3 => m_Wrapper.m_Player_QuickSlot3;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot4".
/// </summary>
public InputAction @QuickSlot4 => m_Wrapper.m_Player_QuickSlot4;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot5".
/// </summary>
public InputAction @QuickSlot5 => m_Wrapper.m_Player_QuickSlot5;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot6".
/// </summary>
public InputAction @QuickSlot6 => m_Wrapper.m_Player_QuickSlot6;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot7".
/// </summary>
public InputAction @QuickSlot7 => m_Wrapper.m_Player_QuickSlot7;
/// <summary>
/// Provides access to the underlying input action "Player/QuickSlot8".
/// </summary>
public InputAction @QuickSlot8 => m_Wrapper.m_Player_QuickSlot8;
/// <summary>
/// Provides access to the underlying input action map instance. /// Provides access to the underlying input action map instance.
/// </summary> /// </summary>
public InputActionMap Get() { return m_Wrapper.m_Player; } public InputActionMap Get() { return m_Wrapper.m_Player; }
@@ -1442,6 +1650,30 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
@Build.started += instance.OnBuild; @Build.started += instance.OnBuild;
@Build.performed += instance.OnBuild; @Build.performed += instance.OnBuild;
@Build.canceled += instance.OnBuild; @Build.canceled += instance.OnBuild;
@QuickSlot1.started += instance.OnQuickSlot1;
@QuickSlot1.performed += instance.OnQuickSlot1;
@QuickSlot1.canceled += instance.OnQuickSlot1;
@QuickSlot2.started += instance.OnQuickSlot2;
@QuickSlot2.performed += instance.OnQuickSlot2;
@QuickSlot2.canceled += instance.OnQuickSlot2;
@QuickSlot3.started += instance.OnQuickSlot3;
@QuickSlot3.performed += instance.OnQuickSlot3;
@QuickSlot3.canceled += instance.OnQuickSlot3;
@QuickSlot4.started += instance.OnQuickSlot4;
@QuickSlot4.performed += instance.OnQuickSlot4;
@QuickSlot4.canceled += instance.OnQuickSlot4;
@QuickSlot5.started += instance.OnQuickSlot5;
@QuickSlot5.performed += instance.OnQuickSlot5;
@QuickSlot5.canceled += instance.OnQuickSlot5;
@QuickSlot6.started += instance.OnQuickSlot6;
@QuickSlot6.performed += instance.OnQuickSlot6;
@QuickSlot6.canceled += instance.OnQuickSlot6;
@QuickSlot7.started += instance.OnQuickSlot7;
@QuickSlot7.performed += instance.OnQuickSlot7;
@QuickSlot7.canceled += instance.OnQuickSlot7;
@QuickSlot8.started += instance.OnQuickSlot8;
@QuickSlot8.performed += instance.OnQuickSlot8;
@QuickSlot8.canceled += instance.OnQuickSlot8;
} }
/// <summary> /// <summary>
@@ -1489,6 +1721,30 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
@Build.started -= instance.OnBuild; @Build.started -= instance.OnBuild;
@Build.performed -= instance.OnBuild; @Build.performed -= instance.OnBuild;
@Build.canceled -= instance.OnBuild; @Build.canceled -= instance.OnBuild;
@QuickSlot1.started -= instance.OnQuickSlot1;
@QuickSlot1.performed -= instance.OnQuickSlot1;
@QuickSlot1.canceled -= instance.OnQuickSlot1;
@QuickSlot2.started -= instance.OnQuickSlot2;
@QuickSlot2.performed -= instance.OnQuickSlot2;
@QuickSlot2.canceled -= instance.OnQuickSlot2;
@QuickSlot3.started -= instance.OnQuickSlot3;
@QuickSlot3.performed -= instance.OnQuickSlot3;
@QuickSlot3.canceled -= instance.OnQuickSlot3;
@QuickSlot4.started -= instance.OnQuickSlot4;
@QuickSlot4.performed -= instance.OnQuickSlot4;
@QuickSlot4.canceled -= instance.OnQuickSlot4;
@QuickSlot5.started -= instance.OnQuickSlot5;
@QuickSlot5.performed -= instance.OnQuickSlot5;
@QuickSlot5.canceled -= instance.OnQuickSlot5;
@QuickSlot6.started -= instance.OnQuickSlot6;
@QuickSlot6.performed -= instance.OnQuickSlot6;
@QuickSlot6.canceled -= instance.OnQuickSlot6;
@QuickSlot7.started -= instance.OnQuickSlot7;
@QuickSlot7.performed -= instance.OnQuickSlot7;
@QuickSlot7.canceled -= instance.OnQuickSlot7;
@QuickSlot8.started -= instance.OnQuickSlot8;
@QuickSlot8.performed -= instance.OnQuickSlot8;
@QuickSlot8.canceled -= instance.OnQuickSlot8;
} }
/// <summary> /// <summary>
@@ -1873,6 +2129,62 @@ public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" /> /// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" /> /// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnBuild(InputAction.CallbackContext context); void OnBuild(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot1" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot1(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot2" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot2(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot3" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot3(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot4" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot4(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot5" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot5(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot6" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot6(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot7" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot7(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "QuickSlot8" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnQuickSlot8(InputAction.CallbackContext context);
} }
/// <summary> /// <summary>
/// Interface to implement callback methods for all input action callbacks associated with input actions defined by "UI" which allows adding and removing callbacks. /// Interface to implement callback methods for all input action callbacks associated with input actions defined by "UI" which allows adding and removing callbacks.

View File

@@ -113,6 +113,78 @@
"processors": "", "processors": "",
"interactions": "", "interactions": "",
"initialStateCheck": false "initialStateCheck": false
},
{
"name": "QuickSlot1",
"type": "Button",
"id": "a2770ad5-abea-4586-89d3-abe1f089a700",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot2",
"type": "Button",
"id": "3cb693ce-bffe-45a4-8da4-a559ae530b14",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot3",
"type": "Button",
"id": "2567af20-ee99-4dcd-ae99-054518802343",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot4",
"type": "Button",
"id": "6755ed3b-f228-4721-9190-49951c828334",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot5",
"type": "Button",
"id": "29e349bf-7b0a-4697-b3d4-de9b2fcb40e7",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot6",
"type": "Button",
"id": "ab1ff2fb-1ae4-4554-8e59-51d5df769d09",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot7",
"type": "Button",
"id": "76ca934f-b1b5-4713-bb89-ead70f878105",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "QuickSlot8",
"type": "Button",
"id": "75c85d75-4924-45b9-b136-02dff28bb4fd",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
} }
], ],
"bindings": [ "bindings": [
@@ -533,6 +605,94 @@
"action": "Build", "action": "Build",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
},
{
"name": "",
"id": "de0e54c7-cb32-4c9e-867b-291bd28c0683",
"path": "<Keyboard>/1",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot1",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "a288feb3-0ce0-49f9-a1a4-7353aeeab7fb",
"path": "<Keyboard>/2",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot2",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "90bf2585-bb5e-4faf-9136-fd1220ade8c9",
"path": "<Keyboard>/3",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot3",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "82326dad-afdc-4287-a4e9-4827820192bc",
"path": "<Keyboard>/4",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot4",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "591efa08-5304-4c8e-b41e-dea9549877d5",
"path": "<Keyboard>/5",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot5",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "3d5537cc-1e13-4126-bdbe-2b29a87bd554",
"path": "<Keyboard>/6",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot6",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "5b7e3c99-0c87-45d9-be22-070abf3eaa9e",
"path": "<Keyboard>/7",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot7",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "596e0582-4f59-497e-a75b-0fbd4515b931",
"path": "<Keyboard>/8",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "QuickSlot8",
"isComposite": false,
"isPartOfComposite": false
} }
] ]
}, },

View File

@@ -0,0 +1,530 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &839359848106654382
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8002473853090050447}
- component: {fileID: 3629819156144026533}
- component: {fileID: 7255687967647854611}
m_Layer: 5
m_Name: HotkeyText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8002473853090050447
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 839359848106654382}
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: 6557039598812214310}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 5, y: -5}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3629819156144026533
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 839359848106654382}
m_CullTransparentMesh: 1
--- !u!114 &7255687967647854611
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 839359848106654382}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: 1
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 52310d2f5a2eaaf49bdaf92c08c5eb78, type: 2}
m_sharedMaterial: {fileID: 3669596862895025436, guid: 52310d2f5a2eaaf49bdaf92c08c5eb78, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4278255615
m_fontColor: {r: 1, g: 1, b: 0, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 14
m_fontSizeBase: 14
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 256
m_textAlignment: 65535
m_characterSpacing: 0
m_characterHorizontalScale: 1
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &3177185491562410701
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6557039598812214310}
- component: {fileID: 5788101936939836566}
- component: {fileID: 2528055724837407497}
- component: {fileID: 5767751339082063307}
- component: {fileID: 4535838851163113075}
- component: {fileID: 3505625079546582005}
- component: {fileID: 288246739155426764}
m_Layer: 5
m_Name: BuildingSlotButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6557039598812214310
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
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:
- {fileID: 9129141957646790745}
- {fileID: 8859221909843448331}
- {fileID: 8002473853090050447}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 80, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5788101936939836566
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_CullTransparentMesh: 1
--- !u!114 &2528055724837407497
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: -2771146889623541776, guid: e713d4394d6c5914eb4b8aa2aafe5429, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &5767751339082063307
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2528055724837407497}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &4535838851163113075
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventTrigger
m_Delegates: []
--- !u!114 &3505625079546582005
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: be718fab39448a644b228469875f0689, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingSlotButton
iconImage: {fileID: 1268587308832695165}
nameText: {fileID: 3777750717565537039}
hotkeyText: {fileID: 7255687967647854611}
backgroundImage: {fileID: 2528055724837407497}
button: {fileID: 5767751339082063307}
normalColor: {r: 0.2, g: 0.2, b: 0.2, a: 0.8}
selectedColor: {r: 0.3, g: 0.6, b: 0.3, a: 1}
hoverColor: {r: 0.3, g: 0.3, b: 0.3, a: 1}
--- !u!114 &288246739155426764
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3177185491562410701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 80
m_PreferredHeight: 80
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &3503358795193852945
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8859221909843448331}
- component: {fileID: 5277120818714561014}
- component: {fileID: 3777750717565537039}
m_Layer: 5
m_Name: NameText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8859221909843448331
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3503358795193852945}
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: 6557039598812214310}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 5}
m_SizeDelta: {x: 0, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5277120818714561014
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3503358795193852945}
m_CullTransparentMesh: 1
--- !u!114 &3777750717565537039
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3503358795193852945}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Wall
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 52310d2f5a2eaaf49bdaf92c08c5eb78, type: 2}
m_sharedMaterial: {fileID: 3669596862895025436, guid: 52310d2f5a2eaaf49bdaf92c08c5eb78, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 12
m_fontSizeBase: 12
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_characterHorizontalScale: 1
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &5510288563591337089
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9129141957646790745}
- component: {fileID: 1009756672107567946}
- component: {fileID: 1268587308832695165}
m_Layer: 5
m_Name: Icon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &9129141957646790745
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5510288563591337089}
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: 6557039598812214310}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 60, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1009756672107567946
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5510288563591337089}
m_CullTransparentMesh: 1
--- !u!114 &1268587308832695165
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5510288563591337089}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d2319e04c5a7d0545a6a351abae7a9c2
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,8 @@ namespace Northbound
[Header("Building Info")] [Header("Building Info")]
public string buildingName; public string buildingName;
public GameObject prefab; public GameObject prefab;
[Tooltip("UI에 표시될 건물 아이콘")]
public Sprite icon;
[Header("Grid Size")] [Header("Grid Size")]
[Tooltip("Width in grid units")] [Tooltip("Width in grid units")]

View File

@@ -133,13 +133,6 @@ namespace Northbound
return false; return false;
} }
// 쿨다운 체크
if (Time.time - _lastInteractionTime < buildingData.interactionCooldown)
{
Debug.Log($"[BuildingFoundation] Cooldown active: {Time.time - _lastInteractionTime}/{buildingData.interactionCooldown}");
return false;
}
// 이미 완성됨 // 이미 완성됨
if (_currentProgress.Value >= buildingData.requiredWorkAmount) if (_currentProgress.Value >= buildingData.requiredWorkAmount)
{ {
@@ -155,7 +148,6 @@ namespace Northbound
return false; return false;
} }
Debug.Log($"<color=green>[BuildingFoundation] CanInteract = true</color>");
return true; return true;
} }

View File

@@ -120,11 +120,6 @@ namespace Northbound
// 충돌한 Collider가 있으면 배치 불가 // 충돌한 Collider가 있으면 배치 불가
if (colliders.Length > 0) if (colliders.Length > 0)
{ {
Debug.Log($"<color=yellow>[BuildingManager] 물리적 충돌 감지: {colliders.Length}개의 오브젝트와 겹침</color>");
foreach (var col in colliders)
{
Debug.Log($" - {col.gameObject.name} (Layer: {LayerMask.LayerToName(col.gameObject.layer)})");
}
return false; return false;
} }

View File

@@ -1,6 +1,7 @@
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using UnityEngine.EventSystems;
namespace Northbound namespace Northbound
{ {
@@ -124,12 +125,51 @@ namespace Northbound
if (isBuildModeActive) if (isBuildModeActive)
{ {
// UI 표시
if (BuildingQuickslotUI.Instance != null)
{
BuildingQuickslotUI.Instance.ShowQuickslot(this);
}
CreatePreview(); CreatePreview();
} }
else else
{ {
// UI 숨김
if (BuildingQuickslotUI.Instance != null)
{
BuildingQuickslotUI.Instance.HideQuickslot();
}
DestroyPreview(); DestroyPreview();
} }
Debug.Log($"[BuildingPlacement] 건설 모드 {(isBuildModeActive ? "" : "")}");
}
/// <summary>
/// UI에서 건물 선택 시 호출
/// </summary>
public void SetSelectedBuilding(int index)
{
if (index < 0 || BuildingManager.Instance == null ||
index >= BuildingManager.Instance.availableBuildings.Count)
{
Debug.LogWarning($"[BuildingPlacement] 유효하지 않은 건물 인덱스: {index}");
return;
}
selectedBuildingIndex = index;
currentRotation = 0; // 회전 초기화
// 프리뷰 다시 생성
if (isBuildModeActive)
{
DestroyPreview();
CreatePreview();
}
Debug.Log($"[BuildingPlacement] 건물 선택됨: {BuildingManager.Instance.availableBuildings[index].buildingName}");
} }
private void CreatePreview() private void CreatePreview()
@@ -187,6 +227,8 @@ namespace Northbound
{ {
collider.enabled = false; collider.enabled = false;
} }
Debug.Log($"[BuildingPlacement] 프리뷰 생성됨: {data.buildingName}");
} }
private void DestroyPreview() private void DestroyPreview()
@@ -241,6 +283,13 @@ namespace Northbound
{ {
if (!isBuildModeActive || previewObject == null) return; if (!isBuildModeActive || previewObject == null) return;
// UI 위에서 클릭한 경우 무시
if (IsPointerOverUI())
{
Debug.Log("<color=cyan>[BuildingPlacement] UI 위에서 클릭함 - 건설 취소</color>");
return;
}
// Get placement position // Get placement position
Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue()); Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
if (Physics.Raycast(ray, out RaycastHit hit, maxPlacementDistance, groundLayer)) if (Physics.Raycast(ray, out RaycastHit hit, maxPlacementDistance, groundLayer))
@@ -249,34 +298,43 @@ namespace Northbound
if (BuildingManager.Instance.IsValidPlacement(selectedData, hit.point, currentRotation, out Vector3 groundPosition)) if (BuildingManager.Instance.IsValidPlacement(selectedData, hit.point, currentRotation, out Vector3 groundPosition))
{ {
// 토대 배치 요청 (실제로는 토대가 생성됨) // 토대 배치 요청
BuildingManager.Instance.RequestPlaceFoundation(selectedBuildingIndex, groundPosition, currentRotation); BuildingManager.Instance.RequestPlaceFoundation(selectedBuildingIndex, groundPosition, currentRotation);
Debug.Log($"<color=cyan>[BuildingPlacement] 건설 시작: {selectedData.buildingName}</color>");
Debug.Log($"<color=green>[BuildingPlacement] 토대 배치 요청: {selectedData.buildingName}</color>");
} }
else else
{ {
Debug.LogWarning("<color=yellow>[BuildingPlacement] 배치할 수 없는 위치입니다.</color>"); Debug.Log("<color=yellow>[BuildingPlacement] 배치할 수 없는 위치입니다.</color>");
} }
} }
} }
private void OnDrawGizmos() /// <summary>
/// 마우스 포인터가 UI 위에 있는지 확인
/// </summary>
private bool IsPointerOverUI()
{ {
if (!IsOwner || !isBuildModeActive || !showGridBounds) return; // EventSystem이 없으면 UI 체크 불가능
if (BuildingManager.Instance == null || previewObject == null || !previewObject.activeSelf) return; if (EventSystem.current == null)
return false;
BuildingData data = BuildingManager.Instance.availableBuildings[selectedBuildingIndex]; // New Input System을 사용하는 경우
if (data == null) return; if (Mouse.current != null)
{
Vector2 mousePosition = Mouse.current.position.ReadValue();
return EventSystem.current.IsPointerOverGameObject();
}
// Draw grid bounds being used for collision detection // Legacy Input System (폴백)
Bounds bounds = BuildingManager.Instance.GetPlacementBounds(data, previewObject.transform.position, currentRotation); return EventSystem.current.IsPointerOverGameObject();
}
// Check if valid /// <summary>
bool isValid = BuildingManager.Instance.IsValidPlacement(data, previewObject.transform.position, currentRotation, out _); /// 건설 모드 활성화 상태 확인
/// </summary>
Gizmos.color = isValid ? new Color(0, 1, 0, 0.5f) : new Color(1, 0, 0, 0.5f); public bool IsBuildModeActive()
Gizmos.DrawWireCube(bounds.center, bounds.size); {
return isBuildModeActive;
} }
} }
} }

View File

@@ -0,0 +1,302 @@
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
namespace Northbound
{
/// <summary>
/// 건설 모드 시 건축 가능한 건물들을 표시하는 퀵슬롯 UI
/// </summary>
public class BuildingQuickslotUI : MonoBehaviour
{
public static BuildingQuickslotUI Instance { get; private set; }
[Header("UI References")]
[SerializeField] private GameObject quickslotPanel;
[SerializeField] private Transform slotContainer;
[SerializeField] private GameObject slotButtonPrefab;
[Header("Settings")]
[SerializeField] private int maxSlots = 8;
private List<BuildingSlotButton> slotButtons = new List<BuildingSlotButton>();
private BuildingPlacement buildingPlacement;
private int currentSelectedIndex = -1;
private PlayerInputActions _inputActions;
private InputAction[] _quickslotActions;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
// Input Actions 초기화
_inputActions = new PlayerInputActions();
InitializeQuickslotActions();
}
private void OnEnable()
{
EnableQuickslotActions(false); // 초기에는 비활성화
}
private void OnDisable()
{
DisableQuickslotActions();
}
private void OnDestroy()
{
UnsubscribeQuickslotActions();
_inputActions?.Dispose();
}
private void Start()
{
if (quickslotPanel != null)
{
quickslotPanel.SetActive(false);
}
InitializeSlots();
}
/// <summary>
/// 퀵슬롯 Input Actions 초기화 및 구독 (직접 참조)
/// </summary>
private void InitializeQuickslotActions()
{
_quickslotActions = new InputAction[maxSlots];
// 수동으로 각 액션 할당
// Input Actions 에셋에 QuickSlot1~8 액션을 추가했는지 확인하세요
_quickslotActions[0] = _inputActions.Player.QuickSlot1;
_quickslotActions[1] = _inputActions.Player.QuickSlot2;
_quickslotActions[2] = _inputActions.Player.QuickSlot3;
_quickslotActions[3] = _inputActions.Player.QuickSlot4;
_quickslotActions[4] = _inputActions.Player.QuickSlot5;
_quickslotActions[5] = _inputActions.Player.QuickSlot6;
_quickslotActions[6] = _inputActions.Player.QuickSlot7;
_quickslotActions[7] = _inputActions.Player.QuickSlot8;
// 이벤트 구독
for (int i = 0; i < _quickslotActions.Length; i++)
{
if (_quickslotActions[i] != null)
{
int slotIndex = i; // 클로저 캡처를 위한 로컬 변수
_quickslotActions[i].performed += ctx => OnQuickslotPressed(slotIndex);
Debug.Log($"[BuildingQuickslotUI] QuickSlot{i + 1} 액션 바인딩 성공");
}
else
{
Debug.LogWarning($"[BuildingQuickslotUI] QuickSlot{i + 1} 액션이 null입니다. Input Actions 에셋을 확인하세요.");
}
}
}
/// <summary>
/// 퀵슬롯 액션 구독 해제
/// </summary>
private void UnsubscribeQuickslotActions()
{
if (_quickslotActions == null) return;
for (int i = 0; i < _quickslotActions.Length; i++)
{
if (_quickslotActions[i] != null)
{
int slotIndex = i;
_quickslotActions[i].performed -= ctx => OnQuickslotPressed(slotIndex);
}
}
}
/// <summary>
/// 퀵슬롯 액션 활성화
/// </summary>
private void EnableQuickslotActions(bool enable)
{
if (_quickslotActions == null) return;
foreach (var action in _quickslotActions)
{
if (action != null)
{
if (enable)
action.Enable();
else
action.Disable();
}
}
}
/// <summary>
/// 퀵슬롯 액션 비활성화
/// </summary>
private void DisableQuickslotActions()
{
EnableQuickslotActions(false);
}
/// <summary>
/// 퀵슬롯 키 입력 처리
/// </summary>
private void OnQuickslotPressed(int slotIndex)
{
// 퀵슬롯이 활성화되어 있고, 유효한 인덱스인 경우만 처리
if (quickslotPanel != null && quickslotPanel.activeSelf && slotIndex < slotButtons.Count)
{
SelectBuilding(slotIndex);
}
}
/// <summary>
/// BuildingManager의 건물 목록으로 슬롯 초기화
/// </summary>
private void InitializeSlots()
{
if (BuildingManager.Instance == null || slotContainer == null || slotButtonPrefab == null)
{
Debug.LogWarning("[BuildingQuickslotUI] 필수 컴포넌트가 설정되지 않았습니다.");
return;
}
// 기존 슬롯 제거
foreach (var slot in slotButtons)
{
if (slot != null)
Destroy(slot.gameObject);
}
slotButtons.Clear();
// 건물 목록으로 슬롯 생성 (최대 maxSlots개)
var buildings = BuildingManager.Instance.availableBuildings;
int slotCount = Mathf.Min(buildings.Count, maxSlots);
for (int i = 0; i < slotCount; i++)
{
CreateSlot(buildings[i], i);
}
Debug.Log($"[BuildingQuickslotUI] {slotButtons.Count}개의 건물 슬롯 생성됨");
}
/// <summary>
/// 개별 슬롯 버튼 생성
/// </summary>
private void CreateSlot(BuildingData buildingData, int index)
{
GameObject slotObj = Instantiate(slotButtonPrefab, slotContainer);
BuildingSlotButton slotButton = slotObj.GetComponent<BuildingSlotButton>();
if (slotButton != null)
{
slotButton.Initialize(buildingData, index, this);
slotButtons.Add(slotButton);
// 핫키 표시 (1-8)
slotButton.SetHotkeyText((index + 1).ToString());
}
}
/// <summary>
/// 건설 모드 활성화 (BuildingPlacement에서 호출)
/// </summary>
public void ShowQuickslot(BuildingPlacement placement)
{
buildingPlacement = placement;
if (quickslotPanel != null)
{
quickslotPanel.SetActive(true);
}
// 퀵슬롯 입력 활성화
EnableQuickslotActions(true);
// 기본 선택 (첫 번째 건물)
if (slotButtons.Count > 0)
{
SelectBuilding(0);
}
Debug.Log("[BuildingQuickslotUI] 건설 퀵슬롯 표시됨");
}
/// <summary>
/// 건설 모드 비활성화
/// </summary>
public void HideQuickslot()
{
if (quickslotPanel != null)
{
quickslotPanel.SetActive(false);
}
// 퀵슬롯 입력 비활성화
DisableQuickslotActions();
buildingPlacement = null;
currentSelectedIndex = -1;
// 모든 슬롯 선택 해제
foreach (var slot in slotButtons)
{
if (slot != null)
slot.SetSelected(false);
}
Debug.Log("[BuildingQuickslotUI] 건설 퀵슬롯 숨김");
}
/// <summary>
/// 건물 선택 (슬롯 버튼 클릭 또는 핫키)
/// </summary>
public void SelectBuilding(int index)
{
if (index < 0 || index >= slotButtons.Count)
return;
// 이전 선택 해제
if (currentSelectedIndex >= 0 && currentSelectedIndex < slotButtons.Count)
{
slotButtons[currentSelectedIndex].SetSelected(false);
}
// 새로운 선택
currentSelectedIndex = index;
slotButtons[index].SetSelected(true);
// BuildingPlacement에 알림
if (buildingPlacement != null)
{
buildingPlacement.SetSelectedBuilding(index);
}
Debug.Log($"[BuildingQuickslotUI] 건물 선택됨: {slotButtons[index].GetBuildingName()} (인덱스: {index})");
}
/// <summary>
/// 현재 선택된 건물 인덱스
/// </summary>
public int GetSelectedIndex()
{
return currentSelectedIndex;
}
/// <summary>
/// 슬롯 개수 반환
/// </summary>
public int GetSlotCount()
{
return slotButtons.Count;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ea63e719aed95e349b7f8dd7ec1d00b2

View File

@@ -0,0 +1,154 @@
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;
namespace Northbound
{
/// <summary>
/// 개별 건물 슬롯 버튼
/// </summary>
[RequireComponent(typeof(EventTrigger))]
public class BuildingSlotButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[Header("UI References")]
[SerializeField] private Image iconImage;
[SerializeField] private TextMeshProUGUI nameText;
[SerializeField] private TextMeshProUGUI hotkeyText;
[SerializeField] private Image backgroundImage;
[SerializeField] private Button button;
[Header("Visual Settings")]
[SerializeField] private Color normalColor = new Color(0.2f, 0.2f, 0.2f, 0.8f);
[SerializeField] private Color selectedColor = new Color(0.3f, 0.6f, 0.3f, 1f);
[SerializeField] private Color hoverColor = new Color(0.3f, 0.3f, 0.3f, 1f);
private BuildingData buildingData;
private int slotIndex;
private BuildingQuickslotUI quickslotUI;
private bool isSelected = false;
private void Awake()
{
if (button == null)
button = GetComponent<Button>();
if (button != null)
{
button.onClick.AddListener(OnButtonClicked);
}
}
/// <summary>
/// 슬롯 초기화
/// </summary>
public void Initialize(BuildingData data, int index, BuildingQuickslotUI ui)
{
buildingData = data;
slotIndex = index;
quickslotUI = ui;
UpdateVisuals();
}
/// <summary>
/// UI 업데이트
/// </summary>
private void UpdateVisuals()
{
if (buildingData == null) return;
// 아이콘 설정
if (iconImage != null && buildingData.icon != null)
{
iconImage.sprite = buildingData.icon;
iconImage.enabled = true;
}
else if (iconImage != null)
{
iconImage.enabled = false;
}
// 이름 설정
if (nameText != null)
{
nameText.text = buildingData.buildingName;
}
// 배경 색상
UpdateBackgroundColor();
}
/// <summary>
/// 핫키 텍스트 설정
/// </summary>
public void SetHotkeyText(string text)
{
if (hotkeyText != null)
{
hotkeyText.text = text;
}
}
/// <summary>
/// 버튼 클릭 이벤트
/// </summary>
private void OnButtonClicked()
{
if (quickslotUI != null)
{
quickslotUI.SelectBuilding(slotIndex);
}
}
/// <summary>
/// 선택 상태 설정
/// </summary>
public void SetSelected(bool selected)
{
isSelected = selected;
UpdateBackgroundColor();
}
/// <summary>
/// 배경 색상 업데이트
/// </summary>
private void UpdateBackgroundColor()
{
if (backgroundImage != null)
{
backgroundImage.color = isSelected ? selectedColor : normalColor;
}
}
/// <summary>
/// 마우스 호버 시 (IPointerEnterHandler)
/// </summary>
public void OnPointerEnter(PointerEventData eventData)
{
if (backgroundImage != null && !isSelected)
{
backgroundImage.color = hoverColor;
}
}
/// <summary>
/// 마우스 호버 해제 시 (IPointerExitHandler)
/// </summary>
public void OnPointerExit(PointerEventData eventData)
{
if (backgroundImage != null && !isSelected)
{
backgroundImage.color = normalColor;
}
}
/// <summary>
/// 건물 이름 반환
/// </summary>
public string GetBuildingName()
{
return buildingData != null ? buildingData.buildingName : "Unknown";
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: be718fab39448a644b228469875f0689