Compare commits
11 Commits
14cf8fe187
...
7016b3c575
| Author | SHA1 | Date | |
|---|---|---|---|
| 7016b3c575 | |||
| 7c15b56201 | |||
| f7bef8f504 | |||
| 05816f2b8e | |||
| a1f0f28964 | |||
| ac5bfc548b | |||
| fd0ba9e9fd | |||
| 3d3591784f | |||
| ec99e302ed | |||
| 8add066c3c | |||
| 2ac491683f |
@@ -5,7 +5,14 @@
|
||||
"Bash(git fsck:*)",
|
||||
"Bash(git commit:*)",
|
||||
"Bash(git read-tree:*)",
|
||||
"Bash(git push:*)"
|
||||
"Bash(git push:*)",
|
||||
"Bash(cd \"D:/Colosseum/Assets/Scripts/StatusEffects\" && sed -i 's/ActiveStatusEffect/ActiveStatusEffect/g' StatusEffectManager.cs)",
|
||||
"Bash(cd \"D:/Colosseum/Assets/Scripts/UI\" && sed -i 's/ActiveStatusEffect/ActiveStatusEffect/g' StatusEffectUI.cs StatusEffectListUI.cs)",
|
||||
"Bash(cd \"D:/Colosseum/Assets/Scripts\" && mv StatusEffects Abnormalities)",
|
||||
"Bash(cd \"D:/Colosseum/Assets/Scripts/Abnormalities\" && mv StatusEffectData.cs AbnormalityData.cs && mv ActiveStatusEffect.cs ActiveAbnormality.cs && mv StatusEffectManager.cs AbnormalityManager.cs)",
|
||||
"Bash(cd \"D:/Colosseum/Assets/Scripts/UI\" && mv StatusEffectUI.cs AbnormalitySlotUI.cs && mv StatusEffectListUI.cs AbnormalityListUI.cs)",
|
||||
"Bash(git -C \"D:/Colosseum\" mv \"Assets/Scripts/Skills/Effects/BuffEffect.cs\" \"Assets/Scripts/Skills/Effects/AbnormalityEffect.cs\")",
|
||||
"Bash(find /d/Colosseum -name \"*.controller\" 2>/dev/null | head -20)"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
329
AGENTS.md
Normal file
329
AGENTS.md
Normal file
@@ -0,0 +1,329 @@
|
||||
# Colosseum - Unity Game Project
|
||||
|
||||
## Project Overview
|
||||
|
||||
Multiplayer arena game built with **Unity 6000.3.10f1** and **Unity Netcode for GameObjects**.
|
||||
|
||||
- **Language**: C# 9.0
|
||||
- **Target Framework**: .NET Standard 2.1
|
||||
- **Root Namespace**: `Colosseum`
|
||||
- **Assembly Definition**: `Colosseum.Game` (Assets/Scripts/Colosseum.Game.asmdef)
|
||||
|
||||
## Game Design Documentation
|
||||
|
||||
Design docs are maintained in Obsidian Vault: `C:\Users\dal4s\OneDrive\문서\Obsidian Vault\Colosseum`
|
||||
|
||||
### Game Concept
|
||||
- **Genre**: Online multiplayer co-op action RPG (3rd person)
|
||||
- **Theme**: Gladiator survival boss raid in Colosseum
|
||||
- **Roles**: Multi-role system - players can hybridize (e.g., Tank 0.5 + DPS 0.5) instead of fixed Tank/DPS/Healer
|
||||
|
||||
### Stats System
|
||||
|
||||
| Stat | Abbr | Description | Derived Formula |
|
||||
|------|------|-------------|-----------------|
|
||||
| Strength | STR | Weapon damage | Physical Damage = STR × 2 |
|
||||
| Dexterity | DEX | Ranged aim/damage, melee speed | Ranged Damage = DEX × 2 |
|
||||
| Intelligence | INT | Magic damage | Magic Damage = INT × 2 |
|
||||
| Vitality | VIT | Max health | Max HP = VIT × 10 |
|
||||
| Wisdom | WIS | Healing power | Heal Power = WIS × 1.5 |
|
||||
| Spirit | SPI | Max mana | Max MP = SPI × 5 |
|
||||
|
||||
### Damage Calculation
|
||||
|
||||
```
|
||||
Final Damage = baseDamage + (statDamage × statScaling)
|
||||
```
|
||||
|
||||
| DamageType | Base Stat | Description |
|
||||
|------------|-----------|-------------|
|
||||
| Physical | STR | Melee weapon damage |
|
||||
| Magical | INT | Spell damage |
|
||||
| Ranged | DEX | Bow/ranged damage |
|
||||
| True | None | Fixed damage, no stat scaling |
|
||||
|
||||
### Stat Modifier System
|
||||
|
||||
Modifiers are applied in order:
|
||||
1. **Flat**: Add fixed value
|
||||
2. **PercentAdd**: Sum percentages, then multiply
|
||||
3. **PercentMult**: Multiply individually
|
||||
|
||||
```
|
||||
Final = (Base + FlatSum) × (1 + PercentAddSum) × PercentMult1 × PercentMult2...
|
||||
```
|
||||
|
||||
### Skill System
|
||||
- **Active Skills**: 6 slots (L-click, R-click, 1, 2, 3, 4)
|
||||
- **Passive Skills**: Tree-based progression from center
|
||||
- **Effects**: Triggered via animation events (`OnEffect(index)`)
|
||||
- **Animation**: Start clip + optional end clip
|
||||
|
||||
## Build/Run Commands
|
||||
|
||||
This is a Unity project. Use Unity Editor for building and testing.
|
||||
|
||||
```bash
|
||||
# Open in Unity Editor (requires Unity Hub)
|
||||
# Build via: File > Build Settings > Build
|
||||
|
||||
# Run tests in Unity Editor
|
||||
# Window > General > Test Runner > EditMode / PlayMode
|
||||
```
|
||||
|
||||
### Build from Command Line (Windows)
|
||||
|
||||
```bash
|
||||
# Build Windows standalone (adjust paths as needed)
|
||||
"C:\Program Files\Unity\Hub\Editor\6000.3.10f1\Editor\Unity.exe" -batchmode -projectPath . -buildWindows64Player ./Builds/Windows/Colosseum.exe -quit
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
Assets/
|
||||
Scripts/
|
||||
Abnormalities/ # Buff/debuff system
|
||||
Editor/ # Unity editor extensions
|
||||
Network/ # Network management
|
||||
Player/ # Player controllers
|
||||
Skills/ # Skill system
|
||||
Effects/ # Skill effects (damage, heal, etc.)
|
||||
Stats/ # Character statistics
|
||||
UI/ # User interface
|
||||
```
|
||||
|
||||
## Code Style Guidelines
|
||||
|
||||
### Namespaces
|
||||
|
||||
Follow `Colosseum.{Subnamespace}` pattern:
|
||||
|
||||
```csharp
|
||||
namespace Colosseum.Player { }
|
||||
namespace Colosseum.Skills { }
|
||||
namespace Colosseum.Skills.Effects { }
|
||||
namespace Colosseum.Stats { }
|
||||
namespace Colosseum.Network { }
|
||||
namespace Colosseum.Abnormalities { }
|
||||
```
|
||||
|
||||
### Using Statements Order
|
||||
|
||||
Organize imports in this order, separated by blank lines:
|
||||
|
||||
1. System namespaces
|
||||
2. UnityEngine namespaces
|
||||
3. Unity.Netcode / Unity packages
|
||||
4. Colosseum namespaces
|
||||
|
||||
```csharp
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
using Unity.Netcode;
|
||||
|
||||
using Colosseum.Stats;
|
||||
using Colosseum.Player;
|
||||
```
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
| Element | Convention | Example |
|
||||
|---------|------------|---------|
|
||||
| Classes | PascalCase | `PlayerNetworkController` |
|
||||
| Interfaces | IPascalCase | `IDamageable` |
|
||||
| Methods | PascalCase | `TakeDamageRpc()` |
|
||||
| Public Properties | PascalCase | `MaxHealth`, `IsStunned` |
|
||||
| Private Fields | camelCase | `currentHealth`, `characterStats` |
|
||||
| Constants | PascalCase or SCREAMING_SNAKE | `SKILL_STATE_NAME`, `MaxValue` |
|
||||
| Enum values | PascalCase | `DamageType.Physical` |
|
||||
|
||||
### Serialization & Inspector
|
||||
|
||||
Use `[SerializeField]` with `[Header]` and `[Tooltip]` for organization:
|
||||
|
||||
```csharp
|
||||
[Header("References")]
|
||||
[Tooltip("CharacterStats component (auto-searched if null)")]
|
||||
[SerializeField] private CharacterStats characterStats;
|
||||
|
||||
[Header("Settings")]
|
||||
[Min(0f)] [SerializeField] private float baseDamage = 10f;
|
||||
[SerializeField] private DamageType damageType = DamageType.Physical;
|
||||
```
|
||||
|
||||
### Documentation
|
||||
|
||||
Use XML documentation comments in **Korean**:
|
||||
|
||||
```csharp
|
||||
/// <summary>
|
||||
/// 플레이어 네트워크 상태 관리 (HP, MP 등)
|
||||
/// </summary>
|
||||
public class PlayerNetworkController : NetworkBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// 대미지 적용 (서버에서만 실행)
|
||||
/// </summary>
|
||||
[Rpc(SendTo.Server)]
|
||||
public void TakeDamageRpc(float damage)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Network Code Patterns
|
||||
|
||||
Use Unity Netcode patterns:
|
||||
|
||||
```csharp
|
||||
// Network variables for synchronized state
|
||||
private NetworkVariable<float> currentHealth = new NetworkVariable<float>(100f);
|
||||
|
||||
// Server RPCs for client-to-server calls
|
||||
[Rpc(SendTo.Server)]
|
||||
public void TakeDamageRpc(float damage)
|
||||
{
|
||||
currentHealth.Value = Mathf.Max(0f, currentHealth.Value - damage);
|
||||
}
|
||||
|
||||
// Check authority before modifying
|
||||
if (IsServer)
|
||||
{
|
||||
currentHealth.Value = MaxHealth;
|
||||
}
|
||||
```
|
||||
|
||||
### Expression Body Members
|
||||
|
||||
Use for simple properties and methods:
|
||||
|
||||
```csharp
|
||||
public float MaxHealth => vitality.FinalValue * 10f;
|
||||
public bool IsStunned => stunCount > 0;
|
||||
public bool CanAct => !IsStunned;
|
||||
```
|
||||
|
||||
### Switch Expressions
|
||||
|
||||
Prefer switch expressions for concise mapping:
|
||||
|
||||
```csharp
|
||||
public CharacterStat GetStat(StatType statType)
|
||||
{
|
||||
return statType switch
|
||||
{
|
||||
StatType.Strength => strength,
|
||||
StatType.Dexterity => dexterity,
|
||||
StatType.Intelligence => intelligence,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### ScriptableObjects for Data
|
||||
|
||||
Use ScriptableObject for configuration data:
|
||||
|
||||
```csharp
|
||||
[CreateAssetMenu(fileName = "NewSkill", menuName = "Colosseum/Skill")]
|
||||
public class SkillData : ScriptableObject
|
||||
{
|
||||
[SerializeField] private string skillName;
|
||||
[SerializeField] private List<SkillEffect> effects;
|
||||
|
||||
public string SkillName => skillName;
|
||||
public IReadOnlyList<SkillEffect> Effects => effects;
|
||||
}
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
- Use `Debug.LogWarning()` for recoverable issues
|
||||
- Use `Debug.LogError()` for critical failures
|
||||
- Null-check parameters in public methods
|
||||
|
||||
```csharp
|
||||
public void ApplyAbnormality(AbnormalityData data, GameObject source)
|
||||
{
|
||||
if (data == null)
|
||||
{
|
||||
Debug.LogWarning("[Abnormality] ApplyAbnormality called with null data");
|
||||
return;
|
||||
}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### Events
|
||||
|
||||
Use C# events with `Action<T>` or custom delegates:
|
||||
|
||||
```csharp
|
||||
public event Action<ActiveAbnormality> OnAbnormalityAdded;
|
||||
public event Action<ActiveAbnormality> OnAbnormalityRemoved;
|
||||
public event Action OnAbnormalitiesChanged;
|
||||
|
||||
// Invoke with null-conditional
|
||||
OnAbnormalityAdded?.Invoke(newAbnormality);
|
||||
```
|
||||
|
||||
## Key Dependencies
|
||||
|
||||
| Package | Purpose |
|
||||
|---------|---------|
|
||||
| Unity.Netcode.Runtime | Multiplayer networking |
|
||||
| Unity.InputSystem | New input system |
|
||||
| Unity.TextMeshPro | Text rendering |
|
||||
| Unity.Networking.Transport | Low-level networking |
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### MonoBehaviour Components
|
||||
|
||||
```csharp
|
||||
public class ExampleComponent : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private Animator animator;
|
||||
|
||||
public Animator Animator => animator;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (animator == null)
|
||||
animator = GetComponentInChildren<Animator>();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### NetworkBehaviour Components
|
||||
|
||||
```csharp
|
||||
public class NetworkedComponent : NetworkBehaviour
|
||||
{
|
||||
private NetworkVariable<int> value = new NetworkVariable<int>();
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
// Initialize networked state
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
// Cleanup
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- All code comments and documentation should be in Korean
|
||||
- Use `[Min()]` attribute for numeric minimums in Inspector
|
||||
- Use `[TextArea]` for multi-line string fields
|
||||
- Private fields should use `camelCase` (no `m_` or `_` prefix)
|
||||
- Prefer `IReadOnlyList<T>` for exposing collections
|
||||
8
Assets/Abnormalities.meta
Normal file
8
Assets/Abnormalities.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 72b7a9faa543d444882609fe047a2073
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
24
Assets/Abnormalities/Abnormality_Test_Buff.asset
Normal file
24
Assets/Abnormalities/Abnormality_Test_Buff.asset
Normal file
@@ -0,0 +1,24 @@
|
||||
%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: b08cc671f858a3b409170a5356e960a0, type: 3}
|
||||
m_Name: Abnormality_Test_Buff
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Abnormalities.AbnormalityData
|
||||
abnormalityName: Test Buff
|
||||
icon: {fileID: 21300000, guid: 173f7bf0258285c4f8bf01825ac02a11, type: 3}
|
||||
duration: 10
|
||||
level: 1
|
||||
isDebuff: 0
|
||||
statModifiers: []
|
||||
periodicInterval: 0
|
||||
periodicValue: 0
|
||||
controlType: 0
|
||||
slowMultiplier: 0.5
|
||||
8
Assets/Abnormalities/Abnormality_Test_Buff.asset.meta
Normal file
8
Assets/Abnormalities/Abnormality_Test_Buff.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da5a38e4e2c383940a34d9d8080fbbe0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
24
Assets/Abnormalities/Abnormality_Test_Debuff.asset
Normal file
24
Assets/Abnormalities/Abnormality_Test_Debuff.asset
Normal file
@@ -0,0 +1,24 @@
|
||||
%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: b08cc671f858a3b409170a5356e960a0, type: 3}
|
||||
m_Name: Abnormality_Test_Debuff
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Abnormalities.AbnormalityData
|
||||
abnormalityName: Test Debuff
|
||||
icon: {fileID: 21300000, guid: 173f7bf0258285c4f8bf01825ac02a11, type: 3}
|
||||
duration: 10
|
||||
level: 1
|
||||
isDebuff: 1
|
||||
statModifiers: []
|
||||
periodicInterval: 0
|
||||
periodicValue: 0
|
||||
controlType: 0
|
||||
slowMultiplier: 0.5
|
||||
8
Assets/Abnormalities/Abnormality_Test_Debuff.asset.meta
Normal file
8
Assets/Abnormalities/Abnormality_Test_Debuff.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c4abb0f89779f294ab99562e085e8f3b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -55,6 +55,20 @@ ModelImporter:
|
||||
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
|
||||
curves: []
|
||||
events:
|
||||
- time: 0.4590326
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.46052074
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 2
|
||||
messageOptions: 0
|
||||
- time: 0.4627699
|
||||
functionName: OnEffect
|
||||
data:
|
||||
|
||||
@@ -55,13 +55,34 @@ ModelImporter:
|
||||
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
|
||||
curves: []
|
||||
events:
|
||||
- time: 0.49976447
|
||||
- time: 0
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 0.50297606
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 0
|
||||
messageOptions: 0
|
||||
- time: 0.5238095
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 1
|
||||
messageOptions: 0
|
||||
- time: 0.5429192
|
||||
functionName: OnEffect
|
||||
data:
|
||||
objectReferenceParameter: {instanceID: 0}
|
||||
floatParameter: 0
|
||||
intParameter: 2
|
||||
messageOptions: 0
|
||||
- time: 0.9981159
|
||||
functionName: OnSkillEnd
|
||||
data:
|
||||
|
||||
BIN
Assets/External_Used/UI/SPR_FantasyWarrior_Frame_Box_16.png
Normal file
BIN
Assets/External_Used/UI/SPR_FantasyWarrior_Frame_Box_16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
108
Assets/External_Used/UI/SPR_FantasyWarrior_Frame_Box_16.png.meta
Normal file
108
Assets/External_Used/UI/SPR_FantasyWarrior_Frame_Box_16.png.meta
Normal file
@@ -0,0 +1,108 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 976db4f04c3bd4e469e9b8eb2c20e1ca
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 11
|
||||
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
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 0
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 80, y: 80, z: 80, w: 80}
|
||||
spriteGenerateFallbackPhysicsShape: 0
|
||||
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
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
655
Assets/External_Used/UI/UI_AbnormalitySlot.prefab
Normal file
655
Assets/External_Used/UI/UI_AbnormalitySlot.prefab
Normal file
@@ -0,0 +1,655 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3383354828365798028
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8742265258977334277}
|
||||
- component: {fileID: 3698892055439276710}
|
||||
- component: {fileID: 9068576939756357679}
|
||||
- component: {fileID: 800351318774919540}
|
||||
- component: {fileID: 5402880947663824673}
|
||||
m_Layer: 5
|
||||
m_Name: UI_AbnormalitySlot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8742265258977334277
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383354828365798028}
|
||||
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: 2211778034640404479}
|
||||
- {fileID: 2830353451877067372}
|
||||
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: 50, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3698892055439276710
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383354828365798028}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &9068576939756357679
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383354828365798028}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 1, b: 0.14357352, a: 0}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 0
|
||||
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
|
||||
--- !u!95 &800351318774919540
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383354828365798028}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!114 &5402880947663824673
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383354828365798028}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 287a45a81e69cbf48845f88759cf7eb4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
iconImage: {fileID: 8225599256848301212}
|
||||
durationFill: {fileID: 3807928883176071825}
|
||||
durationText: {fileID: 2584127467159023136}
|
||||
effectNameText: {fileID: 0}
|
||||
backgroundImage: {fileID: 6218527427496975808}
|
||||
buffColor: {r: 0.2, g: 0.6, b: 0.2, a: 0.8}
|
||||
debuffColor: {r: 0.6, g: 0.2, b: 0.2, a: 0.8}
|
||||
--- !u!1 &3546204093425322779
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2830353451877067372}
|
||||
- component: {fileID: 8318959168881738735}
|
||||
- component: {fileID: 5659953853696642109}
|
||||
- component: {fileID: 3039300877730597146}
|
||||
m_Layer: 5
|
||||
m_Name: SPR_Frame
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2830353451877067372
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3546204093425322779}
|
||||
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: 8742265258977334277}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8318959168881738735
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3546204093425322779}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5659953853696642109
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3546204093425322779}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 1, b: 0, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 0
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 976db4f04c3bd4e469e9b8eb2c20e1ca, 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: 4
|
||||
--- !u!225 &3039300877730597146
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3546204093425322779}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 0
|
||||
m_BlocksRaycasts: 0
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1 &4902539774281912895
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2062133184972599418}
|
||||
- component: {fileID: 5719122352651651396}
|
||||
m_Layer: 5
|
||||
m_Name: Item
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2062133184972599418
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4902539774281912895}
|
||||
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: 1336485923641369346}
|
||||
m_Father: {fileID: 2211778034640404479}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!225 &5719122352651651396
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4902539774281912895}
|
||||
m_Enabled: 1
|
||||
m_Alpha: 1
|
||||
m_Interactable: 0
|
||||
m_BlocksRaycasts: 0
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1 &5010645131502399754
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 441187093428371753}
|
||||
- component: {fileID: 7014205823490043849}
|
||||
m_Layer: 5
|
||||
m_Name: Normal
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &441187093428371753
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5010645131502399754}
|
||||
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: 1901598294175631088}
|
||||
m_Father: {fileID: 2211778034640404479}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7014205823490043849
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5010645131502399754}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &7471771060503184807
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1901598294175631088}
|
||||
- component: {fileID: 2489496512246523176}
|
||||
- component: {fileID: 6218527427496975808}
|
||||
m_Layer: 5
|
||||
m_Name: SPR_Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1901598294175631088
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7471771060503184807}
|
||||
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: 441187093428371753}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2489496512246523176
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7471771060503184807}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6218527427496975808
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7471771060503184807}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0.12990497, b: 0.23584908, a: 0.9019608}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 626f1122650d7b344a394cf52ebb14ec, 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: 2.6
|
||||
--- !u!1 &8154639474077861285
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2211778034640404479}
|
||||
m_Layer: 5
|
||||
m_Name: MASK
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2211778034640404479
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8154639474077861285}
|
||||
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: 441187093428371753}
|
||||
- {fileID: 2062133184972599418}
|
||||
m_Father: {fileID: 8742265258977334277}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1001 &3573928083118294605
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 2062133184972599418}
|
||||
m_Modifications:
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Type
|
||||
value: 3
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Color.a
|
||||
value: 0.39215687
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Color.b
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Color.g
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Color.r
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_FillAmount
|
||||
value: 0.46
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_FillMethod
|
||||
value: 4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_FillOrigin
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_FillClockwise
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_text
|
||||
value: 99
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 16
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_margin.x
|
||||
value: -4.874298
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_margin.z
|
||||
value: -4.115387
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 16
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_VerticalAlignment
|
||||
value: 256
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_HorizontalAlignment
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
|
||||
value: 1801810542
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1819597544659277106, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Controller
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2889380205718597033, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3471770531181138231, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3471770531181138231, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3471770531181138231, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3471770531181138231, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 15
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4290268768443257266, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_CullTransparentMesh
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6658490951639871620, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: CooldownItem
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8431704748052656868, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
--- !u!224 &1336485923641369346 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 2527929489434551631, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
m_PrefabInstance: {fileID: 3573928083118294605}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &2584127467159023136 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
m_PrefabInstance: {fileID: 3573928083118294605}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &3807928883176071825 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 378688860670387420, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
m_PrefabInstance: {fileID: 3573928083118294605}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &8225599256848301212 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 4881363607392615121, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
m_PrefabInstance: {fileID: 3573928083118294605}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
7
Assets/External_Used/UI/UI_AbnormalitySlot.prefab.meta
Normal file
7
Assets/External_Used/UI/UI_AbnormalitySlot.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 60d898ecea82b6c429850e04d2e95b7c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1242
Assets/External_Used/UI/UI_ActionBar_Item.prefab
Normal file
1242
Assets/External_Used/UI/UI_ActionBar_Item.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/External_Used/UI/UI_ActionBar_Item.prefab.meta
Normal file
7
Assets/External_Used/UI/UI_ActionBar_Item.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 553b74bdb60f6af47b5d2c8928a2af07
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
2962
Assets/External_Used/UI/UI_Bar.prefab
Normal file
2962
Assets/External_Used/UI/UI_Bar.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/External_Used/UI/UI_Bar.prefab.meta
Normal file
7
Assets/External_Used/UI/UI_Bar.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 54087b4bd46db9e4fb7da13cf7a6cc69
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -20,6 +20,7 @@ GameObject:
|
||||
- component: {fileID: 6048740021537676210}
|
||||
- component: {fileID: 6912018896034183004}
|
||||
- component: {fileID: 6585367215453362640}
|
||||
- component: {fileID: 1242716222252539497}
|
||||
m_Layer: 0
|
||||
m_Name: Player
|
||||
m_TagString: Untagged
|
||||
@@ -134,6 +135,7 @@ MonoBehaviour:
|
||||
gravity: -9.81
|
||||
jumpForce: 5
|
||||
skillController: {fileID: 0}
|
||||
animator: {fileID: 0}
|
||||
--- !u!114 &194806265065691022
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -193,8 +195,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Player.PlayerNetworkController
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
maxHealth: 100
|
||||
maxMana: 50
|
||||
characterStats: {fileID: 0}
|
||||
--- !u!114 &8606252901290138286
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -248,7 +249,10 @@ Animator:
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_WarningMessage: "\nBinding warning: Some generic clip(s) animate transforms that
|
||||
are already bound by a Humanoid avatar. These transforms can only be changed
|
||||
by Humanoid clips.\n\tTransform 'Toes_R'\n\tTransform 'Toes_R'\n\tFrom animation
|
||||
clip 'A_Idle_Base_Sword'\n\tFrom animation clip 'A_Attack_LightCombo01A_Sword'"
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
@@ -287,6 +291,8 @@ MonoBehaviour:
|
||||
baseController: {fileID: 9100000, guid: db718381bb2992e469c76c64015e065b, type: 2}
|
||||
baseSkillClip: {fileID: -7717634560727564301, guid: 079bd00af1b92964d8973dcbf2dcd21f, type: 3}
|
||||
debugMode: 1
|
||||
showAreaDebug: 1
|
||||
debugDrawDuration: 1
|
||||
--- !u!114 &6585367215453362640
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -308,6 +314,22 @@ MonoBehaviour:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
skillController: {fileID: 6912018896034183004}
|
||||
networkController: {fileID: 0}
|
||||
--- !u!114 &1242716222252539497
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6473031571298860035}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7a766b6ab825c1445a3385079bb32cc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Abnormalities.AbnormalityManager
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
characterStats: {fileID: 0}
|
||||
networkController: {fileID: 0}
|
||||
--- !u!1001 &7705728874586931617
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -119,6 +119,41 @@ NavMeshSettings:
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &115810401
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 115810402}
|
||||
m_Layer: 5
|
||||
m_Name: QuickSlot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &115810402
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 115810401}
|
||||
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: 1162990049}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0}
|
||||
m_AnchorMax: {x: 0.5, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: -315}
|
||||
m_SizeDelta: {x: 800, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &260528172
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -214,6 +249,8 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1162990049}
|
||||
- {fileID: 7078605117837265129}
|
||||
- {fileID: 1269404371}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -229,6 +266,18 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1162990049}
|
||||
m_Modifications:
|
||||
- target: {fileID: 175175724983342716, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 175175724983342716, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 175175724983342716, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1384280946776679044, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -351,11 +400,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5400690622487782688, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5400690622487782688, guid: 99f359b6678b0064dbd20508482d6d64, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
@@ -378,6 +427,415 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: b5c5d0fa667f83d4399abb45ffcaea31, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.UI.StatBar
|
||||
--- !u!1001 &437791323
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 260528176}
|
||||
m_Modifications:
|
||||
- target: {fileID: 154243841272976527, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 154243841272976527, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 154243841272976527, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 154243841272976527, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 222507439395443271, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 586372648083603388, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: debugMode
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 957626152331407387, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 957626152331407387, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 957626152331407387, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 957626152331407387, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1272571897642577178, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1891729575772637703, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2357173840241603351, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2383653489108562105, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2414817517628536287, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2414817517628536287, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2414817517628536287, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2414817517628536287, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3299919758736932218, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3449630887236982659, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3605634177138740298, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3665211212153714218, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: UI_Bar
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4422562543140382942, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4759263938882641124, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5020688963902780252, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5020688963902780252, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5020688963902780252, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5020688963902780252, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5292514280569519775, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5292514280569519775, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5292514280569519775, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5292514280569519775, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5324836091554642937, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5386836880661972576, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5386836880661972576, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5815230577690829753, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6784599209343945149, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 1000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 160
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 40
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7290362850952805949, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7437893700502000836, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7657599853370186409, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7775305708725639431, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7895989214680908246, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7895989214680908246, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8225402012417639457, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8225402012417639457, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8225402012417639457, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8225402012417639457, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8468773744509512601, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8744015103177123418, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
--- !u!1001 &481770354
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -386,6 +844,18 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1162990049}
|
||||
m_Modifications:
|
||||
- target: {fileID: 175175724983342716, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 175175724983342716, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 175175724983342716, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1384280946776679044, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -488,11 +958,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5400690622487782688, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
value: 0.7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5400690622487782688, guid: d8795051068c4f84e84c227a6618e587, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects:
|
||||
@@ -652,6 +1122,68 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
--- !u!1 &972424299
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 972424300}
|
||||
- component: {fileID: 972424301}
|
||||
m_Layer: 5
|
||||
m_Name: Bad Abnormalities
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &972424300
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 972424299}
|
||||
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: 1269404371}
|
||||
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: 400, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &972424301
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 972424299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &998115954
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -795,7 +1327,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &1162990049
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -810,6 +1342,7 @@ RectTransform:
|
||||
m_Children:
|
||||
- {fileID: 281797460}
|
||||
- {fileID: 481770355}
|
||||
- {fileID: 115810402}
|
||||
m_Father: {fileID: 260528176}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@@ -858,6 +1391,88 @@ MonoBehaviour:
|
||||
useColorTransition: 0
|
||||
smoothTransition: 1
|
||||
lerpSpeed: 15
|
||||
--- !u!1 &1269404370
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1269404371}
|
||||
- component: {fileID: 1269404372}
|
||||
- component: {fileID: 1269404373}
|
||||
m_Layer: 5
|
||||
m_Name: Abnormalities
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1269404371
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1269404370}
|
||||
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: 1873670928}
|
||||
- {fileID: 972424300}
|
||||
m_Father: {fileID: 260528176}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0}
|
||||
m_AnchorMax: {x: 0.5, y: 0}
|
||||
m_AnchoredPosition: {x: -520, y: 120}
|
||||
m_SizeDelta: {x: 400, y: 200}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1269404372
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1269404370}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &1269404373
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1269404370}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 15447f4a4d271354fb52bbdf1a526c6e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
buffContainer: {fileID: 1873670928}
|
||||
debuffContainer: {fileID: 972424300}
|
||||
slotPrefab: {fileID: 5402880947663824673, guid: 60d898ecea82b6c429850e04d2e95b7c, type: 3}
|
||||
maxSlots: 10
|
||||
autoFindPlayer: 1
|
||||
--- !u!1 &1432187382
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1106,6 +1721,68 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1873670927
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1873670928}
|
||||
- component: {fileID: 1873670929}
|
||||
m_Layer: 5
|
||||
m_Name: Good Abnormalities
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1873670928
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1873670927}
|
||||
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: 1269404371}
|
||||
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: 400, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1873670929
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1873670927}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &2122318093
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1243,6 +1920,11 @@ MonoBehaviour:
|
||||
m_VarianceClampScale: 0.9
|
||||
m_ContrastAdaptiveSharpening: 0
|
||||
m_Version: 2
|
||||
--- !u!224 &7078605117837265129 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 7078605118272955058, guid: 54087b4bd46db9e4fb7da13cf7a6cc69, type: 3}
|
||||
m_PrefabInstance: {fileID: 437791323}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
8
Assets/Scripts/Abnormalities.meta
Normal file
8
Assets/Scripts/Abnormalities.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc6434195fb88a443939a5a0b2747f0a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
101
Assets/Scripts/Abnormalities/AbnormalityData.cs
Normal file
101
Assets/Scripts/Abnormalities/AbnormalityData.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Colosseum.Stats;
|
||||
|
||||
namespace Colosseum.Abnormalities
|
||||
{
|
||||
/// <summary>
|
||||
/// 제어 효과 타입
|
||||
/// </summary>
|
||||
public enum ControlType
|
||||
{
|
||||
None, // 제어 효과 없음
|
||||
Stun, // 기절 (이동, 스킬 사용 불가)
|
||||
Silence, // 침묵 (스킬 사용 불가)
|
||||
Slow // 둔화 (이동 속도 감소)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 스탯 수정자 엔트리
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class AbnormalityStatModifier
|
||||
{
|
||||
[Tooltip("수정할 스탯 타입")]
|
||||
public StatType statType;
|
||||
|
||||
[Tooltip("수정값")]
|
||||
public float value;
|
||||
|
||||
[Tooltip("수정 타입 (Flat: 고정값, PercentAdd: 퍼센트 합산, PercentMult: 퍼센트 곱셈)")]
|
||||
public StatModType modType;
|
||||
|
||||
public AbnormalityStatModifier() { }
|
||||
|
||||
public AbnormalityStatModifier(StatType statType, float value, StatModType modType)
|
||||
{
|
||||
this.statType = statType;
|
||||
this.value = value;
|
||||
this.modType = modType;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 정의 ScriptableObject
|
||||
/// 버프/디버프의 데이터를 정의합니다.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "AbnormalityData", menuName = "Colosseum/Abnormalities/Abnormality")]
|
||||
public class AbnormalityData : ScriptableObject
|
||||
{
|
||||
[Header("기본 정보")]
|
||||
[Tooltip("이상 상태 이름")]
|
||||
public string abnormalityName = "Abnormality";
|
||||
|
||||
[Tooltip("아이콘")]
|
||||
public Sprite icon;
|
||||
|
||||
[Tooltip("지속 시간 (초, 0 이하면 영구)")]
|
||||
public float duration = 5f;
|
||||
|
||||
[Tooltip("효과 레벨 (중복 처리용, 높으면 우선)")]
|
||||
public int level = 1;
|
||||
|
||||
[Tooltip("디버프 여부")]
|
||||
public bool isDebuff = false;
|
||||
|
||||
[Header("스탯 수정자")]
|
||||
[Tooltip("스탯에 적용할 수정자 목록")]
|
||||
public List<AbnormalityStatModifier> statModifiers = new List<AbnormalityStatModifier>();
|
||||
|
||||
[Header("주기적 효과 (DoT/HoT)")]
|
||||
[Tooltip("주기적 효과 간격 (초, 0이면 비활성)")]
|
||||
public float periodicInterval = 0f;
|
||||
|
||||
[Tooltip("주기적 효과값 (양수=힐, 음수=데미지)")]
|
||||
public float periodicValue = 0f;
|
||||
|
||||
[Header("제어 효과 (CC)")]
|
||||
[Tooltip("제어 효과 타입")]
|
||||
public ControlType controlType = ControlType.None;
|
||||
|
||||
[Tooltip("둔화 배율 (Slow일 때, 0.5 = 50% 감소)")]
|
||||
[Range(0f, 1f)]
|
||||
public float slowMultiplier = 0.5f;
|
||||
|
||||
/// <summary>
|
||||
/// 영구 효과인지 확인
|
||||
/// </summary>
|
||||
public bool IsPermanent => duration <= 0f;
|
||||
|
||||
/// <summary>
|
||||
/// 주기적 효과가 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasPeriodicEffect => periodicInterval > 0f && periodicValue != 0f;
|
||||
|
||||
/// <summary>
|
||||
/// 제어 효과가 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasControlEffect => controlType != ControlType.None;
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Abnormalities/AbnormalityData.cs.meta
Normal file
2
Assets/Scripts/Abnormalities/AbnormalityData.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b08cc671f858a3b409170a5356e960a0
|
||||
494
Assets/Scripts/Abnormalities/AbnormalityManager.cs
Normal file
494
Assets/Scripts/Abnormalities/AbnormalityManager.cs
Normal file
@@ -0,0 +1,494 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Unity.Netcode;
|
||||
using Colosseum.Stats;
|
||||
using Colosseum.Player;
|
||||
|
||||
namespace Colosseum.Abnormalities
|
||||
{
|
||||
/// <summary>
|
||||
/// 캐릭터에 부착되어 이상 상태를 관리하는 컴포넌트
|
||||
/// 버프/디버프의 적용, 제거, 주기적 효과를 처리합니다.
|
||||
/// </summary>
|
||||
public class AbnormalityManager : NetworkBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[Tooltip("CharacterStats 컴포넌트 (없으면 자동 검색)")]
|
||||
[SerializeField] private CharacterStats characterStats;
|
||||
|
||||
[Tooltip("PlayerNetworkController 컴포넌트 (HP/MP 관리용)")]
|
||||
[SerializeField] private PlayerNetworkController networkController;
|
||||
|
||||
// 활성화된 이상 상태 목록
|
||||
private readonly List<ActiveAbnormality> activeAbnormalities = new List<ActiveAbnormality>();
|
||||
|
||||
// 제어 효과 상태
|
||||
private int stunCount;
|
||||
private int silenceCount;
|
||||
private float slowMultiplier = 1f;
|
||||
|
||||
// 네트워크 동기화용 데이터
|
||||
private NetworkList<AbnormalitySyncData> syncedAbnormalities;
|
||||
|
||||
/// <summary>
|
||||
/// 기절 상태 여부
|
||||
/// </summary>
|
||||
public bool IsStunned => stunCount > 0;
|
||||
|
||||
/// <summary>
|
||||
/// 침묵 상태 여부
|
||||
/// </summary>
|
||||
public bool IsSilenced => silenceCount > 0;
|
||||
|
||||
/// <summary>
|
||||
/// 이동 속도 배율 (1.0 = 기본, 0.5 = 50% 감소)
|
||||
/// </summary>
|
||||
public float MoveSpeedMultiplier => slowMultiplier;
|
||||
|
||||
/// <summary>
|
||||
/// 행동 가능 여부 (기절이 아닐 때)
|
||||
/// </summary>
|
||||
public bool CanAct => !IsStunned;
|
||||
|
||||
/// <summary>
|
||||
/// 스킬 사용 가능 여부
|
||||
/// </summary>
|
||||
public bool CanUseSkills => !IsStunned && !IsSilenced;
|
||||
|
||||
/// <summary>
|
||||
/// 활성화된 이상 상태 목록 (읽기 전용)
|
||||
/// </summary>
|
||||
public IReadOnlyList<ActiveAbnormality> ActiveAbnormalities => activeAbnormalities;
|
||||
|
||||
// 이벤트
|
||||
public event Action<ActiveAbnormality> OnAbnormalityAdded;
|
||||
public event Action<ActiveAbnormality> OnAbnormalityRemoved;
|
||||
public event Action OnAbnormalitiesChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 네트워크 동기화용 이상 상태 데이터 구조체
|
||||
/// </summary>
|
||||
private struct AbnormalitySyncData : INetworkSerializable, IEquatable<AbnormalitySyncData>
|
||||
{
|
||||
public int AbnormalityId;
|
||||
public float RemainingDuration;
|
||||
public ulong SourceClientId;
|
||||
|
||||
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
|
||||
{
|
||||
serializer.SerializeValue(ref AbnormalityId);
|
||||
serializer.SerializeValue(ref RemainingDuration);
|
||||
serializer.SerializeValue(ref SourceClientId);
|
||||
}
|
||||
|
||||
public bool Equals(AbnormalitySyncData other)
|
||||
{
|
||||
return AbnormalityId == other.AbnormalityId;
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (characterStats == null)
|
||||
characterStats = GetComponent<CharacterStats>();
|
||||
|
||||
if (networkController == null)
|
||||
networkController = GetComponent<PlayerNetworkController>();
|
||||
|
||||
syncedAbnormalities = new NetworkList<AbnormalitySyncData>();
|
||||
}
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
syncedAbnormalities.OnListChanged += OnSyncedAbnormalitiesChanged;
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
syncedAbnormalities.OnListChanged -= OnSyncedAbnormalitiesChanged;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!IsServer) return;
|
||||
|
||||
UpdateAbnormalities(Time.deltaTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 적용
|
||||
/// </summary>
|
||||
/// <param name="data">적용할 이상 상태 데이터</param>
|
||||
/// <param name="source">효과 시전자</param>
|
||||
public void ApplyAbnormality(AbnormalityData data, GameObject source)
|
||||
{
|
||||
if (data == null)
|
||||
{
|
||||
Debug.LogWarning("[Abnormality] ApplyAbnormality called with null data");
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
ApplyAbnormalityInternal(data, source);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sourceNetId = source != null && source.TryGetComponent<NetworkObject>(out var netObj) ? netObj.NetworkObjectId : 0UL;
|
||||
ApplyAbnormalityServerRpc(data.GetInstanceID(), sourceNetId);
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
private void ApplyAbnormalityServerRpc(int dataId, ulong sourceNetworkId)
|
||||
{
|
||||
var data = FindAbnormalityDataById(dataId);
|
||||
if (data == null)
|
||||
{
|
||||
Debug.LogWarning($"[Abnormality] Could not find data with ID: {dataId}");
|
||||
return;
|
||||
}
|
||||
|
||||
GameObject source = null;
|
||||
if (sourceNetworkId != 0UL && NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(sourceNetworkId, out var netObj))
|
||||
{
|
||||
source = netObj.gameObject;
|
||||
}
|
||||
|
||||
ApplyAbnormalityInternal(data, source);
|
||||
}
|
||||
|
||||
private void ApplyAbnormalityInternal(AbnormalityData data, GameObject source)
|
||||
{
|
||||
var existing = FindExistingAbnormality(data);
|
||||
|
||||
if (existing != null)
|
||||
{
|
||||
if (existing.Data == data)
|
||||
{
|
||||
existing.RefreshDuration();
|
||||
UpdateSyncedAbnormalityDuration(existing);
|
||||
Debug.Log($"[Abnormality] Refreshed {data.abnormalityName} on {gameObject.name}");
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.level > existing.Data.level)
|
||||
{
|
||||
RemoveAbnormalityInternal(existing);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"[Abnormality] Ignored {data.abnormalityName} (level {data.level}) - existing level {existing.Data.level} is higher or equal");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var newAbnormality = new ActiveAbnormality(data, source);
|
||||
activeAbnormalities.Add(newAbnormality);
|
||||
|
||||
ApplyStatModifiers(newAbnormality);
|
||||
ApplyControlEffect(data);
|
||||
SyncAbnormalityAdd(newAbnormality, source);
|
||||
|
||||
OnAbnormalityAdded?.Invoke(newAbnormality);
|
||||
OnAbnormalitiesChanged?.Invoke();
|
||||
|
||||
Debug.Log($"[Abnormality] Applied {data.abnormalityName} (level {data.level}) to {gameObject.name} for {data.duration}s");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 제거
|
||||
/// </summary>
|
||||
/// <param name="data">제거할 이상 상태 데이터</param>
|
||||
public void RemoveAbnormality(AbnormalityData data)
|
||||
{
|
||||
if (data == null) return;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
var abnormality = FindExistingAbnormality(data);
|
||||
if (abnormality != null)
|
||||
{
|
||||
RemoveAbnormalityInternal(abnormality);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveAbnormalityServerRpc(data.GetInstanceID());
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
private void RemoveAbnormalityServerRpc(int dataId)
|
||||
{
|
||||
var abnormality = activeAbnormalities.Find(a => a.Data.GetInstanceID() == dataId);
|
||||
if (abnormality != null)
|
||||
{
|
||||
RemoveAbnormalityInternal(abnormality);
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveAbnormalityInternal(ActiveAbnormality abnormality)
|
||||
{
|
||||
RemoveStatModifiers(abnormality);
|
||||
RemoveControlEffect(abnormality.Data);
|
||||
SyncAbnormalityRemove(abnormality);
|
||||
activeAbnormalities.Remove(abnormality);
|
||||
|
||||
OnAbnormalityRemoved?.Invoke(abnormality);
|
||||
OnAbnormalitiesChanged?.Invoke();
|
||||
|
||||
Debug.Log($"[Abnormality] Removed {abnormality.Data.abnormalityName} from {gameObject.name}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 모든 이상 상태 제거
|
||||
/// </summary>
|
||||
public void RemoveAllAbnormalities()
|
||||
{
|
||||
if (!IsServer)
|
||||
{
|
||||
RemoveAllAbnormalitiesServerRpc();
|
||||
return;
|
||||
}
|
||||
|
||||
while (activeAbnormalities.Count > 0)
|
||||
{
|
||||
RemoveAbnormalityInternal(activeAbnormalities[0]);
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
private void RemoveAllAbnormalitiesServerRpc()
|
||||
{
|
||||
RemoveAllAbnormalities();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 특정 출처의 모든 이상 상태 제거
|
||||
/// </summary>
|
||||
public void RemoveAbnormalitiesFromSource(GameObject source)
|
||||
{
|
||||
if (!IsServer)
|
||||
{
|
||||
var sourceNetId = source != null && source.TryGetComponent<NetworkObject>(out var netObj) ? netObj.NetworkObjectId : 0UL;
|
||||
RemoveAbnormalitiesFromSourceServerRpc(sourceNetId);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = activeAbnormalities.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (activeAbnormalities[i].Source == source)
|
||||
{
|
||||
RemoveAbnormalityInternal(activeAbnormalities[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
private void RemoveAbnormalitiesFromSourceServerRpc(ulong sourceNetworkId)
|
||||
{
|
||||
for (int i = activeAbnormalities.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var abnormality = activeAbnormalities[i];
|
||||
var sourceNetId = abnormality.Source != null && abnormality.Source.TryGetComponent<NetworkObject>(out var netObj) ? netObj.NetworkObjectId : 0UL;
|
||||
if (sourceNetId == sourceNetworkId)
|
||||
{
|
||||
RemoveAbnormalityInternal(abnormality);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAbnormalities(float deltaTime)
|
||||
{
|
||||
for (int i = activeAbnormalities.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var abnormality = activeAbnormalities[i];
|
||||
|
||||
if (abnormality.CanTriggerPeriodic())
|
||||
{
|
||||
TriggerPeriodicEffect(abnormality);
|
||||
}
|
||||
|
||||
if (abnormality.Tick(deltaTime))
|
||||
{
|
||||
RemoveAbnormalityInternal(abnormality);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void TriggerPeriodicEffect(ActiveAbnormality abnormality)
|
||||
{
|
||||
if (networkController == null) return;
|
||||
|
||||
float value = abnormality.Data.periodicValue;
|
||||
|
||||
if (value > 0)
|
||||
{
|
||||
networkController.RestoreHealthRpc(value);
|
||||
Debug.Log($"[Abnormality] Periodic heal: +{value} HP from {abnormality.Data.abnormalityName}");
|
||||
}
|
||||
else if (value < 0)
|
||||
{
|
||||
networkController.TakeDamageRpc(-value);
|
||||
Debug.Log($"[Abnormality] Periodic damage: {-value} HP from {abnormality.Data.abnormalityName}");
|
||||
}
|
||||
}
|
||||
|
||||
private ActiveAbnormality FindExistingAbnormality(AbnormalityData data)
|
||||
{
|
||||
return activeAbnormalities.Find(a => a.Data.abnormalityName == data.abnormalityName);
|
||||
}
|
||||
|
||||
private void ApplyStatModifiers(ActiveAbnormality abnormality)
|
||||
{
|
||||
if (characterStats == null) return;
|
||||
|
||||
foreach (var entry in abnormality.Data.statModifiers)
|
||||
{
|
||||
var stat = characterStats.GetStat(entry.statType);
|
||||
if (stat != null)
|
||||
{
|
||||
var modifier = new StatModifier(entry.value, entry.modType, abnormality);
|
||||
abnormality.AppliedModifiers.Add(modifier);
|
||||
stat.AddModifier(modifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveStatModifiers(ActiveAbnormality abnormality)
|
||||
{
|
||||
if (characterStats == null) return;
|
||||
|
||||
foreach (StatType statType in Enum.GetValues(typeof(StatType)))
|
||||
{
|
||||
var stat = characterStats.GetStat(statType);
|
||||
stat?.RemoveAllModifiersFromSource(abnormality);
|
||||
}
|
||||
|
||||
abnormality.AppliedModifiers.Clear();
|
||||
}
|
||||
|
||||
private void ApplyControlEffect(AbnormalityData data)
|
||||
{
|
||||
switch (data.controlType)
|
||||
{
|
||||
case ControlType.Stun:
|
||||
stunCount++;
|
||||
break;
|
||||
|
||||
case ControlType.Silence:
|
||||
silenceCount++;
|
||||
break;
|
||||
|
||||
case ControlType.Slow:
|
||||
slowMultiplier = Mathf.Min(slowMultiplier, data.slowMultiplier);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveControlEffect(AbnormalityData data)
|
||||
{
|
||||
switch (data.controlType)
|
||||
{
|
||||
case ControlType.Stun:
|
||||
stunCount = Mathf.Max(0, stunCount - 1);
|
||||
break;
|
||||
|
||||
case ControlType.Silence:
|
||||
silenceCount = Mathf.Max(0, silenceCount - 1);
|
||||
break;
|
||||
|
||||
case ControlType.Slow:
|
||||
RecalculateSlowMultiplier();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void RecalculateSlowMultiplier()
|
||||
{
|
||||
slowMultiplier = 1f;
|
||||
|
||||
foreach (var abnormality in activeAbnormalities)
|
||||
{
|
||||
if (abnormality.Data.controlType == ControlType.Slow)
|
||||
{
|
||||
slowMultiplier = Mathf.Min(slowMultiplier, abnormality.Data.slowMultiplier);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SyncAbnormalityAdd(ActiveAbnormality abnormality, GameObject source)
|
||||
{
|
||||
var sourceClientId = source != null && source.TryGetComponent<NetworkObject>(out var netObj) ? netObj.OwnerClientId : 0UL;
|
||||
|
||||
var syncData = new AbnormalitySyncData
|
||||
{
|
||||
AbnormalityId = abnormality.Data.GetInstanceID(),
|
||||
RemainingDuration = abnormality.RemainingDuration,
|
||||
SourceClientId = sourceClientId
|
||||
};
|
||||
|
||||
syncedAbnormalities.Add(syncData);
|
||||
}
|
||||
|
||||
private void UpdateSyncedAbnormalityDuration(ActiveAbnormality abnormality)
|
||||
{
|
||||
for (int i = 0; i < syncedAbnormalities.Count; i++)
|
||||
{
|
||||
if (syncedAbnormalities[i].AbnormalityId == abnormality.Data.GetInstanceID())
|
||||
{
|
||||
var syncData = syncedAbnormalities[i];
|
||||
syncData.RemainingDuration = abnormality.RemainingDuration;
|
||||
syncedAbnormalities[i] = syncData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SyncAbnormalityRemove(ActiveAbnormality abnormality)
|
||||
{
|
||||
for (int i = 0; i < syncedAbnormalities.Count; i++)
|
||||
{
|
||||
if (syncedAbnormalities[i].AbnormalityId == abnormality.Data.GetInstanceID())
|
||||
{
|
||||
syncedAbnormalities.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSyncedAbnormalitiesChanged(NetworkListEvent<AbnormalitySyncData> changeEvent)
|
||||
{
|
||||
OnAbnormalitiesChanged?.Invoke();
|
||||
}
|
||||
|
||||
private AbnormalityData FindAbnormalityDataById(int instanceId)
|
||||
{
|
||||
var allData = Resources.FindObjectsOfTypeAll<AbnormalityData>();
|
||||
foreach (var data in allData)
|
||||
{
|
||||
if (data.GetInstanceID() == instanceId)
|
||||
return data;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 특정 이름의 이상 상태가 활성화되어 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasAbnormality(string name)
|
||||
{
|
||||
return activeAbnormalities.Exists(a => a.Data.abnormalityName == name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 특정 데이터의 이상 상태가 활성화되어 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasAbnormality(AbnormalityData data)
|
||||
{
|
||||
return activeAbnormalities.Exists(a => a.Data.abnormalityName == data.abnormalityName);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Abnormalities/AbnormalityManager.cs.meta
Normal file
2
Assets/Scripts/Abnormalities/AbnormalityManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a766b6ab825c1445a3385079bb32cc5
|
||||
134
Assets/Scripts/Abnormalities/ActiveAbnormality.cs
Normal file
134
Assets/Scripts/Abnormalities/ActiveAbnormality.cs
Normal file
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Colosseum.Stats;
|
||||
|
||||
namespace Colosseum.Abnormalities
|
||||
{
|
||||
/// <summary>
|
||||
/// 런타임 활성 이상 상태 인스턴스
|
||||
/// AbnormalityData의 인스턴스로, 실제 적용 중인 이상 상태를 관리합니다.
|
||||
/// </summary>
|
||||
public class ActiveAbnormality
|
||||
{
|
||||
/// <summary>
|
||||
/// 이상 상태 데이터
|
||||
/// </summary>
|
||||
public AbnormalityData Data { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 효과를 건 대상 (버프/디버프 시전자)
|
||||
/// </summary>
|
||||
public GameObject Source { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 남은 지속 시간
|
||||
/// </summary>
|
||||
public float RemainingDuration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 적용된 스탯 수정자 목록
|
||||
/// </summary>
|
||||
public List<StatModifier> AppliedModifiers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 주기적 효과 타이머
|
||||
/// </summary>
|
||||
public float PeriodicTimer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 고유 식별자 (네트워크 동기화용)
|
||||
/// </summary>
|
||||
public Guid Id { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 활성 이상 상태 생성
|
||||
/// </summary>
|
||||
/// <param name="data">이상 상태 데이터</param>
|
||||
/// <param name="source">효과 시전자</param>
|
||||
public ActiveAbnormality(AbnormalityData data, GameObject source)
|
||||
{
|
||||
Data = data;
|
||||
Source = source;
|
||||
RemainingDuration = data.duration;
|
||||
PeriodicTimer = 0f;
|
||||
Id = Guid.NewGuid();
|
||||
AppliedModifiers = new List<StatModifier>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지속 시간 갱신
|
||||
/// </summary>
|
||||
public void RefreshDuration()
|
||||
{
|
||||
RemainingDuration = Data.duration;
|
||||
PeriodicTimer = 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 시간 경과 처리
|
||||
/// </summary>
|
||||
/// <param name="deltaTime">경과 시간</param>
|
||||
/// <returns>효과가 만료되었으면 true</returns>
|
||||
public bool Tick(float deltaTime)
|
||||
{
|
||||
// 영구 효과는 시간 감소 없음
|
||||
if (Data.IsPermanent)
|
||||
return false;
|
||||
|
||||
RemainingDuration -= deltaTime;
|
||||
|
||||
// 주기적 효과 타이머 업데이트
|
||||
if (Data.HasPeriodicEffect)
|
||||
{
|
||||
PeriodicTimer += deltaTime;
|
||||
}
|
||||
|
||||
return RemainingDuration <= 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 주기적 효과 발동 가능 여부 확인
|
||||
/// </summary>
|
||||
/// <returns>발동 가능하면 true</returns>
|
||||
public bool CanTriggerPeriodic()
|
||||
{
|
||||
if (!Data.HasPeriodicEffect)
|
||||
return false;
|
||||
|
||||
if (PeriodicTimer >= Data.periodicInterval)
|
||||
{
|
||||
PeriodicTimer -= Data.periodicInterval;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 진행률 (0~1)
|
||||
/// </summary>
|
||||
public float Progress
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Data.IsPermanent)
|
||||
return 1f;
|
||||
return Mathf.Clamp01(1f - (RemainingDuration / Data.duration));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 남은 시간 비율 (1~0, UI 표시용)
|
||||
/// </summary>
|
||||
public float RemainingRatio
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Data.IsPermanent)
|
||||
return 1f;
|
||||
return Mathf.Clamp01(RemainingDuration / Data.duration);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Abnormalities/ActiveAbnormality.cs.meta
Normal file
2
Assets/Scripts/Abnormalities/ActiveAbnormality.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b90fb3ef8cb13be4383eb397857cfa2b
|
||||
46
Assets/Scripts/Skills/Effects/AbnormalityEffect.cs
Normal file
46
Assets/Scripts/Skills/Effects/AbnormalityEffect.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using UnityEngine;
|
||||
using Colosseum.Abnormalities;
|
||||
|
||||
namespace Colosseum.Skills.Effects
|
||||
{
|
||||
/// <summary>
|
||||
/// 이상 상태 효과
|
||||
/// AbnormalityManager를 통해 대상에게 이상 상태를 적용합니다.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "AbnormalityEffect", menuName = "Colosseum/Skills/Effects/Abnormality")]
|
||||
public class AbnormalityEffect : SkillEffect
|
||||
{
|
||||
[Header("Abnormality")]
|
||||
[Tooltip("적용할 이상 상태 데이터")]
|
||||
[SerializeField] private AbnormalityData abnormalityData;
|
||||
|
||||
protected override void ApplyEffect(GameObject caster, GameObject target)
|
||||
{
|
||||
if (target == null) return;
|
||||
|
||||
if (abnormalityData == null)
|
||||
{
|
||||
Debug.LogWarning($"[AbnormalityEffect] AbnormalityData is not assigned");
|
||||
return;
|
||||
}
|
||||
|
||||
var abnormalityManager = target.GetComponent<AbnormalityManager>();
|
||||
if (abnormalityManager == null)
|
||||
{
|
||||
Debug.LogWarning($"[AbnormalityEffect] Target {target.name} has no AbnormalityManager");
|
||||
return;
|
||||
}
|
||||
|
||||
abnormalityManager.ApplyAbnormality(abnormalityData, caster);
|
||||
Debug.Log($"[AbnormalityEffect] Applied {abnormalityData.abnormalityName} to {target.name} from {caster?.name ?? "unknown"}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 데이터 설정 (런타임용)
|
||||
/// </summary>
|
||||
public void SetAbnormalityData(AbnormalityData data)
|
||||
{
|
||||
abnormalityData = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Skills/Effects/AbnormalityEffect.cs.meta
Normal file
2
Assets/Scripts/Skills/Effects/AbnormalityEffect.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf750718c64c4bd48af905d2927351de
|
||||
@@ -1,32 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Colosseum.Skills.Effects
|
||||
{
|
||||
/// <summary>
|
||||
/// 버프/디버프 효과
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "BuffEffect", menuName = "Colosseum/Skills/Effects/Buff")]
|
||||
public class BuffEffect : SkillEffect
|
||||
{
|
||||
[Header("Buff Settings")]
|
||||
[SerializeField] private string buffName = "Buff";
|
||||
[Min(0f)] [SerializeField] private float duration = 5f;
|
||||
|
||||
[Header("Stat Modifiers")]
|
||||
[Range(0f, 10f)] [SerializeField] private float moveSpeedMultiplier = 1f;
|
||||
[Range(0f, 10f)] [SerializeField] private float attackPowerMultiplier = 1f;
|
||||
[Range(0f, 10f)] [SerializeField] private float defenseMultiplier = 1f;
|
||||
|
||||
protected override void ApplyEffect(GameObject caster, GameObject target)
|
||||
{
|
||||
if (target == null) return;
|
||||
|
||||
// TODO: 실제 버프 시스템 연동
|
||||
// var buffSystem = target.GetComponent<BuffSystem>();
|
||||
// buffSystem?.ApplyBuff(new BuffData(buffName, duration, moveSpeedMultiplier, attackPowerMultiplier, defenseMultiplier));
|
||||
|
||||
Debug.Log($"[Buff] {buffName} on {target.name} for {duration}s " +
|
||||
$"(Speed: {moveSpeedMultiplier}x, ATK: {attackPowerMultiplier}x, DEF: {defenseMultiplier}x)");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32bab3b586da0d7469f63e03f18ee29f
|
||||
@@ -154,7 +154,8 @@ namespace Colosseum.Skills
|
||||
overrideController[baseSkillClip] = clip;
|
||||
animator.runtimeAnimatorController = overrideController;
|
||||
|
||||
// 같은 상태라도 처음부터 재생되도록 강제 리셋
|
||||
// 애니메이터 완전 리셋 후 재생
|
||||
animator.Rebind();
|
||||
animator.Update(0f);
|
||||
animator.Play(SKILL_STATE_NAME, 0, 0f);
|
||||
}
|
||||
@@ -174,7 +175,8 @@ namespace Colosseum.Skills
|
||||
overrideController[baseSkillClip] = clip;
|
||||
animator.runtimeAnimatorController = overrideController;
|
||||
|
||||
// 같은 상태라도 처음부터 재생되도록 강제 리셋
|
||||
// 애니메이터 완전 리셋 후 재생
|
||||
animator.Rebind();
|
||||
animator.Update(0f);
|
||||
animator.Play(SKILL_STATE_NAME, 0, 0f);
|
||||
}
|
||||
|
||||
8
Assets/Scripts/StatusEffects.meta
Normal file
8
Assets/Scripts/StatusEffects.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 148d81d9974baed45b212857d96aed37
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
338
Assets/Scripts/UI/AbnormalityListUI.cs
Normal file
338
Assets/Scripts/UI/AbnormalityListUI.cs
Normal file
@@ -0,0 +1,338 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Colosseum.Abnormalities;
|
||||
|
||||
namespace Colosseum.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 이상 상태 목록 UI 관리자
|
||||
/// 버프/디버프 목록을 표시하고 관리합니다.
|
||||
/// </summary>
|
||||
public class AbnormalityListUI : MonoBehaviour
|
||||
{
|
||||
[Header("Containers")]
|
||||
[Tooltip("버프 컨테이너")]
|
||||
[SerializeField] private Transform buffContainer;
|
||||
|
||||
[Tooltip("디버프 컨테이너")]
|
||||
[SerializeField] private Transform debuffContainer;
|
||||
|
||||
[Header("Prefab")]
|
||||
[Tooltip("이상 상태 슬롯 프리팹")]
|
||||
[SerializeField] private AbnormalitySlotUI slotPrefab;
|
||||
|
||||
[Header("Settings")]
|
||||
[Tooltip("최대 표시 개수")]
|
||||
[SerializeField] private int maxSlots = 10;
|
||||
|
||||
[Tooltip("자동으로 플레이어 추적")]
|
||||
[SerializeField] private bool autoFindPlayer = true;
|
||||
|
||||
// 추적 중인 AbnormalityManager
|
||||
private AbnormalityManager targetManager;
|
||||
|
||||
// 생성된 슬롯 풀
|
||||
private readonly List<AbnormalitySlotUI> slotPool = new List<AbnormalitySlotUI>();
|
||||
|
||||
// 현재 활성화된 슬롯 목록
|
||||
private readonly List<AbnormalitySlotUI> activeSlots = new List<AbnormalitySlotUI>();
|
||||
|
||||
// 이전 프레임의 효과 수 (변경 감지용)
|
||||
private int lastAbnormalityCount = -1;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Debug.Log("[AbnormalityListUI] Start() called");
|
||||
|
||||
if (autoFindPlayer)
|
||||
{
|
||||
// 로컬 플레이어 찾기
|
||||
FindLocalPlayer();
|
||||
}
|
||||
|
||||
// 슬롯 풀 초기화
|
||||
InitializeSlotPool();
|
||||
|
||||
Debug.Log($"[AbnormalityListUI] slotPrefab: {(slotPrefab != null ? slotPrefab.name : "NULL")}");
|
||||
Debug.Log($"[AbnormalityListUI] buffContainer: {(buffContainer != null ? buffContainer.name : "NULL")}");
|
||||
Debug.Log($"[AbnormalityListUI] debuffContainer: {(debuffContainer != null ? debuffContainer.name : "NULL")}");
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
// 이벤트 구독 해제
|
||||
if (targetManager != null)
|
||||
{
|
||||
targetManager.OnAbnormalityAdded -= OnAbnormalityAdded;
|
||||
targetManager.OnAbnormalityRemoved -= OnAbnormalityRemoved;
|
||||
targetManager.OnAbnormalitiesChanged -= OnAbnormalitiesChanged;
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// 타겟이 없으면 주기적으로 플레이어 찾기
|
||||
if (targetManager == null && autoFindPlayer && Time.frameCount % 30 == 0)
|
||||
{
|
||||
FindLocalPlayer();
|
||||
}
|
||||
|
||||
// 주기적으로 UI 갱신 (성능 최적화를 위해 매 프레임이 아닌 일정 간격으로)
|
||||
if (Time.frameCount % 10 == 0) // 10프레임마다 한 번
|
||||
{
|
||||
RefreshUI();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 로컬 플레이어 찾기
|
||||
/// </summary>
|
||||
private void FindLocalPlayer()
|
||||
{
|
||||
var playerObjects = FindObjectsByType<AbnormalityManager>(FindObjectsSortMode.None);
|
||||
Debug.Log($"[AbnormalityListUI] Found {playerObjects.Length} AbnormalityManager(s)");
|
||||
|
||||
foreach (var manager in playerObjects)
|
||||
{
|
||||
// 네트워크 오브젝트인 경우 로컬 플레이어 확인
|
||||
if (manager.TryGetComponent<Unity.Netcode.NetworkObject>(out var netObj))
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] Checking {manager.gameObject.name}, IsOwner: {netObj.IsOwner}");
|
||||
if (netObj.IsOwner)
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] Setting target to local player: {manager.gameObject.name}");
|
||||
SetTarget(manager);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 네트워크 오브젝트가 없거나 로컬 플레이어를 찾지 못한 경우
|
||||
// 첫 번째 플레이어 사용 (싱글플레이어용)
|
||||
if (playerObjects.Length > 0)
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] No local player found, using first manager: {playerObjects[0].gameObject.name}");
|
||||
SetTarget(playerObjects[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[AbnormalityListUI] No AbnormalityManager found!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 추적 대상 설정
|
||||
/// </summary>
|
||||
/// <param name="manager">추적할 AbnormalityManager</param>
|
||||
public void SetTarget(AbnormalityManager manager)
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] SetTarget called with: {(manager != null ? manager.gameObject.name : "null")}");
|
||||
|
||||
// 기존 구독 해제
|
||||
if (targetManager != null)
|
||||
{
|
||||
targetManager.OnAbnormalityAdded -= OnAbnormalityAdded;
|
||||
targetManager.OnAbnormalityRemoved -= OnAbnormalityRemoved;
|
||||
targetManager.OnAbnormalitiesChanged -= OnAbnormalitiesChanged;
|
||||
}
|
||||
|
||||
targetManager = manager;
|
||||
|
||||
// 새로운 대상 구독
|
||||
if (targetManager != null)
|
||||
{
|
||||
targetManager.OnAbnormalityAdded += OnAbnormalityAdded;
|
||||
targetManager.OnAbnormalityRemoved += OnAbnormalityRemoved;
|
||||
targetManager.OnAbnormalitiesChanged += OnAbnormalitiesChanged;
|
||||
Debug.Log("[AbnormalityListUI] Events subscribed successfully");
|
||||
}
|
||||
|
||||
// 즉시 UI 갱신
|
||||
ForceRefreshUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 슬롯 풀 초기화
|
||||
/// </summary>
|
||||
private void InitializeSlotPool()
|
||||
{
|
||||
if (slotPrefab == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalityListUI] Slot prefab is not assigned");
|
||||
return;
|
||||
}
|
||||
|
||||
// 필요한 만큼 슬롯 미리 생성
|
||||
for (int i = 0; i < maxSlots; i++)
|
||||
{
|
||||
var slot = CreateSlot();
|
||||
slot.gameObject.SetActive(false);
|
||||
slotPool.Add(slot);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 새 슬롯 생성
|
||||
/// </summary>
|
||||
private AbnormalitySlotUI CreateSlot()
|
||||
{
|
||||
var go = Instantiate(slotPrefab.gameObject, transform);
|
||||
return go.GetComponent<AbnormalitySlotUI>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 슬롯 가져오기 (풀에서 또는 새로 생성)
|
||||
/// </summary>
|
||||
private AbnormalitySlotUI GetSlot()
|
||||
{
|
||||
// 풀에서 비활성화된 슬롯 찾기
|
||||
foreach (var slot in slotPool)
|
||||
{
|
||||
if (!slot.gameObject.activeSelf)
|
||||
{
|
||||
return slot;
|
||||
}
|
||||
}
|
||||
|
||||
// 풀에 없으면 새로 생성
|
||||
if (slotPool.Count < maxSlots)
|
||||
{
|
||||
var newSlot = CreateSlot();
|
||||
slotPool.Add(newSlot);
|
||||
return newSlot;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 슬롯 반환 (비활성화)
|
||||
/// </summary>
|
||||
private void ReturnSlot(AbnormalitySlotUI slot)
|
||||
{
|
||||
slot.gameObject.SetActive(false);
|
||||
activeSlots.Remove(slot);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 추가 시 호출
|
||||
/// </summary>
|
||||
private void OnAbnormalityAdded(ActiveAbnormality abnormality)
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] OnAbnormalityAdded event received: {abnormality.Data.abnormalityName}");
|
||||
ForceRefreshUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 제거 시 호출
|
||||
/// </summary>
|
||||
private void OnAbnormalityRemoved(ActiveAbnormality abnormality)
|
||||
{
|
||||
Debug.Log($"[AbnormalityListUI] OnAbnormalityRemoved event received: {abnormality.Data.abnormalityName}");
|
||||
ForceRefreshUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이상 상태 변경 시 호출
|
||||
/// </summary>
|
||||
private void OnAbnormalitiesChanged()
|
||||
{
|
||||
Debug.Log("[AbnormalityListUI] OnAbnormalitiesChanged event received");
|
||||
ForceRefreshUI();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UI 강제 갱신
|
||||
/// </summary>
|
||||
public void ForceRefreshUI()
|
||||
{
|
||||
if (targetManager == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalityListUI] ForceRefreshUI called but targetManager is null");
|
||||
return;
|
||||
}
|
||||
|
||||
// 모든 슬롯 반환
|
||||
foreach (var slot in activeSlots.ToArray())
|
||||
{
|
||||
ReturnSlot(slot);
|
||||
}
|
||||
|
||||
activeSlots.Clear();
|
||||
|
||||
// 활성화된 이상 상태 표시
|
||||
var abnormalities = targetManager.ActiveAbnormalities;
|
||||
Debug.Log($"[AbnormalityListUI] ForceRefreshUI: {abnormalities.Count} abnormalities found");
|
||||
|
||||
foreach (var abnormality in abnormalities)
|
||||
{
|
||||
var slot = GetSlot();
|
||||
if (slot == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalityListUI] Could not get slot from pool");
|
||||
continue;
|
||||
}
|
||||
|
||||
// 버프/디버프에 따라 적절한 컨테이너에 배치
|
||||
Transform container = abnormality.Data.isDebuff ? debuffContainer : buffContainer;
|
||||
if (container == null) container = transform;
|
||||
|
||||
Debug.Log($"[AbnormalityListUI] Adding slot for: {abnormality.Data.abnormalityName}, isDebuff: {abnormality.Data.isDebuff}, container: {container.name}");
|
||||
|
||||
slot.transform.SetParent(container, false);
|
||||
slot.Initialize(abnormality);
|
||||
slot.gameObject.SetActive(true);
|
||||
activeSlots.Add(slot);
|
||||
}
|
||||
|
||||
lastAbnormalityCount = abnormalities.Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UI 주기적 갱신 (변경 감지 시에만)
|
||||
/// </summary>
|
||||
private void RefreshUI()
|
||||
{
|
||||
if (targetManager == null) return;
|
||||
|
||||
int currentCount = targetManager.ActiveAbnormalities.Count;
|
||||
|
||||
// 이상 상태 수가 변경되었으면 갱신
|
||||
if (currentCount != lastAbnormalityCount)
|
||||
{
|
||||
ForceRefreshUI();
|
||||
}
|
||||
|
||||
// 활성 슬롯들의 지속 시간 업데이트
|
||||
UpdateSlotDurations();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 모든 활성 슬롯의 지속 시간 업데이트
|
||||
/// </summary>
|
||||
private void UpdateSlotDurations()
|
||||
{
|
||||
foreach (var slot in activeSlots)
|
||||
{
|
||||
if (slot != null && slot.TrackedAbnormality != null)
|
||||
{
|
||||
var abnormality = slot.TrackedAbnormality;
|
||||
slot.UpdateDisplay(abnormality.RemainingDuration, abnormality.Data.duration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 모든 슬롯 숨기기
|
||||
/// </summary>
|
||||
public void HideAll()
|
||||
{
|
||||
foreach (var slot in activeSlots.ToArray())
|
||||
{
|
||||
ReturnSlot(slot);
|
||||
}
|
||||
|
||||
activeSlots.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/AbnormalityListUI.cs.meta
Normal file
2
Assets/Scripts/UI/AbnormalityListUI.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15447f4a4d271354fb52bbdf1a526c6e
|
||||
152
Assets/Scripts/UI/AbnormalitySlotUI.cs
Normal file
152
Assets/Scripts/UI/AbnormalitySlotUI.cs
Normal file
@@ -0,0 +1,152 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using Colosseum.Abnormalities;
|
||||
|
||||
namespace Colosseum.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 개별 이상 상태 UI 슬롯
|
||||
/// 버프/디버프 아이콘, 지속 시간 등을 표시합니다.
|
||||
/// </summary>
|
||||
public class AbnormalitySlotUI : MonoBehaviour
|
||||
{
|
||||
[Header("UI References")]
|
||||
[Tooltip("이상 상태 아이콘")]
|
||||
[SerializeField] private Image iconImage;
|
||||
|
||||
[Tooltip("지속 시간 채우기 이미지 (시계 방향)")]
|
||||
[SerializeField] private Image durationFill;
|
||||
|
||||
[Tooltip("남은 시간 텍스트")]
|
||||
[SerializeField] private TMP_Text durationText;
|
||||
|
||||
[Tooltip("효과 이름 텍스트")]
|
||||
[SerializeField] private TMP_Text effectNameText;
|
||||
|
||||
[Tooltip("배경 이미지 (버프/디버프 구분용)")]
|
||||
[SerializeField] private Image backgroundImage;
|
||||
|
||||
[Header("Colors")]
|
||||
[Tooltip("버프 배경 색상")]
|
||||
[SerializeField] private Color buffColor = new Color(0.2f, 0.6f, 0.2f, 0.8f);
|
||||
|
||||
[Tooltip("디버프 배경 색상")]
|
||||
[SerializeField] private Color debuffColor = new Color(0.6f, 0.2f, 0.2f, 0.8f);
|
||||
|
||||
private ActiveAbnormality trackedAbnormality;
|
||||
|
||||
/// <summary>
|
||||
/// 추적 중인 활성 이상 상태
|
||||
/// </summary>
|
||||
public ActiveAbnormality TrackedAbnormality => trackedAbnormality;
|
||||
|
||||
/// <summary>
|
||||
/// UI 초기화
|
||||
/// </summary>
|
||||
/// <param name="abnormality">표시할 활성 이상 상태</param>
|
||||
public void Initialize(ActiveAbnormality abnormality)
|
||||
{
|
||||
trackedAbnormality = abnormality;
|
||||
|
||||
if (abnormality?.Data == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalitySlotUI] Initialize called with null abnormality or data");
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"[AbnormalitySlotUI] Initialize: {abnormality.Data.abnormalityName}, icon: {abnormality.Data.icon?.name ?? "null"}");
|
||||
Debug.Log($"[AbnormalitySlotUI] UI References - iconImage: {(iconImage != null ? "OK" : "NULL")}, durationFill: {(durationFill != null ? "OK" : "NULL")}, durationText: {(durationText != null ? "OK" : "NULL")}, backgroundImage: {(backgroundImage != null ? "OK" : "NULL")}");
|
||||
|
||||
// Cooltime 요소 활성화 (부모 게임오브젝트들이 비활성화되어 있을 수 있음)
|
||||
EnableDurationElements();
|
||||
|
||||
// 아이콘 설정
|
||||
if (iconImage != null)
|
||||
{
|
||||
iconImage.sprite = abnormality.Data.icon;
|
||||
iconImage.enabled = abnormality.Data.icon != null;
|
||||
}
|
||||
|
||||
// 이름 설정
|
||||
if (effectNameText != null)
|
||||
{
|
||||
effectNameText.text = abnormality.Data.abnormalityName;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[AbnormalitySlotUI] effectNameText is null");
|
||||
}
|
||||
|
||||
// 배경 색상 설정 (버프/디버프 구분)
|
||||
if (backgroundImage != null)
|
||||
{
|
||||
backgroundImage.color = abnormality.Data.isDebuff ? debuffColor : buffColor;
|
||||
}
|
||||
|
||||
// 초기 상태 업데이트
|
||||
UpdateDisplay(abnormality.RemainingDuration, abnormality.Data.duration);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UI 표시 업데이트
|
||||
/// </summary>
|
||||
/// <param name="remainingDuration">남은 지속 시간</param>
|
||||
/// <param name="totalDuration">전체 지속 시간</param>
|
||||
public void UpdateDisplay(float remainingDuration, float totalDuration)
|
||||
{
|
||||
// 지속 시간 채우기 이미지 업데이트 (시간이 지날수록 채워짐)
|
||||
if (durationFill != null && totalDuration > 0)
|
||||
{
|
||||
durationFill.fillAmount = 1f - (remainingDuration / totalDuration);
|
||||
}
|
||||
|
||||
// 남은 시간 텍스트 업데이트 (정수만 표시)
|
||||
if (durationText != null)
|
||||
{
|
||||
if (remainingDuration > 60f)
|
||||
{
|
||||
durationText.text = $"{(int)(remainingDuration / 60f)}:{(int)(remainingDuration % 60f):D2}";
|
||||
}
|
||||
else if (remainingDuration > 0f)
|
||||
{
|
||||
durationText.text = $"{Mathf.CeilToInt(remainingDuration)}";
|
||||
}
|
||||
else
|
||||
{
|
||||
durationText.text = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지속 시간 관련 UI 요소들의 부모 게임오브젝트를 활성화합니다.
|
||||
/// </summary>
|
||||
private void EnableDurationElements()
|
||||
{
|
||||
// durationFill의 모든 부모 게임오브젝트 활성화
|
||||
if (durationFill != null)
|
||||
{
|
||||
Transform parent = durationFill.transform.parent;
|
||||
while (parent != null && parent != transform)
|
||||
{
|
||||
parent.gameObject.SetActive(true);
|
||||
parent = parent.parent;
|
||||
}
|
||||
}
|
||||
|
||||
// durationText의 모든 부모 게임오브젝트 활성화
|
||||
if (durationText != null)
|
||||
{
|
||||
Transform parent = durationText.transform.parent;
|
||||
while (parent != null && parent != transform)
|
||||
{
|
||||
parent.gameObject.SetActive(true);
|
||||
parent = parent.parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/AbnormalitySlotUI.cs.meta
Normal file
2
Assets/Scripts/UI/AbnormalitySlotUI.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 287a45a81e69cbf48845f88759cf7eb4
|
||||
116
Assets/Scripts/UI/AbnormalitySystemTest.cs
Normal file
116
Assets/Scripts/UI/AbnormalitySystemTest.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using UnityEngine;
|
||||
using Colosseum.Abnormalities;
|
||||
|
||||
namespace Colosseum.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 이상 상태 시스템 테스트 스크립트
|
||||
/// Q 키: 버프 적용, E 키: 디버프 적용
|
||||
/// 로그를 통해 OnEffect 이벤트 호출 및 이상 상태 적용 과정을 추적합니다.
|
||||
/// </summary>
|
||||
public class AbnormalitySystemTest : MonoBehaviour
|
||||
{
|
||||
private AbnormalityManager abnormalityManager;
|
||||
private AbnormalityData testBuff;
|
||||
private AbnormalityData testDebuff;
|
||||
|
||||
private float testTimer;
|
||||
|
||||
void Start()
|
||||
{
|
||||
// 플레이어에서 AbnormalityManager 찾기
|
||||
abnormalityManager = GetComponent<AbnormalityManager>();
|
||||
if (abnormalityManager == null)
|
||||
{
|
||||
Debug.LogError("[AbnormalitySystemTest] AbnormalityManager not found on player!");
|
||||
return;
|
||||
}
|
||||
|
||||
// 테스트용 이상 상태 데이터 생성 (에셋 생성)
|
||||
testBuff = ScriptableObject.CreateInstance<AbnormalityData>();
|
||||
testBuff.abnormalityName = "Test Buff";
|
||||
testBuff.duration = 5f;
|
||||
testBuff.isDebuff = false;
|
||||
|
||||
testDebuff = ScriptableObject.CreateInstance<AbnormalityData>();
|
||||
testDebuff.abnormalityName = "Test Debuff";
|
||||
testDebuff.duration = 5f;
|
||||
testDebuff.isDebuff = true;
|
||||
|
||||
// 이벤트 구독
|
||||
abnormalityManager.OnAbnormalityAdded += OnAbnormalityAdded;
|
||||
abnormalityManager.OnAbnormalityRemoved += OnAbnormalityRemoved;
|
||||
|
||||
Debug.Log("=== Abnormality System Test Started ===");
|
||||
Debug.Log("Press Q to apply buff, Press E to apply debuff");
|
||||
Debug.Log($"Initial Active Abnormalities Count: {abnormalityManager.ActiveAbnormalities.Count}");
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
testTimer += Time.deltaTime;
|
||||
|
||||
// Q 키로 버프 적용 (3초마다 1회만)
|
||||
if (Input.GetKeyDown(KeyCode.Q) && testTimer >= 3f)
|
||||
{
|
||||
testTimer = 0f;
|
||||
ApplyTestBuff();
|
||||
}
|
||||
|
||||
// E 키로 디버프 적용 (3초마다 1회만)
|
||||
if (Input.GetKeyDown(KeyCode.E) && testTimer >= 3f)
|
||||
{
|
||||
testTimer = 0f;
|
||||
ApplyTestDebuff();
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyTestBuff()
|
||||
{
|
||||
if (testBuff == null || abnormalityManager == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalitySystemTest] Cannot apply buff - data or manager is null");
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"[AbnormalitySystemTest] >>> Applying BUFF: {testBuff.abnormalityName} to {gameObject.name}");
|
||||
abnormalityManager.ApplyAbnormality(testBuff, gameObject);
|
||||
}
|
||||
|
||||
private void ApplyTestDebuff()
|
||||
{
|
||||
if (testDebuff == null || abnormalityManager == null)
|
||||
{
|
||||
Debug.LogWarning("[AbnormalitySystemTest] Cannot apply debuff - data or manager is null");
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log($"[AbnormalitySystemTest] >>> Applying DEBUFF: {testDebuff.abnormalityName} to {gameObject.name}");
|
||||
abnormalityManager.ApplyAbnormality(testDebuff, gameObject);
|
||||
}
|
||||
|
||||
private void OnAbnormalityAdded(ActiveAbnormality abnormality)
|
||||
{
|
||||
Debug.Log($"[AbnormalitySystemTest] <<< ABNORMALITY ADDED: {abnormality.Data.abnormalityName} | isDebuff: {abnormality.Data.isDebuff} | Duration: {abnormality.Data.duration}s | Remaining: {abnormality.RemainingDuration:F1}s");
|
||||
}
|
||||
|
||||
private void OnAbnormalityRemoved(ActiveAbnormality abnormality)
|
||||
{
|
||||
Debug.Log($"[AbnormalitySystemTest] <<< ABNORMALITY REMOVED: {abnormality.Data.abnormalityName}");
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
// 이벤트 구독 해제
|
||||
if (abnormalityManager != null)
|
||||
{
|
||||
abnormalityManager.OnAbnormalityAdded -= OnAbnormalityAdded;
|
||||
abnormalityManager.OnAbnormalityRemoved -= OnAbnormalityRemoved;
|
||||
}
|
||||
|
||||
// 정리
|
||||
if (testBuff != null) Destroy(testBuff);
|
||||
if (testDebuff != null) Destroy(testDebuff);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/AbnormalitySystemTest.cs.meta
Normal file
2
Assets/Scripts/UI/AbnormalitySystemTest.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a1b2c3d4e5f6a7b8c9a0d1e5e3
|
||||
142
Assets/Scripts/UI/SkillQuickSlotUI.cs
Normal file
142
Assets/Scripts/UI/SkillQuickSlotUI.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using UnityEngine;
|
||||
using Colosseum.Player;
|
||||
using Colosseum.Skills;
|
||||
|
||||
namespace Colosseum.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 스킬 퀵슬롯 UI 관리자.
|
||||
/// PlayerSkillInput과 연동하여 쿨타임, 마나 등을 표시합니다.
|
||||
/// </summary>
|
||||
public class SkillQuickSlotUI : MonoBehaviour
|
||||
{
|
||||
[Header("Skill Slots")]
|
||||
[Tooltip("6개의 스킬 슬롯 UI (인덱스 순서대로)")]
|
||||
[SerializeField] private SkillSlotUI[] skillSlots = new SkillSlotUI[6];
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool debugMode = false;
|
||||
|
||||
[Header("Keybind Labels")]
|
||||
[Tooltip("키바인딩 표시 텍스트 (기본: Q, W, E, R, A, S)")]
|
||||
[SerializeField] private string[] keyLabels = { "Q", "W", "E", "R", "A", "S" };
|
||||
|
||||
private PlayerSkillInput playerSkillInput;
|
||||
private PlayerNetworkController networkController;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// 로컬 플레이어 찾기
|
||||
FindLocalPlayer();
|
||||
}
|
||||
|
||||
private void FindLocalPlayer()
|
||||
{
|
||||
var players = FindObjectsByType<PlayerSkillInput>(FindObjectsSortMode.None);
|
||||
|
||||
if (players.Length == 0)
|
||||
{
|
||||
Debug.LogWarning("[SkillQuickSlotUI] No PlayerSkillInput found in scene");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var player in players)
|
||||
{
|
||||
if (player.IsOwner)
|
||||
{
|
||||
playerSkillInput = player;
|
||||
networkController = player.GetComponent<PlayerNetworkController>();
|
||||
Debug.Log($"[SkillQuickSlotUI] Found local player: {player.name}");
|
||||
InitializeSlots();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Debug.LogWarning("[SkillQuickSlotUI] No local player found (IsOwner = false)");
|
||||
}
|
||||
|
||||
private void InitializeSlots()
|
||||
{
|
||||
if (playerSkillInput == null) return;
|
||||
|
||||
int initializedCount = 0;
|
||||
for (int i = 0; i < skillSlots.Length && i < keyLabels.Length; i++)
|
||||
{
|
||||
SkillData skill = playerSkillInput.GetSkill(i);
|
||||
string keyLabel = i < keyLabels.Length ? keyLabels[i] : (i + 1).ToString();
|
||||
|
||||
if (skillSlots[i] != null)
|
||||
{
|
||||
skillSlots[i].Initialize(i, skill, keyLabel);
|
||||
if (skill != null) initializedCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"[SkillQuickSlotUI] Slot {i} is not assigned");
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log($"[SkillQuickSlotUI] Initialized {initializedCount} skill slots");
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (playerSkillInput == null)
|
||||
{
|
||||
// 플레이어가 아직 없으면 다시 찾기 시도
|
||||
FindLocalPlayer();
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateSlotStates();
|
||||
}
|
||||
|
||||
private float debugLogTimer = 0f;
|
||||
|
||||
private void UpdateSlotStates()
|
||||
{
|
||||
bool shouldLog = debugMode && Time.time > debugLogTimer;
|
||||
if (shouldLog) debugLogTimer = Time.time + 1f;
|
||||
|
||||
for (int i = 0; i < skillSlots.Length; i++)
|
||||
{
|
||||
if (skillSlots[i] == null) continue;
|
||||
|
||||
SkillData skill = playerSkillInput.GetSkill(i);
|
||||
if (skill == null) continue;
|
||||
|
||||
float remainingCooldown = playerSkillInput.GetRemainingCooldown(i);
|
||||
float totalCooldown = skill.Cooldown;
|
||||
bool hasEnoughMana = networkController == null || networkController.Mana >= skill.ManaCost;
|
||||
|
||||
if (shouldLog && remainingCooldown > 0f)
|
||||
{
|
||||
Debug.Log($"[SkillQuickSlotUI] Slot {i}: {skill.SkillName}, CD: {remainingCooldown:F1}/{totalCooldown:F1}");
|
||||
}
|
||||
|
||||
skillSlots[i].UpdateState(remainingCooldown, totalCooldown, hasEnoughMana);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 플레이어 참조 수동 설정 (씬 전환 등에서 사용)
|
||||
/// </summary>
|
||||
public void SetPlayer(PlayerSkillInput player)
|
||||
{
|
||||
playerSkillInput = player;
|
||||
networkController = player?.GetComponent<PlayerNetworkController>();
|
||||
InitializeSlots();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 특정 슬롯의 스킬 변경
|
||||
/// </summary>
|
||||
public void UpdateSkillSlot(int slotIndex, SkillData skill)
|
||||
{
|
||||
if (slotIndex < 0 || slotIndex >= skillSlots.Length) return;
|
||||
|
||||
string keyLabel = slotIndex < keyLabels.Length ? keyLabels[slotIndex] : (slotIndex + 1).ToString();
|
||||
skillSlots[slotIndex].Initialize(slotIndex, skill, keyLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/SkillQuickSlotUI.cs.meta
Normal file
2
Assets/Scripts/UI/SkillQuickSlotUI.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 637160b507db7634aba029b1624bc4a5
|
||||
175
Assets/Scripts/UI/SkillSlotUI.cs
Normal file
175
Assets/Scripts/UI/SkillSlotUI.cs
Normal file
@@ -0,0 +1,175 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using Colosseum.Skills;
|
||||
|
||||
namespace Colosseum.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 개별 스킬 슬롯 UI
|
||||
/// </summary>
|
||||
public class SkillSlotUI : MonoBehaviour
|
||||
{
|
||||
[Header("References")]
|
||||
[SerializeField] private Image iconImage;
|
||||
[SerializeField] private Image cooldownOverlay;
|
||||
[SerializeField] private TMP_Text cooldownText;
|
||||
[SerializeField] private TMP_Text keybindText;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private Color availableColor = Color.white;
|
||||
[SerializeField] private Color cooldownColor = new Color(0.2f, 0.2f, 0.2f, 0.9f);
|
||||
[SerializeField] private Color noManaColor = new Color(0.5f, 0.2f, 0.2f, 0.8f);
|
||||
|
||||
private SkillData skill;
|
||||
private int slotIndex;
|
||||
private bool useIconForCooldown = false;
|
||||
private Animator cooldownAnimator; // 쿨다운 오버레이를 제어하는 Animator
|
||||
private GameObject cooldownContainer; // 쿨다운 오버레이의 부모 GameObject (Cooldown)
|
||||
|
||||
public int SlotIndex => slotIndex;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (cooldownOverlay == null)
|
||||
{
|
||||
useIconForCooldown = true;
|
||||
}
|
||||
else if (cooldownOverlay.type != Image.Type.Filled)
|
||||
{
|
||||
useIconForCooldown = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 쿨다운 오버레이의 상위 GameObject에 있는 Animator 찾기
|
||||
// 구조: CooldownItem (Animator) -> Cooldown -> SPR_Cooldown (Image)
|
||||
cooldownAnimator = cooldownOverlay.GetComponentInParent<Animator>();
|
||||
|
||||
// Animator가 Cooldown GameObject를 제어하므로
|
||||
// 쿨다운 표시를 위해 Animator를 비활성화하고 수동으로 제어
|
||||
if (cooldownAnimator != null)
|
||||
{
|
||||
cooldownAnimator.enabled = false;
|
||||
|
||||
// Animator가 제어하던 Cooldown GameObject 찾기
|
||||
// SPR_Cooldown의 부모가 Cooldown
|
||||
cooldownContainer = cooldownOverlay.transform.parent?.gameObject;
|
||||
}
|
||||
|
||||
// 쿨다운 오버레이 초기화
|
||||
cooldownOverlay.fillAmount = 0f;
|
||||
cooldownOverlay.enabled = false;
|
||||
|
||||
// Cooldown 컨테이너 비활성화
|
||||
if (cooldownContainer != null)
|
||||
{
|
||||
cooldownContainer.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Initialize(int index, SkillData skillData, string keyLabel)
|
||||
{
|
||||
slotIndex = index;
|
||||
skill = skillData;
|
||||
|
||||
if (keybindText != null)
|
||||
keybindText.text = keyLabel;
|
||||
|
||||
if (skill != null && iconImage != null)
|
||||
{
|
||||
iconImage.sprite = skill.Icon;
|
||||
iconImage.enabled = true;
|
||||
iconImage.color = availableColor;
|
||||
}
|
||||
else if (iconImage != null)
|
||||
{
|
||||
iconImage.enabled = false;
|
||||
}
|
||||
|
||||
Debug.Log($"[SkillSlotUI] Init slot {index}: skill={skillData?.SkillName}, useIcon={useIconForCooldown}");
|
||||
}
|
||||
|
||||
public void UpdateState(float cooldownRemaining, float cooldownTotal, bool hasEnoughMana)
|
||||
{
|
||||
if (skill == null)
|
||||
{
|
||||
if (cooldownContainer != null) cooldownContainer.SetActive(false);
|
||||
if (cooldownOverlay != null) cooldownOverlay.enabled = false;
|
||||
if (cooldownText != null) cooldownText.text = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (cooldownRemaining > 0f)
|
||||
{
|
||||
float ratio = cooldownRemaining / cooldownTotal;
|
||||
|
||||
if (useIconForCooldown && iconImage != null)
|
||||
{
|
||||
// 아이콘 색상으로 쿨다운 표시
|
||||
float brightness = Mathf.Lerp(0.3f, 1f, 1f - ratio);
|
||||
iconImage.color = new Color(brightness, brightness, brightness, 1f);
|
||||
}
|
||||
else if (cooldownOverlay != null)
|
||||
{
|
||||
// Cooldown 컨테이너 활성화
|
||||
if (cooldownContainer != null && !cooldownContainer.activeSelf)
|
||||
{
|
||||
cooldownContainer.SetActive(true);
|
||||
}
|
||||
|
||||
// Image 컴포넌트 활성화
|
||||
cooldownOverlay.enabled = true;
|
||||
cooldownOverlay.fillAmount = ratio;
|
||||
}
|
||||
|
||||
if (cooldownText != null)
|
||||
{
|
||||
cooldownText.text = cooldownRemaining < 1f
|
||||
? $"{cooldownRemaining:F1}"
|
||||
: $"{Mathf.CeilToInt(cooldownRemaining)}";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 쿨다운 완료
|
||||
if (useIconForCooldown && iconImage != null)
|
||||
{
|
||||
iconImage.color = hasEnoughMana ? availableColor : noManaColor;
|
||||
}
|
||||
else if (cooldownOverlay != null)
|
||||
{
|
||||
// Image 컴포넌트 비활성화
|
||||
cooldownOverlay.enabled = false;
|
||||
|
||||
// Cooldown 컨테이너 비활성화
|
||||
if (cooldownContainer != null)
|
||||
{
|
||||
cooldownContainer.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (cooldownText != null)
|
||||
{
|
||||
cooldownText.text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetSkill(SkillData skillData)
|
||||
{
|
||||
skill = skillData;
|
||||
|
||||
if (skill != null && iconImage != null)
|
||||
{
|
||||
iconImage.sprite = skill.Icon;
|
||||
iconImage.enabled = true;
|
||||
iconImage.color = availableColor;
|
||||
}
|
||||
else if (iconImage != null)
|
||||
{
|
||||
iconImage.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/SkillSlotUI.cs.meta
Normal file
2
Assets/Scripts/UI/SkillSlotUI.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bad7358e0082af244b16b0a515710fbc
|
||||
@@ -14,11 +14,11 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData
|
||||
skillName: "\uAD6C\uB974\uAE30"
|
||||
description:
|
||||
icon: {fileID: 0}
|
||||
icon: {fileID: 21300000, guid: 2b3889a2bb9beb444adf6734821e1c02, type: 3}
|
||||
skillClip: {fileID: -14460799136228694, guid: d6d51384d6dd17a419c1d8e2a1c0c875, type: 3}
|
||||
endClip: {fileID: 0}
|
||||
useRootMotion: 1
|
||||
ignoreRootMotionY: 1
|
||||
cooldown: 1
|
||||
cooldown: 10
|
||||
manaCost: 0
|
||||
effects: []
|
||||
|
||||
26
Assets/Skills/Effects/Melee_Slash_1.asset
Normal file
26
Assets/Skills/Effects/Melee_Slash_1.asset
Normal file
@@ -0,0 +1,26 @@
|
||||
%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: bf750718c64c4bd48af905d2927351de, type: 3}
|
||||
m_Name: Melee_Slash_1
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.Effects.AbnormalityEffect
|
||||
targetType: 0
|
||||
targetTeam: 0
|
||||
areaCenter: 0
|
||||
areaShape: 0
|
||||
targetLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
areaRadius: 3
|
||||
fanOriginDistance: 0
|
||||
fanRadius: 3
|
||||
fanHalfAngle: 45
|
||||
abnormalityData: {fileID: 11400000, guid: da5a38e4e2c383940a34d9d8080fbbe0, type: 2}
|
||||
8
Assets/Skills/Effects/Melee_Slash_1.asset.meta
Normal file
8
Assets/Skills/Effects/Melee_Slash_1.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 75bac55a016a0da46899806f58b76ce3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
26
Assets/Skills/Effects/Melee_Slash_2.asset
Normal file
26
Assets/Skills/Effects/Melee_Slash_2.asset
Normal file
@@ -0,0 +1,26 @@
|
||||
%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: bf750718c64c4bd48af905d2927351de, type: 3}
|
||||
m_Name: Melee_Slash_2
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.Effects.AbnormalityEffect
|
||||
targetType: 0
|
||||
targetTeam: 0
|
||||
areaCenter: 0
|
||||
areaShape: 0
|
||||
targetLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
areaRadius: 3
|
||||
fanOriginDistance: 0
|
||||
fanRadius: 3
|
||||
fanHalfAngle: 45
|
||||
abnormalityData: {fileID: 11400000, guid: c4abb0f89779f294ab99562e085e8f3b, type: 2}
|
||||
8
Assets/Skills/Effects/Melee_Slash_2.asset.meta
Normal file
8
Assets/Skills/Effects/Melee_Slash_2.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e496b26a1dbf40488ce54cb4fe9c27b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -23,3 +23,5 @@ MonoBehaviour:
|
||||
manaCost: 5
|
||||
effects:
|
||||
- {fileID: 11400000, guid: e23fca57309ab2b4faa5c380118cd07e, type: 2}
|
||||
- {fileID: 11400000, guid: 75bac55a016a0da46899806f58b76ce3, type: 2}
|
||||
- {fileID: 11400000, guid: 0e496b26a1dbf40488ce54cb4fe9c27b, type: 2}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -83,7 +83,7 @@ PlayerSettings:
|
||||
androidApplicationEntry: 2
|
||||
defaultIsNativeResolution: 1
|
||||
macRetinaSupport: 1
|
||||
runInBackground: 0
|
||||
runInBackground: 1
|
||||
muteOtherAudioSources: 0
|
||||
Prepare IOS For Recording: 0
|
||||
Force IOS Speakers When Recording: 0
|
||||
|
||||
@@ -4,62 +4,8 @@
|
||||
QualitySettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 5
|
||||
m_CurrentQuality: 1
|
||||
m_CurrentQuality: 0
|
||||
m_QualitySettings:
|
||||
- serializedVersion: 5
|
||||
name: Mobile
|
||||
pixelLightCount: 2
|
||||
shadows: 2
|
||||
shadowResolution: 1
|
||||
shadowProjection: 1
|
||||
shadowCascades: 2
|
||||
shadowDistance: 40
|
||||
shadowNearPlaneOffset: 3
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 1
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 1
|
||||
adaptiveVsync: 0
|
||||
vSyncCount: 0
|
||||
realtimeGICPUUsage: 100
|
||||
adaptiveVsyncExtraA: 0
|
||||
adaptiveVsyncExtraB: 0
|
||||
lodBias: 1
|
||||
meshLodThreshold: 1
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
streamingMipmapsRenderersPerFrame: 512
|
||||
streamingMipmapsMaxLevelReduction: 2
|
||||
streamingMipmapsMaxFileIORequests: 1024
|
||||
particleRaycastBudget: 256
|
||||
asyncUploadTimeSlice: 2
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858, type: 2}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms:
|
||||
- Standalone
|
||||
- serializedVersion: 5
|
||||
name: PC
|
||||
pixelLightCount: 2
|
||||
@@ -116,22 +62,4 @@ QualitySettings:
|
||||
- Android
|
||||
- iPhone
|
||||
m_TextureMipmapLimitGroupNames: []
|
||||
m_PerPlatformDefaultQuality:
|
||||
Android: 0
|
||||
AndroidXR: 0
|
||||
GameCoreScarlett: 1
|
||||
GameCoreXboxOne: 1
|
||||
Lumin: 0
|
||||
MetaQuest: 0
|
||||
Nintendo Switch: 1
|
||||
Nintendo Switch 2: 1
|
||||
PS4: 1
|
||||
PS5: 1
|
||||
Server: 0
|
||||
Stadia: 0
|
||||
Standalone: 1
|
||||
WebGL: 0
|
||||
Windows Store Apps: 0
|
||||
XboxOne: 0
|
||||
iPhone: 0
|
||||
tvOS: 0
|
||||
m_PerPlatformDefaultQuality: {}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
UnityConnectSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 1
|
||||
m_Enabled: 0
|
||||
m_Enabled: 1
|
||||
m_TestMode: 0
|
||||
m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
|
||||
m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
|
||||
|
||||
Reference in New Issue
Block a user