Compare commits
21 Commits
1c77c5d9cd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7fc457a384 | |||
| 8093cca251 | |||
| c34b9df4f7 | |||
|
|
3aa43bfd20 | ||
|
|
5284ffc153 | ||
| 20167a8a52 | |||
| 9951aa98b2 | |||
| 600f35ae8f | |||
| a4eae438de | |||
| 72fe5e5b04 | |||
| 93d326e692 | |||
|
|
863e98a53f | ||
|
|
a979013b73 | ||
| 9c6a9910cb | |||
| b3a9823f49 | |||
| 0a2119a548 | |||
| 23429ec096 | |||
| 2f7eac05ce | |||
| 9a010524f2 | |||
| 34ab12a093 | |||
| d066290607 |
@@ -67,7 +67,6 @@
|
||||
<Compile Include="Assets\Scripts\FogOfWarRenderer.cs" />
|
||||
<Compile Include="Assets\Scripts\ResourcePickup.cs" />
|
||||
<Compile Include="Assets\Scripts\PlayerVisionProvider.cs" />
|
||||
<Compile Include="Assets\Scripts\PlayerController.cs" />
|
||||
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\Motion\OrbitMotion.cs" />
|
||||
<Compile Include="Assets\Scripts\CreepCamp.cs" />
|
||||
<Compile Include="Assets\Scripts\EnemyAIController.cs" />
|
||||
@@ -83,6 +82,7 @@
|
||||
<Compile Include="Assets\Scripts\Resource.cs" />
|
||||
<Compile Include="Assets\Data\Scripts\DataClasses\UpgradeData.cs" />
|
||||
<Compile Include="Assets\Scripts\UpgradeDatabase.cs" />
|
||||
<Compile Include="Assets\Scripts\UI\TeamHealthUI.cs" />
|
||||
<Compile Include="Assets\Scripts\AutoTargetSystem.cs" />
|
||||
<Compile Include="Assets\Scripts\CreepDataComponent.cs" />
|
||||
<Compile Include="Assets\Scripts\BuildingSlotButton.cs" />
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.CreepData
|
||||
id: 1
|
||||
memo: "\uAE30\uBCF81"
|
||||
moveSpeed: 5
|
||||
moveSpeed: 4
|
||||
maxHp: 75
|
||||
sight: 6
|
||||
atkRange: 1
|
||||
@@ -22,5 +22,5 @@ MonoBehaviour:
|
||||
atkIntervalSec: 2
|
||||
cost: 2
|
||||
weight: 1
|
||||
modelPath: Assets/Models/PlantWarrior.fbx
|
||||
modelPath: Assets/Models/PlantWarrior_With_Spear.fbx
|
||||
animationControllerPath: Assets/Animations/MonsterAnimationController.controller
|
||||
|
||||
@@ -14,8 +14,8 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.CreepData
|
||||
id: 2
|
||||
memo: "\uAE30\uBCF82"
|
||||
moveSpeed: 4.5
|
||||
maxHp: 100
|
||||
moveSpeed: 3.5
|
||||
maxHp: 50
|
||||
sight: 6
|
||||
atkRange: 4
|
||||
atkDamage: 15
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData
|
||||
id: 101
|
||||
memo: "Grunt(\uAE30\uBCF8)"
|
||||
moveSpeed: 6.7
|
||||
moveSpeed: 4.5
|
||||
maxHp: 75
|
||||
sight: 6
|
||||
atkRange: 1
|
||||
@@ -22,7 +22,7 @@ MonoBehaviour:
|
||||
atkIntervalSec: 1.2
|
||||
cost: 3
|
||||
weight: 1
|
||||
modelPath: Assets/Models/Skeleton_Minion.fbx
|
||||
modelPath: Assets/Models/Skeleton_Minion_With_Sword.fbx
|
||||
animationControllerPath: Assets/Animations/MonsterAnimationController.controller
|
||||
waveMin: 1
|
||||
waveMax: 10
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData
|
||||
id: 102
|
||||
memo: "Tank(\uB290\uB9BC/\uB2E8\uB2E8)"
|
||||
moveSpeed: 3.3
|
||||
moveSpeed: 2.5
|
||||
maxHp: 125
|
||||
sight: 6
|
||||
atkRange: 1
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData
|
||||
id: 103
|
||||
memo: "Ranged(\uC6D0\uAC70\uB9AC/\uC57D\uD568)"
|
||||
moveSpeed: 5.3
|
||||
moveSpeed: 3.5
|
||||
maxHp: 65
|
||||
sight: 6
|
||||
atkRange: 5
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData
|
||||
id: 104
|
||||
memo: "Fast(\uBE60\uB984/\uC57D\uD568)"
|
||||
moveSpeed: 8.6
|
||||
moveSpeed: 6
|
||||
maxHp: 45
|
||||
sight: 6
|
||||
atkRange: 1
|
||||
|
||||
@@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.MonsterData
|
||||
id: 105
|
||||
memo: "Elite(\uC18C\uC218 \uC815\uC608)"
|
||||
moveSpeed: 6.6
|
||||
moveSpeed: 4.5
|
||||
maxHp: 100
|
||||
sight: 6
|
||||
atkRange: 1
|
||||
|
||||
@@ -18,8 +18,8 @@ MonoBehaviour:
|
||||
level: 1
|
||||
upgradeTo: 2
|
||||
towerType: attack
|
||||
mana: 100
|
||||
manpower: 10
|
||||
mana: 150
|
||||
manpower: 50
|
||||
sizeX: 4
|
||||
sizeY: 10
|
||||
sizeZ: 4
|
||||
|
||||
@@ -19,11 +19,11 @@ MonoBehaviour:
|
||||
upgradeTo: 0
|
||||
towerType: defense
|
||||
mana: 150
|
||||
manpower: 20
|
||||
manpower: 50
|
||||
sizeX: 8
|
||||
sizeY: 4
|
||||
sizeZ: 3
|
||||
maxHp: 30
|
||||
maxHp: 110
|
||||
sight: 1
|
||||
atkRange: 0
|
||||
atkDamage: 0
|
||||
|
||||
@@ -18,8 +18,8 @@ MonoBehaviour:
|
||||
level: 2
|
||||
upgradeTo: 3
|
||||
towerType: attack
|
||||
mana: 200
|
||||
manpower: 20
|
||||
mana: 300
|
||||
manpower: 60
|
||||
sizeX: 4
|
||||
sizeY: 10
|
||||
sizeZ: 4
|
||||
|
||||
@@ -18,8 +18,8 @@ MonoBehaviour:
|
||||
level: 3
|
||||
upgradeTo: 4
|
||||
towerType: attack
|
||||
mana: 300
|
||||
manpower: 30
|
||||
mana: 450
|
||||
manpower: 70
|
||||
sizeX: 4
|
||||
sizeY: 10
|
||||
sizeZ: 4
|
||||
|
||||
@@ -18,8 +18,8 @@ MonoBehaviour:
|
||||
level: 4
|
||||
upgradeTo: 5
|
||||
towerType: attack
|
||||
mana: 400
|
||||
manpower: 40
|
||||
mana: 600
|
||||
manpower: 80
|
||||
sizeX: 4
|
||||
sizeY: 10
|
||||
sizeZ: 4
|
||||
|
||||
@@ -18,8 +18,8 @@ MonoBehaviour:
|
||||
level: 5
|
||||
upgradeTo: 0
|
||||
towerType: attack
|
||||
mana: 600
|
||||
manpower: 50
|
||||
mana: 750
|
||||
manpower: 100
|
||||
sizeX: 4
|
||||
sizeY: 10
|
||||
sizeZ: 4
|
||||
|
||||
@@ -19,11 +19,11 @@ MonoBehaviour:
|
||||
upgradeTo: 8
|
||||
towerType: defense
|
||||
mana: 30
|
||||
manpower: 10
|
||||
manpower: 20
|
||||
sizeX: 8
|
||||
sizeY: 4
|
||||
sizeZ: 3
|
||||
maxHp: 30
|
||||
maxHp: 50
|
||||
sight: 1
|
||||
atkRange: 0
|
||||
atkDamage: 0
|
||||
|
||||
@@ -19,11 +19,11 @@ MonoBehaviour:
|
||||
upgradeTo: 9
|
||||
towerType: defense
|
||||
mana: 50
|
||||
manpower: 20
|
||||
manpower: 30
|
||||
sizeX: 8
|
||||
sizeY: 4
|
||||
sizeZ: 3
|
||||
maxHp: 30
|
||||
maxHp: 60
|
||||
sight: 1
|
||||
atkRange: 0
|
||||
atkDamage: 0
|
||||
|
||||
@@ -19,11 +19,11 @@ MonoBehaviour:
|
||||
upgradeTo: 10
|
||||
towerType: defense
|
||||
mana: 100
|
||||
manpower: 20
|
||||
manpower: 40
|
||||
sizeX: 8
|
||||
sizeY: 4
|
||||
sizeZ: 3
|
||||
maxHp: 30
|
||||
maxHp: 80
|
||||
sight: 1
|
||||
atkRange: 0
|
||||
atkDamage: 0
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Northbound.Data
|
||||
public int length => sizeZ; // Z축 (깊이)
|
||||
public float height => sizeY; // Y축 (높이)
|
||||
public int maxHealth => maxHp;
|
||||
public float visionRange => atkRange;
|
||||
public float visionRange => sight;
|
||||
public float requiredWorkAmount => manpower;
|
||||
|
||||
public Vector3 GetSize(int rotation)
|
||||
|
||||
@@ -73,9 +73,9 @@ Material:
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _Reflectivity: 10
|
||||
- _ScaleRatioA: 0.9814815
|
||||
- _ScaleRatioB: 0.7974537
|
||||
- _ScaleRatioC: 0.7974537
|
||||
- _ScaleRatioA: 0.75
|
||||
- _ScaleRatioB: 0.609375
|
||||
- _ScaleRatioC: 0.609375
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
|
||||
129
Assets/Models/PlantWarrior_With_Spear.prefab
Normal file
129
Assets/Models/PlantWarrior_With_Spear.prefab
Normal file
@@ -0,0 +1,129 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1001 &2678598980648547258
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: -14.918472
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 1.0000176
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 6.0022106
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: PlantWarrior_With_Spear
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: -5515783359193845756, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7069067296122378839}
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
--- !u!4 &1610120253448831934 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -5515783359193845756, guid: 1b47a488ece83f249abea22b1b1877fb, type: 3}
|
||||
m_PrefabInstance: {fileID: 2678598980648547258}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &7318602548037418428
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1610120253448831934}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.15
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0.00000008146034
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: PlantWarrior_Spear
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
--- !u!4 &7069067296122378839 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: bec7726862777a042919c40fd38fce81, type: 3}
|
||||
m_PrefabInstance: {fileID: 7318602548037418428}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
7
Assets/Models/PlantWarrior_With_Spear.prefab.meta
Normal file
7
Assets/Models/PlantWarrior_With_Spear.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0cce1b86be09a2c478b2f604fcc5c7cc
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
129
Assets/Models/Skeleton_Minion_With_Sword.prefab
Normal file
129
Assets/Models/Skeleton_Minion_With_Sword.prefab
Normal file
@@ -0,0 +1,129 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1001 &274662760238388128
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 8440547662176677020}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: sword_1handed
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
--- !u!4 &307780991042516043 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: c85b70d5b9e5dda4d91f7d8ad5b574db, type: 3}
|
||||
m_PrefabInstance: {fileID: 274662760238388128}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &5068477173941542040
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: -17.62028
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 1.0000178
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 7.511076
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -8679921383154817045, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 919132149155446097, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Skeleton_Minion_With_Sword
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects:
|
||||
- targetCorrespondingSourceObject: {fileID: -5515783359193845756, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 307780991042516043}
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
--- !u!4 &8440547662176677020 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -5515783359193845756, guid: 134023580cb126541be31f65cf1db789, type: 3}
|
||||
m_PrefabInstance: {fileID: 5068477173941542040}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
7
Assets/Models/Skeleton_Minion_With_Sword.prefab.meta
Normal file
7
Assets/Models/Skeleton_Minion_With_Sword.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ce2fed223ab07f4cad4f5296bcfafa6
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
47
Assets/Prefabs/Core.asset
Normal file
47
Assets/Prefabs/Core.asset
Normal file
@@ -0,0 +1,47 @@
|
||||
%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: 8c40fef5ebc37b743a3f225c1ca57c32, type: 3}
|
||||
m_Name: Core
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.TowerData
|
||||
id: 0
|
||||
memo:
|
||||
buildingName:
|
||||
level: 0
|
||||
upgradeTo: 0
|
||||
towerType:
|
||||
mana: 0
|
||||
manpower: 0
|
||||
sizeX: 0
|
||||
sizeY: 0
|
||||
sizeZ: 0
|
||||
maxHp: 0
|
||||
sight: 100
|
||||
atkRange: 0
|
||||
atkDamage: 0
|
||||
atkIntervalSec: 0
|
||||
modelPath:
|
||||
prefab: {fileID: 0}
|
||||
icon: {fileID: 0}
|
||||
placementOffset: {x: 0, y: 0, z: 0}
|
||||
allowRotation: 1
|
||||
isIndestructible: 0
|
||||
autoRegenerate: 0
|
||||
regenPerSecond: 1
|
||||
providesVision: 1
|
||||
constructionEquipment:
|
||||
socketName: RightHand
|
||||
equipmentPrefab: {fileID: 0}
|
||||
attachOnStart: 1
|
||||
detachOnEnd: 1
|
||||
keepEquipped: 0
|
||||
attachDelay: 0
|
||||
detachDelay: 0
|
||||
8
Assets/Prefabs/Core.asset.meta
Normal file
8
Assets/Prefabs/Core.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e9cb7f0c2209b543b171709534789aa
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -49,7 +49,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||
GlobalObjectIdHash: 3998537868
|
||||
GlobalObjectIdHash: 615747208
|
||||
InScenePlacedSourceGlobalObjectIdHash: 615747208
|
||||
DeferredDespawnTick: 0
|
||||
Ownership: 0
|
||||
@@ -106,7 +106,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Building
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
buildingData: {fileID: 0}
|
||||
buildingData: {fileID: 11400000, guid: 8e9cb7f0c2209b543b171709534789aa, type: 2}
|
||||
gridPosition: {x: 0, y: 0, z: 0}
|
||||
rotation: 0
|
||||
initialTeam: 1
|
||||
@@ -152,10 +152,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 1
|
||||
showInExploredAreas: 1
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 50
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1641,8 +1641,10 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
enableFogVisibility: 1
|
||||
visibilityCheckInterval: 0.1
|
||||
enemyTeam: 2
|
||||
maxHealth: 100
|
||||
maxHealth: 50
|
||||
damageEffectPrefab: {fileID: 4021103657954561961, guid: 5c755f9bc5253ea418e919994537dcc7, type: 3}
|
||||
destroyEffectPrefab: {fileID: 141433446842962269, guid: 9fe8f8b3288e45a44af36ff8aa04486e, type: 3}
|
||||
showHealthBar: 1
|
||||
@@ -1657,7 +1659,7 @@ NavMeshAgent:
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.5
|
||||
m_Speed: 4.5
|
||||
m_Speed: 3.5
|
||||
m_Acceleration: 8
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 120
|
||||
@@ -1696,9 +1698,16 @@ MonoBehaviour:
|
||||
attackRange: 4
|
||||
attackInterval: 4
|
||||
attackDamage: 15
|
||||
moveSpeed: 4.5
|
||||
moveSpeed: 3.5
|
||||
chaseSpeedMultiplier: 1
|
||||
showDebugInfo: 1
|
||||
creepCamp: {fileID: 0}
|
||||
enableAggroSystem: 1
|
||||
damageAggroMultiplier: 2
|
||||
aggroDecayRate: 5
|
||||
aggroSwitchThreshold: 20
|
||||
targetReevaluateInterval: 1
|
||||
distanceSwitchThreshold: 5
|
||||
--- !u!95 &367892292455292432
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1737,6 +1737,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
enableFogVisibility: 1
|
||||
visibilityCheckInterval: 0.1
|
||||
enemyTeam: 3
|
||||
maxHealth: 125
|
||||
damageEffectPrefab: {fileID: 4021103657954561961, guid: 5c755f9bc5253ea418e919994537dcc7, type: 3}
|
||||
@@ -1753,7 +1755,7 @@ NavMeshAgent:
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.5
|
||||
m_Speed: 3.3
|
||||
m_Speed: 2.5
|
||||
m_Acceleration: 8
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 120
|
||||
@@ -1792,9 +1794,16 @@ MonoBehaviour:
|
||||
attackRange: 1
|
||||
attackInterval: 1.5
|
||||
attackDamage: 4
|
||||
moveSpeed: 3.3
|
||||
moveSpeed: 2.5
|
||||
chaseSpeedMultiplier: 1
|
||||
showDebugInfo: 1
|
||||
creepCamp: {fileID: 0}
|
||||
enableAggroSystem: 1
|
||||
damageAggroMultiplier: 2
|
||||
aggroDecayRate: 5
|
||||
aggroSwitchThreshold: 20
|
||||
targetReevaluateInterval: 1
|
||||
distanceSwitchThreshold: 5
|
||||
--- !u!114 &6540479212111277442
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -659,6 +659,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
enableFogVisibility: 1
|
||||
visibilityCheckInterval: 0.1
|
||||
enemyTeam: 3
|
||||
maxHealth: 65
|
||||
damageEffectPrefab: {fileID: 4021103657954561961, guid: 5c755f9bc5253ea418e919994537dcc7, type: 3}
|
||||
@@ -675,7 +677,7 @@ NavMeshAgent:
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.5
|
||||
m_Speed: 5.3
|
||||
m_Speed: 3.5
|
||||
m_Acceleration: 8
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 120
|
||||
@@ -714,9 +716,16 @@ MonoBehaviour:
|
||||
attackRange: 5
|
||||
attackInterval: 1.4
|
||||
attackDamage: 2
|
||||
moveSpeed: 5.3
|
||||
moveSpeed: 3.5
|
||||
chaseSpeedMultiplier: 1
|
||||
showDebugInfo: 1
|
||||
creepCamp: {fileID: 0}
|
||||
enableAggroSystem: 1
|
||||
damageAggroMultiplier: 2
|
||||
aggroDecayRate: 5
|
||||
aggroSwitchThreshold: 20
|
||||
targetReevaluateInterval: 1
|
||||
distanceSwitchThreshold: 5
|
||||
--- !u!114 &8817410469440881478
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -1092,6 +1092,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
enableFogVisibility: 1
|
||||
visibilityCheckInterval: 0.1
|
||||
enemyTeam: 3
|
||||
maxHealth: 45
|
||||
damageEffectPrefab: {fileID: 4021103657954561961, guid: 5c755f9bc5253ea418e919994537dcc7, type: 3}
|
||||
@@ -1108,7 +1110,7 @@ NavMeshAgent:
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.5
|
||||
m_Speed: 8.6
|
||||
m_Speed: 6
|
||||
m_Acceleration: 8
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 120
|
||||
@@ -1147,9 +1149,16 @@ MonoBehaviour:
|
||||
attackRange: 1
|
||||
attackInterval: 1
|
||||
attackDamage: 2
|
||||
moveSpeed: 8.6
|
||||
moveSpeed: 6
|
||||
chaseSpeedMultiplier: 1
|
||||
showDebugInfo: 1
|
||||
creepCamp: {fileID: 0}
|
||||
enableAggroSystem: 1
|
||||
damageAggroMultiplier: 2
|
||||
aggroDecayRate: 5
|
||||
aggroSwitchThreshold: 20
|
||||
targetReevaluateInterval: 1
|
||||
distanceSwitchThreshold: 5
|
||||
--- !u!114 &177302896207380593
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -1337,6 +1337,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||
ShowTopMostFoldoutHeaderGroup: 1
|
||||
enableFogVisibility: 1
|
||||
visibilityCheckInterval: 0.1
|
||||
enemyTeam: 3
|
||||
maxHealth: 100
|
||||
damageEffectPrefab: {fileID: 4021103657954561961, guid: 5c755f9bc5253ea418e919994537dcc7, type: 3}
|
||||
@@ -1353,7 +1355,7 @@ NavMeshAgent:
|
||||
m_Enabled: 1
|
||||
m_AgentTypeID: 0
|
||||
m_Radius: 0.5
|
||||
m_Speed: 6.6
|
||||
m_Speed: 4.5
|
||||
m_Acceleration: 8
|
||||
avoidancePriority: 50
|
||||
m_AngularSpeed: 120
|
||||
@@ -1392,9 +1394,16 @@ MonoBehaviour:
|
||||
attackRange: 1
|
||||
attackInterval: 1.3
|
||||
attackDamage: 7
|
||||
moveSpeed: 6.6
|
||||
moveSpeed: 4.5
|
||||
chaseSpeedMultiplier: 1
|
||||
showDebugInfo: 1
|
||||
creepCamp: {fileID: 0}
|
||||
enableAggroSystem: 1
|
||||
damageAggroMultiplier: 2
|
||||
aggroDecayRate: 5
|
||||
aggroSwitchThreshold: 20
|
||||
targetReevaluateInterval: 1
|
||||
distanceSwitchThreshold: 5
|
||||
--- !u!114 &324484408599232274
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -93,7 +93,6 @@ MonoBehaviour:
|
||||
deathEffectPrefab: {fileID: 5642766282230003982, guid: b5c8ca7ed10b61e499cce8ec3b6e2e4c, type: 3}
|
||||
resourcePickupPrefab: {fileID: 1627676033990080135, guid: 8c45964a69bf8fa4ba461ed217bc052f, type: 3}
|
||||
respawnDelay: 10
|
||||
respawnPanelPrefab: {fileID: 5112555873318329611, guid: 9257920ba4a6256499ad89eeb7d7098a, type: 3}
|
||||
showHealthBar: 1
|
||||
healthBarPrefab: {fileID: 100000, guid: 8e7a5b12c9f8a4a5ba3c8d1f2e5a7b9c, type: 3}
|
||||
--- !u!143 &3007098678582223509
|
||||
@@ -418,11 +417,13 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.PlayerStats
|
||||
baseMaxHp: 100
|
||||
baseDamage: 10
|
||||
baseCapacity: 100
|
||||
baseCapacity: 50
|
||||
baseManpower: 10
|
||||
baseMoveSpeed: 5
|
||||
baseMoveSpeed: 4
|
||||
baseSight: 10
|
||||
baseAttackRange: 2
|
||||
baseAttackRange: 3
|
||||
baseHpRegen: 1
|
||||
baseHpRegenDelay: 5
|
||||
--- !u!1 &1862223349553492570
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -319,10 +319,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -138,10 +138,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -319,10 +319,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -138,10 +138,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -228,10 +228,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -138,10 +138,12 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 760137a2fd0da7f458ac4b0ee7f485d6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.FogOfWarVisibility
|
||||
alwaysVisible: 0
|
||||
showInExploredAreas: 0
|
||||
updateInterval: 0.2
|
||||
renderers: []
|
||||
enableDistantVisibility: 1
|
||||
baseVisibilityRange: 10
|
||||
heightVisibilityMultiplier: 2
|
||||
minHeightForDistantVisibility: 3
|
||||
useExploredMaterial: 0
|
||||
|
||||
@@ -23,5 +23,5 @@ MonoBehaviour:
|
||||
effectOpList:
|
||||
- mul
|
||||
effectValueList:
|
||||
- 1.2
|
||||
- 1.5
|
||||
sortOrder: 13
|
||||
|
||||
@@ -23,5 +23,5 @@ MonoBehaviour:
|
||||
effectOpList:
|
||||
- mul
|
||||
effectValueList:
|
||||
- 1.6
|
||||
- 2
|
||||
sortOrder: 14
|
||||
|
||||
@@ -23,5 +23,5 @@ MonoBehaviour:
|
||||
effectOpList:
|
||||
- mul
|
||||
effectValueList:
|
||||
- 2
|
||||
- 2.5
|
||||
sortOrder: 15
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -118,6 +118,12 @@ namespace Northbound
|
||||
{
|
||||
var damageable = targetObj.GetComponent<IDamageable>();
|
||||
damageable?.TakeDamage(_playerStats?.GetDamage() ?? 10, attackerNetworkId);
|
||||
|
||||
// 공격자를 전투 상태로 기록 (체력 회복 방지)
|
||||
if (_networkPlayerController != null)
|
||||
{
|
||||
_networkPlayerController.MarkInCombat();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ namespace Northbound
|
||||
private int currentRotation = 0; // 0-3
|
||||
private Material[] originalMaterials;
|
||||
private Renderer[] previewRenderers;
|
||||
private PlayerInputActions _inputActions;
|
||||
|
||||
// 드래그 건설 관련
|
||||
private bool isDragging = false;
|
||||
@@ -45,17 +44,43 @@ namespace Northbound
|
||||
// UI 체크 캐싱 (Input System 콜백 내에서 IsPointerOverGameObject() 사용 불가)
|
||||
private bool _isPointerOverUI = false;
|
||||
|
||||
// 플레이어 컨트롤러 참조 (로컬 플레이어 체크용)
|
||||
private NetworkPlayerController _playerController;
|
||||
private bool _isInitialized = false;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
if (!IsOwner) return;
|
||||
_playerController = GetComponent<NetworkPlayerController>();
|
||||
|
||||
_inputActions = new PlayerInputActions();
|
||||
_inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
|
||||
_inputActions.Player.Rotate.performed += OnRotate;
|
||||
_inputActions.Player.Build.performed += OnBuildPressed;
|
||||
_inputActions.Player.Build.canceled += OnBuildReleased;
|
||||
_inputActions.Player.Cancel.performed += OnCancel;
|
||||
_inputActions.Enable();
|
||||
if (_playerController != null)
|
||||
{
|
||||
_playerController.OnInputInitialized += TryInitializeInput;
|
||||
}
|
||||
|
||||
// 이미 로컬 플레이어면 입력 초기화 시도
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Start에서 다시 한번 확인 (이벤트 타이밍 문제 해결)
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void TryInitializeInput()
|
||||
{
|
||||
if (_isInitialized) return; // 이미 초기화됨
|
||||
if (_playerController == null || !_playerController.IsLocalPlayer) return;
|
||||
if (_playerController.InputActions == null) return;
|
||||
|
||||
_isInitialized = true;
|
||||
|
||||
var inputActions = _playerController.InputActions;
|
||||
inputActions.Player.ToggleBuildMode.performed += OnToggleBuildMode;
|
||||
inputActions.Player.Rotate.performed += OnRotate;
|
||||
inputActions.Player.Build.performed += OnBuildPressed;
|
||||
inputActions.Player.Build.canceled += OnBuildReleased;
|
||||
inputActions.Player.Cancel.performed += OnCancel;
|
||||
|
||||
// Create default materials if not assigned
|
||||
if (validMaterial == null)
|
||||
@@ -118,15 +143,19 @@ namespace Northbound
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
if (IsOwner && _inputActions != null)
|
||||
if (_playerController != null)
|
||||
{
|
||||
_inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode;
|
||||
_inputActions.Player.Rotate.performed -= OnRotate;
|
||||
_inputActions.Player.Build.performed -= OnBuildPressed;
|
||||
_inputActions.Player.Build.canceled -= OnBuildReleased;
|
||||
_inputActions.Player.Cancel.performed -= OnCancel;
|
||||
_inputActions.Disable();
|
||||
_inputActions.Dispose();
|
||||
_playerController.OnInputInitialized -= TryInitializeInput;
|
||||
|
||||
if (_isInitialized && _playerController.InputActions != null)
|
||||
{
|
||||
var inputActions = _playerController.InputActions;
|
||||
inputActions.Player.ToggleBuildMode.performed -= OnToggleBuildMode;
|
||||
inputActions.Player.Rotate.performed -= OnRotate;
|
||||
inputActions.Player.Build.performed -= OnBuildPressed;
|
||||
inputActions.Player.Build.canceled -= OnBuildReleased;
|
||||
inputActions.Player.Cancel.performed -= OnCancel;
|
||||
}
|
||||
}
|
||||
|
||||
ClearDragPreviews();
|
||||
@@ -134,7 +163,7 @@ namespace Northbound
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!IsOwner) return;
|
||||
if (!_isInitialized) return;
|
||||
|
||||
// UI 체크 캐싱 (Input System 콜백 내에서 사용하기 위해)
|
||||
_isPointerOverUI = CheckPointerOverUI();
|
||||
|
||||
@@ -6,8 +6,16 @@ namespace Northbound
|
||||
/// <summary>
|
||||
/// 블랙스미스 건물 - 업그레이드 구매 가능
|
||||
/// </summary>
|
||||
public class Blacksmith : MonoBehaviour, IInteractable
|
||||
public class Blacksmith : NetworkBehaviour, IInteractable, IVisionProvider, ITeamMember
|
||||
{
|
||||
[Header("Vision Settings")]
|
||||
[Tooltip("블랙스미스가 제공하는 시야 범위")]
|
||||
public float visionRange = 10f;
|
||||
|
||||
[Header("Team")]
|
||||
[Tooltip("건물의 팀")]
|
||||
public TeamType initialTeam = TeamType.Player;
|
||||
|
||||
[Header("UI Reference")]
|
||||
[SerializeField] private GameObject _upgradePopupPrefab;
|
||||
|
||||
@@ -55,9 +63,6 @@ namespace Northbound
|
||||
return transform;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private void OpenUpgradePopup(ulong playerId)
|
||||
@@ -115,12 +120,63 @@ namespace Northbound
|
||||
return null;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
public override void OnDestroy()
|
||||
{
|
||||
if (_popupInstance != null)
|
||||
{
|
||||
Destroy(_popupInstance);
|
||||
}
|
||||
base.OnDestroy();
|
||||
}
|
||||
|
||||
#region NetworkBehaviour Overrides
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
if (IsServer)
|
||||
{
|
||||
// 시야 제공자로 등록
|
||||
FogOfWarSystem.Instance?.RegisterVisionProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
if (IsServer)
|
||||
{
|
||||
// 시야 제공자 등록 해제
|
||||
FogOfWarSystem.Instance?.UnregisterVisionProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IVisionProvider Implementation
|
||||
|
||||
public ulong GetOwnerId() => 0; // 블랙스미스는 모든 플레이어에게 시야 제공
|
||||
|
||||
public float GetVisionRange() => visionRange;
|
||||
|
||||
Transform IVisionProvider.GetTransform() => transform;
|
||||
|
||||
public bool IsActive() => IsSpawned;
|
||||
|
||||
TeamType IVisionProvider.GetTeam() => initialTeam;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ITeamMember Implementation
|
||||
|
||||
public TeamType GetTeam() => initialTeam;
|
||||
|
||||
public bool IsDead() => false; // 블랙스미스는 파괴되지 않음
|
||||
|
||||
public void SetTeam(TeamType team)
|
||||
{
|
||||
// 블랙스미스의 팀은 변경할 수 없음
|
||||
Debug.LogWarning("[Blacksmith] 블랙스미스의 팀은 변경할 수 없습니다.");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,12 +7,15 @@ namespace Northbound
|
||||
/// <summary>
|
||||
/// 플레이어가 자원을 건내받아 게임의 전역 자원으로 관리하는 중앙 허브
|
||||
/// </summary>
|
||||
public class Core : NetworkBehaviour, IInteractable, IDamageable, ITeamMember
|
||||
public class Core : NetworkBehaviour, IInteractable, IDamageable, ITeamMember, IVisionProvider
|
||||
{
|
||||
[Header("Core Settings")]
|
||||
public int maxStorageCapacity = 1000; // 코어의 최대 저장 용량
|
||||
public bool unlimitedStorage = false; // 무제한 저장소
|
||||
|
||||
[Header("Vision")]
|
||||
public float visionRange = 15f; // 코어가 제공하는 시야 범위
|
||||
|
||||
[Header("Health")]
|
||||
public int maxHealth = 1000;
|
||||
public GameObject damageEffectPrefab;
|
||||
@@ -55,6 +58,9 @@ namespace Northbound
|
||||
{
|
||||
_totalResources.Value = 0;
|
||||
_currentHealth.Value = maxHealth;
|
||||
|
||||
// 시야 제공자로 등록
|
||||
FogOfWarSystem.Instance?.RegisterVisionProvider(this);
|
||||
}
|
||||
|
||||
_currentHealth.OnValueChanged += OnHealthChanged;
|
||||
@@ -62,6 +68,12 @@ namespace Northbound
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
if (IsServer)
|
||||
{
|
||||
// 시야 제공자 등록 해제
|
||||
FogOfWarSystem.Instance?.UnregisterVisionProvider(this);
|
||||
}
|
||||
|
||||
_currentHealth.OnValueChanged -= OnHealthChanged;
|
||||
}
|
||||
|
||||
@@ -372,5 +384,19 @@ namespace Northbound
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IVisionProvider Implementation
|
||||
|
||||
public ulong GetOwnerId() => 0; // 코어는 모든 플레이어에게 시야 제공
|
||||
|
||||
public float GetVisionRange() => visionRange;
|
||||
|
||||
Transform IVisionProvider.GetTransform() => transform;
|
||||
|
||||
public bool IsActive() => IsSpawned && !IsDead();
|
||||
|
||||
TeamType IVisionProvider.GetTeam() => TeamType.Player;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -203,8 +203,8 @@ namespace Northbound
|
||||
|
||||
networkObj.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId);
|
||||
|
||||
// 비활성화는 ServerRpc를 통해 처리
|
||||
DisablePickupClientRpc();
|
||||
// NetworkVariable을 통해 가시성 동기화 (기본적으로 숨김)
|
||||
_resourcePickup.SetVisible(false);
|
||||
}
|
||||
|
||||
private void HandleCreepDeath(EnemyUnit deadCreep)
|
||||
@@ -225,7 +225,8 @@ namespace Northbound
|
||||
// 모든 creep이 처치되었으면 ResourcePickup 활성화
|
||||
if (_spawnedCreeps.Count == 0 && _resourcePickup != null)
|
||||
{
|
||||
EnableResourcePickupClientRpc();
|
||||
// NetworkVariable이 자동으로 클라이언트에 동기화됨
|
||||
_resourcePickup.SetVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,24 +263,6 @@ namespace Northbound
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.ClientsAndHost)]
|
||||
private void EnableResourcePickupClientRpc()
|
||||
{
|
||||
if (_resourcePickup != null)
|
||||
{
|
||||
_resourcePickup.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.ClientsAndHost)]
|
||||
private void DisablePickupClientRpc()
|
||||
{
|
||||
if (_resourcePickup != null)
|
||||
{
|
||||
_resourcePickup.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
private CreepData GetCreepDataFromPrefab(GameObject prefab)
|
||||
{
|
||||
if (prefab == null) return null;
|
||||
|
||||
@@ -114,7 +114,7 @@ namespace Northbound
|
||||
private bool _isAttacking = false;
|
||||
private GameObject _pendingAttackTarget;
|
||||
private float _attackStartTime;
|
||||
private const float ATTACK_TIMEOUT = 1f; // 애니메이션 이벤트 미발생 시 타임아웃
|
||||
private const float ATTACK_TIMEOUT = 2f; // 애니메이션 이벤트 미발생 시 타임아웃 (애니메이션 길이 고려)
|
||||
|
||||
// 어그로 시스템
|
||||
private Dictionary<ulong, float> _aggroTable = new Dictionary<ulong, float>();
|
||||
@@ -592,6 +592,9 @@ namespace Northbound
|
||||
public void OnAttackHit()
|
||||
{
|
||||
PerformAttack();
|
||||
// 공격 완료 후 상태 리셋 (타임아웃 방지)
|
||||
_isAttacking = false;
|
||||
_pendingAttackTarget = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -671,6 +674,7 @@ namespace Northbound
|
||||
private void DecayAggro()
|
||||
{
|
||||
List<ulong> keysToRemove = new List<ulong>();
|
||||
List<KeyValuePair<ulong, float>> updates = new List<KeyValuePair<ulong, float>>();
|
||||
|
||||
foreach (var kvp in _aggroTable)
|
||||
{
|
||||
@@ -681,10 +685,16 @@ namespace Northbound
|
||||
}
|
||||
else
|
||||
{
|
||||
_aggroTable[kvp.Key] = newAggro;
|
||||
updates.Add(new KeyValuePair<ulong, float>(kvp.Key, newAggro));
|
||||
}
|
||||
}
|
||||
|
||||
// 순회 후 수정 적용
|
||||
foreach (var update in updates)
|
||||
{
|
||||
_aggroTable[update.Key] = update.Value;
|
||||
}
|
||||
|
||||
// 어그로가 0 이하인 항목 제거
|
||||
foreach (var key in keysToRemove)
|
||||
{
|
||||
@@ -916,6 +926,16 @@ namespace Northbound
|
||||
switch (state)
|
||||
{
|
||||
case EnemyAIState.Idle:
|
||||
_agent.isStopped = true;
|
||||
_agent.ResetPath();
|
||||
// 즉시 정지를 위해 velocity 초기화
|
||||
_agent.velocity = Vector3.zero;
|
||||
// 복귀 완료 - 무적 해제
|
||||
if (_enemyUnit != null)
|
||||
{
|
||||
_enemyUnit.SetInvulnerable(false);
|
||||
}
|
||||
break;
|
||||
case EnemyAIState.Attack:
|
||||
_agent.isStopped = true;
|
||||
_agent.ResetPath();
|
||||
@@ -940,6 +960,12 @@ namespace Northbound
|
||||
_agent.isStopped = false;
|
||||
_agent.speed = moveSpeed;
|
||||
_agent.SetDestination(_originPosition);
|
||||
// 복귀 시작 - 체력 회복 및 무적
|
||||
if (_enemyUnit != null)
|
||||
{
|
||||
_enemyUnit.HealToFull();
|
||||
_enemyUnit.SetInvulnerable(true);
|
||||
}
|
||||
break;
|
||||
case EnemyAIState.Dead:
|
||||
_agent.isStopped = true;
|
||||
|
||||
@@ -9,6 +9,12 @@ namespace Northbound
|
||||
[RequireComponent(typeof(Collider))]
|
||||
public class EnemyUnit : NetworkBehaviour, IDamageable, ITeamMember, IHealthProvider
|
||||
{
|
||||
[Header("Fog of War Visibility")]
|
||||
[Tooltip("전장의 안개에 의한 가시성 제어 활성화")]
|
||||
public bool enableFogVisibility = true;
|
||||
|
||||
[Tooltip("가시성 체크 주기 (초)")]
|
||||
public float visibilityCheckInterval = 0.1f;
|
||||
[Header("Team Settings")]
|
||||
[Tooltip("이 유닛의 팀 (Hostile = 적대세력, Monster = 몬스터)")]
|
||||
public TeamType enemyTeam = TeamType.Hostile;
|
||||
@@ -36,6 +42,12 @@ namespace Northbound
|
||||
NetworkVariableWritePermission.Server
|
||||
);
|
||||
|
||||
private NetworkVariable<bool> _isInvulnerable = new NetworkVariable<bool>(
|
||||
false,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// 사망 시 발생하는 이벤트 (매개변수: killerId)
|
||||
/// </summary>
|
||||
@@ -48,10 +60,20 @@ namespace Northbound
|
||||
|
||||
private UnitHealthBar _healthBar;
|
||||
|
||||
// 전장의 안개 가시성
|
||||
private Renderer[] _renderers;
|
||||
private float _visibilityTimer;
|
||||
private bool _lastVisibleState = true;
|
||||
private bool _initializedVisibility = false;
|
||||
private ulong _localPlayerId = ulong.MaxValue;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
base.OnNetworkSpawn();
|
||||
|
||||
// 렌더러 캐시 (가시성 제어용)
|
||||
_renderers = GetComponentsInChildren<Renderer>();
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
_currentHealth.Value = maxHealth;
|
||||
@@ -66,6 +88,12 @@ namespace Northbound
|
||||
{
|
||||
CreateHealthBar();
|
||||
}
|
||||
|
||||
// 클라이언트에서는 기본적으로 렌더러 비활성화
|
||||
if (enableFogVisibility && IsClient)
|
||||
{
|
||||
SetRenderersEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
@@ -74,6 +102,146 @@ namespace Northbound
|
||||
base.OnNetworkDespawn();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// 클라이언트에서만 가시성 체크 (호스트 포함)
|
||||
if (enableFogVisibility && IsClient)
|
||||
{
|
||||
UpdateFogVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 전장의 안개에 따른 가시성 업데이트 (클라이언트 전용)
|
||||
/// </summary>
|
||||
private void UpdateFogVisibility()
|
||||
{
|
||||
_visibilityTimer += Time.deltaTime;
|
||||
if (_visibilityTimer < visibilityCheckInterval) return;
|
||||
_visibilityTimer = 0f;
|
||||
|
||||
// 로컬 플레이어 ID 캐시
|
||||
if (_localPlayerId == ulong.MaxValue)
|
||||
{
|
||||
_localPlayerId = GetLocalPlayerId();
|
||||
if (_localPlayerId == ulong.MaxValue)
|
||||
{
|
||||
// 로컬 플레이어를 찾지 못함 - 기본적으로 숨김
|
||||
if (_initializedVisibility) return;
|
||||
_initializedVisibility = true;
|
||||
SetRenderersEnabled(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// FogOfWarSystem이 없으면 항상 보임
|
||||
if (FogOfWarSystem.Instance == null)
|
||||
{
|
||||
if (_initializedVisibility) return;
|
||||
_initializedVisibility = true;
|
||||
SetRenderersEnabled(true); // FogOfWar가 없으면 항상 보임
|
||||
return;
|
||||
}
|
||||
|
||||
// FogOfWar가 비활성화되어 있으면 항상 보임
|
||||
if (!FogOfWarSystem.Instance.gameObject.activeInHierarchy)
|
||||
{
|
||||
if (_initializedVisibility) return;
|
||||
_initializedVisibility = true;
|
||||
SetRenderersEnabled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// 현재 위치의 가시성 확인
|
||||
FogOfWarState state = FogOfWarSystem.Instance.GetVisibilityState(_localPlayerId, transform.position);
|
||||
bool shouldBeVisible = (state == FogOfWarState.Visible);
|
||||
|
||||
// 초기화되지 않은 경우 강제로 설정
|
||||
if (!_initializedVisibility)
|
||||
{
|
||||
_initializedVisibility = true;
|
||||
_lastVisibleState = shouldBeVisible;
|
||||
SetRenderersEnabled(shouldBeVisible);
|
||||
return;
|
||||
}
|
||||
|
||||
// 상태가 변경된 경우에만 렌더러 업데이트
|
||||
if (shouldBeVisible != _lastVisibleState)
|
||||
{
|
||||
_lastVisibleState = shouldBeVisible;
|
||||
SetRenderersEnabled(shouldBeVisible);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 로컬 플레이어의 실제 ID 가져오기
|
||||
/// </summary>
|
||||
private ulong GetLocalPlayerId()
|
||||
{
|
||||
if (NetworkManager.Singleton == null)
|
||||
{
|
||||
return ulong.MaxValue;
|
||||
}
|
||||
|
||||
// 방법 1: SpawnManager에서 찾기
|
||||
var localPlayer = NetworkManager.Singleton.SpawnManager.GetLocalPlayerObject();
|
||||
|
||||
// 방법 2: LocalClient에서 찾기
|
||||
if (localPlayer == null && NetworkManager.Singleton.LocalClient != null)
|
||||
{
|
||||
localPlayer = NetworkManager.Singleton.LocalClient.PlayerObject;
|
||||
}
|
||||
|
||||
// 방법 3: 직접 검색 (IsLocalPlayer인 플레이어 찾기)
|
||||
if (localPlayer == null)
|
||||
{
|
||||
var allPlayers = FindObjectsByType<NetworkPlayerController>(FindObjectsSortMode.None);
|
||||
foreach (var player in allPlayers)
|
||||
{
|
||||
if (player.IsLocalPlayer)
|
||||
{
|
||||
localPlayer = player.GetComponent<NetworkObject>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (localPlayer == null)
|
||||
{
|
||||
return ulong.MaxValue;
|
||||
}
|
||||
|
||||
var playerController = localPlayer.GetComponent<NetworkPlayerController>();
|
||||
if (playerController == null)
|
||||
{
|
||||
return ulong.MaxValue;
|
||||
}
|
||||
|
||||
return playerController.OwnerPlayerId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 모든 렌더러 활성화/비활성화
|
||||
/// </summary>
|
||||
private void SetRenderersEnabled(bool enabled)
|
||||
{
|
||||
if (_renderers == null) return;
|
||||
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
if (renderer != null)
|
||||
{
|
||||
renderer.enabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
// 체력바도 함께 처리
|
||||
if (_healthBar != null)
|
||||
{
|
||||
_healthBar.gameObject.SetActive(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnHealthChanged(int previousValue, int newValue)
|
||||
{
|
||||
if (_healthBar != null)
|
||||
@@ -106,6 +274,9 @@ namespace Northbound
|
||||
if (!IsServer) return;
|
||||
if (_currentHealth.Value <= 0) return;
|
||||
|
||||
// 무적 상태면 데미지 무시
|
||||
if (_isInvulnerable.Value) return;
|
||||
|
||||
// 공격자의 팀 확인
|
||||
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(attackerId, out NetworkObject attackerObj))
|
||||
{
|
||||
@@ -207,6 +378,24 @@ namespace Northbound
|
||||
|
||||
#endregion
|
||||
|
||||
#region Invulnerability & Healing
|
||||
|
||||
public bool IsInvulnerable() => _isInvulnerable.Value;
|
||||
|
||||
public void SetInvulnerable(bool value)
|
||||
{
|
||||
if (!IsServer) return;
|
||||
_isInvulnerable.Value = value;
|
||||
}
|
||||
|
||||
public void HealToFull()
|
||||
{
|
||||
if (!IsServer) return;
|
||||
_currentHealth.Value = maxHealth;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Northbound
|
||||
private Color[] _colors;
|
||||
private MeshRenderer _meshRenderer;
|
||||
private float _updateTimer;
|
||||
private ulong _localClientId;
|
||||
private ulong _localPlayerId;
|
||||
private bool _isInitialized;
|
||||
|
||||
private void Start()
|
||||
@@ -49,14 +49,15 @@ namespace Northbound
|
||||
{
|
||||
if (_isInitialized) return;
|
||||
|
||||
_localClientId = NetworkManager.Singleton.LocalClientId;
|
||||
|
||||
var fogSystem = FogOfWarSystem.Instance;
|
||||
if (fogSystem == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 로컬 플레이어의 실제 ID 가져오기 (없어도 텍스처는 생성)
|
||||
_localPlayerId = GetLocalPlayerId();
|
||||
|
||||
// 텍스처 생성 (Bilinear filtering for smooth edges)
|
||||
_fogTexture = new Texture2D(fogSystem.gridWidth, fogSystem.gridHeight)
|
||||
{
|
||||
@@ -105,11 +106,16 @@ namespace Northbound
|
||||
if (!_isInitialized && NetworkManager.Singleton != null && NetworkManager.Singleton.IsClient)
|
||||
{
|
||||
Initialize();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_isInitialized) return;
|
||||
|
||||
// 로컬 플레이어 ID가 아직 없으면 다시 시도
|
||||
if (_localPlayerId == ulong.MaxValue)
|
||||
{
|
||||
_localPlayerId = GetLocalPlayerId();
|
||||
}
|
||||
|
||||
_updateTimer += Time.deltaTime;
|
||||
if (_updateTimer >= updateInterval)
|
||||
{
|
||||
@@ -135,7 +141,12 @@ namespace Northbound
|
||||
if (_meshRenderer != null)
|
||||
_meshRenderer.enabled = true;
|
||||
|
||||
var fogData = fogSystem.GetPlayerFogData(_localClientId);
|
||||
var fogData = fogSystem.GetPlayerFogData(_localPlayerId);
|
||||
if (fogData == null)
|
||||
{
|
||||
// fogData가 null이면 아직 서버에서 데이터를 받지 못함
|
||||
return;
|
||||
}
|
||||
|
||||
for (int y = 0; y < fogSystem.gridHeight; y++)
|
||||
{
|
||||
@@ -164,6 +175,48 @@ namespace Northbound
|
||||
_fogTexture.Apply();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 로컬 플레이어의 실제 ID 가져오기
|
||||
/// </summary>
|
||||
private ulong GetLocalPlayerId()
|
||||
{
|
||||
if (NetworkManager.Singleton == null) return ulong.MaxValue;
|
||||
|
||||
// 방법 1: SpawnManager에서 찾기
|
||||
NetworkObject localPlayer = null;
|
||||
if (NetworkManager.Singleton.SpawnManager != null)
|
||||
{
|
||||
localPlayer = NetworkManager.Singleton.SpawnManager.GetLocalPlayerObject();
|
||||
}
|
||||
|
||||
// 방법 2: LocalClient에서 찾기
|
||||
if (localPlayer == null && NetworkManager.Singleton.LocalClient != null)
|
||||
{
|
||||
localPlayer = NetworkManager.Singleton.LocalClient.PlayerObject;
|
||||
}
|
||||
|
||||
// 방법 3: 직접 검색 (IsLocalPlayer인 플레이어 찾기)
|
||||
if (localPlayer == null)
|
||||
{
|
||||
var allPlayers = FindObjectsByType<NetworkPlayerController>(FindObjectsSortMode.None);
|
||||
foreach (var player in allPlayers)
|
||||
{
|
||||
if (player.IsLocalPlayer)
|
||||
{
|
||||
localPlayer = player.GetComponent<NetworkObject>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (localPlayer == null) return ulong.MaxValue;
|
||||
|
||||
var playerController = localPlayer.GetComponent<NetworkPlayerController>();
|
||||
if (playerController == null) return ulong.MaxValue;
|
||||
|
||||
return playerController.OwnerPlayerId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Apply box blur smoothing to create smooth circular vision edges
|
||||
/// </summary>
|
||||
|
||||
@@ -219,7 +219,7 @@ namespace Northbound
|
||||
|
||||
[Header("Editor Settings")]
|
||||
[Tooltip("Disable fog of war in Unity Editor for easier development")]
|
||||
public bool disableInEditor = true;
|
||||
public bool disableInEditor = false;
|
||||
|
||||
// 서버: 각 플레이어별 가시성 맵
|
||||
private Dictionary<ulong, FogOfWarData> _serverFogData = new Dictionary<ulong, FogOfWarData>();
|
||||
@@ -250,11 +250,18 @@ namespace Northbound
|
||||
{
|
||||
// Server: Register client connected callback to initialize fog data
|
||||
NetworkManager.Singleton.OnClientConnectedCallback += OnClientConnected;
|
||||
|
||||
// 호스트 자신의 데이터도 초기화 (OnClientConnected가 호스트에게는 호출되지 않을 수 있음)
|
||||
ulong hostClientId = NetworkManager.Singleton.LocalClientId;
|
||||
if (!_serverFogData.ContainsKey(hostClientId))
|
||||
{
|
||||
_serverFogData[hostClientId] = new FogOfWarData(gridWidth, gridHeight);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsClient && !IsServer)
|
||||
// 클라이언트는 로컬 데이터 초기화 (호스트 포함)
|
||||
if (IsClient)
|
||||
{
|
||||
// 클라이언트는 로컬 데이터 초기화
|
||||
_localFogData = new FogOfWarData(gridWidth, gridHeight);
|
||||
}
|
||||
}
|
||||
@@ -262,7 +269,7 @@ namespace Northbound
|
||||
private void OnClientConnected(ulong clientId)
|
||||
{
|
||||
if (!IsServer) return;
|
||||
|
||||
|
||||
// Ensure fog data exists for this client
|
||||
if (!_serverFogData.ContainsKey(clientId))
|
||||
{
|
||||
@@ -300,7 +307,8 @@ namespace Northbound
|
||||
if (!_visionProviders.Contains(provider))
|
||||
{
|
||||
_visionProviders.Add(provider);
|
||||
// Debug.Log($"<color=cyan>[FogOfWar] Vision Provider 등록: {provider.GetTransform().name} (Owner: {provider.GetOwnerId()})</color>");
|
||||
// 즉시 시야 업데이트 트리거
|
||||
_updateTimer = updateInterval;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -317,13 +325,18 @@ namespace Northbound
|
||||
/// </summary>
|
||||
public FogOfWarData GetPlayerFogData(ulong clientId)
|
||||
{
|
||||
// 클라이언트는 자신의 로컬 데이터 반환
|
||||
if (IsClient && !IsServer)
|
||||
// 클라이언트(호스트 포함)는 자신의 로컬 데이터 반환
|
||||
// 서버에서 계산된 시야 데이터는 ClientRpc로 동기화됨
|
||||
if (IsClient)
|
||||
{
|
||||
if (_localFogData == null)
|
||||
{
|
||||
_localFogData = new FogOfWarData(gridWidth, gridHeight);
|
||||
}
|
||||
return _localFogData;
|
||||
}
|
||||
|
||||
// 서버는 해당 클라이언트의 데이터 반환
|
||||
// 순수 서버(전용 서버)의 경우 서버 데이터 반환
|
||||
if (!_serverFogData.ContainsKey(clientId))
|
||||
{
|
||||
_serverFogData[clientId] = new FogOfWarData(gridWidth, gridHeight);
|
||||
@@ -342,12 +355,14 @@ namespace Northbound
|
||||
fogData.ClearCurrentVision();
|
||||
}
|
||||
|
||||
// 모든 시야 제공자의 시야 범위 계산
|
||||
// 모든 시야 제공자의 시야 범위 계산 (팀 시야 공유)
|
||||
foreach (var provider in _visionProviders)
|
||||
{
|
||||
if (provider == null || !provider.IsActive()) continue;
|
||||
|
||||
ulong ownerId = provider.GetOwnerId();
|
||||
TeamType providerTeam = provider.GetTeam();
|
||||
|
||||
if (!_serverFogData.ContainsKey(ownerId))
|
||||
{
|
||||
_serverFogData[ownerId] = new FogOfWarData(gridWidth, gridHeight);
|
||||
@@ -355,8 +370,9 @@ namespace Northbound
|
||||
|
||||
Vector3 position = provider.GetTransform().position;
|
||||
float visionRange = provider.GetVisionRange();
|
||||
|
||||
RevealArea(ownerId, position, visionRange);
|
||||
|
||||
// 같은 팀의 모든 멤버에게 시야 공유
|
||||
RevealAreaForTeam(providerTeam, position, visionRange);
|
||||
}
|
||||
|
||||
// 각 클라이언트에게 시야 데이터 전송
|
||||
@@ -365,11 +381,21 @@ namespace Northbound
|
||||
ulong clientId = kvp.Key;
|
||||
FogOfWarData fogData = kvp.Value;
|
||||
|
||||
// 해당 클라이언트가 여전히 연결되어 있는지 확인
|
||||
// 호스트의 경우 ConnectedClients에 없을 수 있으므로 별도 체크
|
||||
bool isHost = (clientId == NetworkManager.Singleton.LocalClientId);
|
||||
bool isConnected = NetworkManager.Singleton.ConnectedClients.ContainsKey(clientId);
|
||||
|
||||
if (!isHost && !isConnected)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 압축된 데이터로 전송
|
||||
byte[] visibleData = fogData.GetVisibleData();
|
||||
byte[] exploredData = fogData.GetExploredData();
|
||||
|
||||
SendFogDataToClientRpc(visibleData, exploredData,
|
||||
SendFogDataToClientRpc(visibleData, exploredData,
|
||||
new ClientRpcParams
|
||||
{
|
||||
Send = new ClientRpcSendParams
|
||||
@@ -380,6 +406,47 @@ namespace Northbound
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 같은 팀의 모든 멤버에게 시야 공개
|
||||
/// </summary>
|
||||
private void RevealAreaForTeam(TeamType team, Vector3 worldPosition, float radius)
|
||||
{
|
||||
// 해당 팀의 모든 멤버 찾기
|
||||
foreach (var kvp in _serverFogData)
|
||||
{
|
||||
ulong clientId = kvp.Key;
|
||||
|
||||
// 클라이언트의 팀 확인
|
||||
if (GetClientTeam(clientId) == team)
|
||||
{
|
||||
RevealArea(clientId, worldPosition, radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 클라이언트의 팀 가져오기
|
||||
/// </summary>
|
||||
private TeamType GetClientTeam(ulong clientId)
|
||||
{
|
||||
if (NetworkManager.Singleton == null) return TeamType.Neutral;
|
||||
|
||||
// 연결된 클라이언트에서 플레이어 오브젝트 찾기
|
||||
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects != null)
|
||||
{
|
||||
foreach (var netObj in NetworkManager.Singleton.SpawnManager.SpawnedObjects.Values)
|
||||
{
|
||||
var playerController = netObj.GetComponent<NetworkPlayerController>();
|
||||
if (playerController != null && playerController.OwnerPlayerId == clientId)
|
||||
{
|
||||
return playerController.GetTeam();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TeamType.Neutral;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 클라이언트에게 안개 데이터 전송
|
||||
/// </summary>
|
||||
|
||||
@@ -10,6 +10,9 @@ namespace Northbound
|
||||
public class FogOfWarVisibility : MonoBehaviour
|
||||
{
|
||||
[Header("Visibility Settings")]
|
||||
[Tooltip("Always show this object regardless of fog state (for core, important structures)")]
|
||||
public bool alwaysVisible = false;
|
||||
|
||||
[Tooltip("Show this object in explored areas (greyed out) or only when visible")]
|
||||
public bool showInExploredAreas = false;
|
||||
|
||||
@@ -19,10 +22,13 @@ namespace Northbound
|
||||
[Tooltip("Renderers to show/hide (auto-detected if empty)")]
|
||||
public Renderer[] renderers;
|
||||
|
||||
[Header("Height-Based Distant Visibility")]
|
||||
[Header("Extended Visibility")]
|
||||
[Tooltip("Enable visibility from farther away based on object height")]
|
||||
public bool enableDistantVisibility = true;
|
||||
|
||||
[Tooltip("Base visibility range (additional range beyond player vision)")]
|
||||
public float baseVisibilityRange = 10f;
|
||||
|
||||
[Tooltip("Visibility range multiplier per unit of height (default: 2x vision per 1m height)")]
|
||||
public float heightVisibilityMultiplier = 2.0f;
|
||||
|
||||
@@ -39,7 +45,7 @@ namespace Northbound
|
||||
private Material[] _originalMaterials;
|
||||
private bool _isVisible = false;
|
||||
private float _updateTimer;
|
||||
private ulong _localClientId;
|
||||
private ulong _localPlayerId;
|
||||
private bool _isInitialized = false;
|
||||
private float _objectHeight = 0f;
|
||||
|
||||
@@ -76,8 +82,17 @@ namespace Northbound
|
||||
// CRITICAL: Start hidden and stay hidden until fog system confirms visibility
|
||||
// Force initial hide - don't use SetVisible because _isVisible defaults to false
|
||||
// which would cause early return
|
||||
_isVisible = true; // Set to true first so SetVisible(false) actually runs
|
||||
SetVisible(false);
|
||||
// 단, alwaysVisible이면 항상 보임
|
||||
if (alwaysVisible)
|
||||
{
|
||||
_isVisible = false;
|
||||
SetVisible(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_isVisible = true; // Set to true first so SetVisible(false) actually runs
|
||||
SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -130,7 +145,13 @@ namespace Northbound
|
||||
{
|
||||
if (NetworkManager.Singleton != null && NetworkManager.Singleton.IsClient)
|
||||
{
|
||||
_localClientId = NetworkManager.Singleton.LocalClientId;
|
||||
_localPlayerId = GetLocalPlayerId();
|
||||
if (_localPlayerId == ulong.MaxValue)
|
||||
{
|
||||
// Local player not found yet - stay hidden
|
||||
SetVisible(false);
|
||||
return;
|
||||
}
|
||||
_isInitialized = true;
|
||||
|
||||
// Force immediate visibility update on initialization
|
||||
@@ -152,18 +173,67 @@ namespace Northbound
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 로컬 플레이어의 실제 ID 가져오기
|
||||
/// </summary>
|
||||
private ulong GetLocalPlayerId()
|
||||
{
|
||||
if (NetworkManager.Singleton == null) return ulong.MaxValue;
|
||||
|
||||
// 방법 1: SpawnManager에서 찾기
|
||||
NetworkObject localPlayer = null;
|
||||
if (NetworkManager.Singleton.SpawnManager != null)
|
||||
{
|
||||
localPlayer = NetworkManager.Singleton.SpawnManager.GetLocalPlayerObject();
|
||||
}
|
||||
|
||||
// 방법 2: LocalClient에서 찾기
|
||||
if (localPlayer == null && NetworkManager.Singleton.LocalClient != null)
|
||||
{
|
||||
localPlayer = NetworkManager.Singleton.LocalClient.PlayerObject;
|
||||
}
|
||||
|
||||
// 방법 3: 직접 검색 (IsLocalPlayer인 플레이어 찾기)
|
||||
if (localPlayer == null)
|
||||
{
|
||||
var allPlayers = FindObjectsByType<NetworkPlayerController>(FindObjectsSortMode.None);
|
||||
foreach (var player in allPlayers)
|
||||
{
|
||||
if (player.IsLocalPlayer)
|
||||
{
|
||||
localPlayer = player.GetComponent<NetworkObject>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (localPlayer == null) return ulong.MaxValue;
|
||||
|
||||
var playerController = localPlayer.GetComponent<NetworkPlayerController>();
|
||||
if (playerController == null) return ulong.MaxValue;
|
||||
|
||||
return playerController.OwnerPlayerId;
|
||||
}
|
||||
|
||||
private void UpdateVisibility()
|
||||
{
|
||||
var fogSystem = FogOfWarSystem.Instance;
|
||||
if (fogSystem == null)
|
||||
// 항상 보이는 객체는 fog 체크 안함
|
||||
if (alwaysVisible)
|
||||
{
|
||||
// No fog system - stay hidden for safety
|
||||
SetVisible(false);
|
||||
SetVisible(true);
|
||||
return;
|
||||
}
|
||||
|
||||
var fogSystem = FogOfWarSystem.Instance;
|
||||
if (fogSystem == null || !fogSystem.gameObject.activeInHierarchy)
|
||||
{
|
||||
// No fog system or disabled - always visible
|
||||
SetVisible(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Wait for fog data to be initialized
|
||||
var fogData = fogSystem.GetPlayerFogData(_localClientId);
|
||||
var fogData = fogSystem.GetPlayerFogData(_localPlayerId);
|
||||
if (fogData == null)
|
||||
{
|
||||
// Fog data not ready yet - stay hidden
|
||||
@@ -171,7 +241,7 @@ namespace Northbound
|
||||
return;
|
||||
}
|
||||
|
||||
FogOfWarState fogState = fogSystem.GetVisibilityState(_localClientId, transform.position);
|
||||
FogOfWarState fogState = fogSystem.GetVisibilityState(_localPlayerId, transform.position);
|
||||
|
||||
// Check for distant visibility based on height
|
||||
bool isDistantVisible = false;
|
||||
@@ -242,11 +312,14 @@ namespace Northbound
|
||||
// Calculate extended visibility range based on height
|
||||
// Taller objects can be seen from farther away
|
||||
// Formula: Base range + (height - minHeight) * multiplier
|
||||
float extendedRange = (_objectHeight - minHeightForDistantVisibility) * heightVisibilityMultiplier;
|
||||
float extendedRange = 0f;
|
||||
if (_objectHeight >= minHeightForDistantVisibility)
|
||||
{
|
||||
extendedRange = (_objectHeight - minHeightForDistantVisibility) * heightVisibilityMultiplier;
|
||||
}
|
||||
|
||||
// Get player's vision range (assume average vision provider has ~15 unit range)
|
||||
float baseVisionRange = 15f; // You can make this configurable
|
||||
float totalRange = baseVisionRange + extendedRange;
|
||||
// Total range = player vision + base visibility + height bonus
|
||||
float totalRange = baseVisibilityRange + extendedRange;
|
||||
|
||||
return distanceToPlayer <= totalRange;
|
||||
}
|
||||
|
||||
@@ -26,5 +26,10 @@ namespace Northbound
|
||||
/// 현재 활성화 상태인지
|
||||
/// </summary>
|
||||
bool IsActive();
|
||||
|
||||
/// <summary>
|
||||
/// 소속 팀 (팀 시야 공유용)
|
||||
/// </summary>
|
||||
TeamType GetTeam();
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,10 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
private UnitHealthBar _healthBar;
|
||||
private RespawnCountdownUI _respawnCountdownUI;
|
||||
|
||||
// 체력 자연 회복
|
||||
private float _lastCombatTime;
|
||||
private float _hpRegenAccumulator;
|
||||
|
||||
// 이 플레이어가 로컬 플레이어인지 확인
|
||||
|
||||
|
||||
@@ -61,9 +65,15 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
|
||||
public ulong OwnerPlayerId => _ownerPlayerId.Value;
|
||||
|
||||
// 중앙 집중식 입력 관리 - 다른 컴포넌트에서 참조
|
||||
public PlayerInputActions InputActions => _inputActions;
|
||||
|
||||
// 소유자 변경 이벤트
|
||||
public event Action<ulong> OnOwnerChanged;
|
||||
|
||||
// 입력 시스템 초기화 완료 이벤트
|
||||
public event Action OnInputInitialized;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
_controller = GetComponent<CharacterController>();
|
||||
@@ -137,6 +147,9 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
|
||||
_inputActions = new PlayerInputActions();
|
||||
_inputActions.Enable();
|
||||
|
||||
// 입력 초기화 완료 이벤트 발생
|
||||
OnInputInitialized?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -148,6 +161,28 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
_ownerPlayerId.Value = ownerPlayerId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 입력 강제 복구 (입력이 멈췄을 때 호출)
|
||||
/// </summary>
|
||||
public void ForceRecoverInput()
|
||||
{
|
||||
if (!IsLocalPlayer) return;
|
||||
|
||||
// InputActions가 없으면 초기화 시도
|
||||
if (_inputActions == null)
|
||||
{
|
||||
TryInitializeLocalPlayer();
|
||||
return;
|
||||
}
|
||||
|
||||
// InputActions가 있지만 비활성화되어 있으면 활성화
|
||||
if (!_inputActions.Player.enabled && _currentHealth.Value > 0)
|
||||
{
|
||||
_inputActions.Enable();
|
||||
Debug.Log("[NetworkPlayerController] 입력 강제 복구 완료");
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
_currentHealth.OnValueChanged -= OnHealthChanged;
|
||||
@@ -161,13 +196,47 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
base.OnNetworkDespawn();
|
||||
}
|
||||
|
||||
// 이동 동기화 설정
|
||||
private float _moveSendInterval = 0.016f; // ~60Hz 전송
|
||||
private float _moveSendTimer;
|
||||
private Vector2 _lastSentMoveInput;
|
||||
|
||||
// 서버 측 이동 입력 저장
|
||||
private Vector2 _serverMoveInput;
|
||||
|
||||
// 입력 복구 체크
|
||||
private float _inputRecoveryCheckInterval = 1f; // 1초마다 체크
|
||||
private float _inputRecoveryCheckTimer;
|
||||
|
||||
void Update()
|
||||
{
|
||||
// 서버에서 체력 자연 회복 처리
|
||||
if (IsServer)
|
||||
{
|
||||
UpdateHealthRegeneration();
|
||||
}
|
||||
|
||||
// 로컬 플레이어만 입력 처리
|
||||
if (!IsLocalPlayer) return;
|
||||
|
||||
// 입력 시스템이 초기화되지 않았으면 스킵
|
||||
if (_inputActions == null) return;
|
||||
// 입력 시스템이 초기화되지 않았으면 초기화 시도
|
||||
if (_inputActions == null)
|
||||
{
|
||||
TryInitializeLocalPlayer();
|
||||
return;
|
||||
}
|
||||
|
||||
// 주기적으로 입력 상태 확인 및 자동 복구 (살아있는데 입력이 비활성화된 경우)
|
||||
_inputRecoveryCheckTimer += Time.deltaTime;
|
||||
if (_inputRecoveryCheckTimer >= _inputRecoveryCheckInterval)
|
||||
{
|
||||
_inputRecoveryCheckTimer = 0f;
|
||||
if (_currentHealth.Value > 0 && !_inputActions.Player.enabled)
|
||||
{
|
||||
Debug.LogWarning("[NetworkPlayerController] 입력이 비활성화되어 있음 - 자동 복구");
|
||||
_inputActions.Enable();
|
||||
}
|
||||
}
|
||||
|
||||
// 죽었으면 이동 불가
|
||||
if (_currentHealth.Value <= 0) return;
|
||||
@@ -175,47 +244,65 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
// 액션/상호작용 중이면 이동 불가
|
||||
var attackAction = GetComponent<AttackAction>();
|
||||
var playerInteraction = GetComponent<PlayerInteraction>();
|
||||
|
||||
|
||||
bool isActionBlocked = (attackAction != null && attackAction.IsAttacking) ||
|
||||
(playerInteraction != null && playerInteraction.IsInteracting);
|
||||
|
||||
if (isActionBlocked)
|
||||
|
||||
if (isActionBlocked)
|
||||
{
|
||||
// 서버에 이동 중지 알림 (애니메이션 포함)
|
||||
MoveServerRpc(Vector2.zero);
|
||||
// 서버에 이동 중지 알림
|
||||
if (_lastSentMoveInput != Vector2.zero)
|
||||
{
|
||||
_lastSentMoveInput = Vector2.zero;
|
||||
MoveServerRpc(Vector2.zero);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
_moveInput = _inputActions.Player.Move.ReadValue<Vector2>();
|
||||
|
||||
// 서버에 이동 요청 전송 (애니메이션 포함)
|
||||
MoveServerRpc(_moveInput);
|
||||
|
||||
// 일정 간격으로만 서버에 전송 (네트워크 부하 감소)
|
||||
_moveSendTimer += Time.deltaTime;
|
||||
if (_moveSendTimer >= _moveSendInterval || _moveInput != _lastSentMoveInput)
|
||||
{
|
||||
_moveSendTimer = 0f;
|
||||
_lastSentMoveInput = _moveInput;
|
||||
MoveServerRpc(_moveInput);
|
||||
}
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
// 서버에서만 물리 이동 처리
|
||||
if (!IsServer) return;
|
||||
if (_currentHealth.Value <= 0) return;
|
||||
|
||||
Vector3 move = new Vector3(_serverMoveInput.x, 0, _serverMoveInput.y).normalized;
|
||||
|
||||
if (move.magnitude >= 0.1f)
|
||||
{
|
||||
Quaternion targetRotation = Quaternion.LookRotation(move);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.fixedDeltaTime);
|
||||
|
||||
if (_controller != null)
|
||||
{
|
||||
float moveSpeed = _playerStats?.GetMoveSpeed() ?? 5f;
|
||||
_controller.Move(move * moveSpeed * Time.fixedDeltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
// 애니메이션 업데이트
|
||||
if (_networkAnimator != null)
|
||||
{
|
||||
_networkAnimator.Animator.SetFloat("MoveSpeed", move.magnitude);
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Server)]
|
||||
private void MoveServerRpc(Vector2 moveInput)
|
||||
{
|
||||
// 죽었으면 이동 불가
|
||||
if (_currentHealth.Value <= 0) return;
|
||||
|
||||
Vector3 move = new Vector3(moveInput.x, 0, moveInput.y).normalized;
|
||||
|
||||
// NetworkAnimator로 애니메이션 동기화
|
||||
if (_networkAnimator != null)
|
||||
{
|
||||
_networkAnimator.Animator.SetFloat("MoveSpeed", move.magnitude);
|
||||
}
|
||||
|
||||
if (move.magnitude >= 0.1f)
|
||||
{
|
||||
Quaternion targetRotation = Quaternion.LookRotation(move);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
|
||||
|
||||
if (_controller != null)
|
||||
{
|
||||
_controller.Move(move * (_playerStats?.GetMoveSpeed() ?? 5f) * Time.deltaTime);
|
||||
}
|
||||
}
|
||||
// 서버에 입력만 저장, 실제 이동은 FixedUpdate에서 처리
|
||||
_serverMoveInput = moveInput;
|
||||
}
|
||||
|
||||
#region ITeamMember Implementation
|
||||
@@ -257,6 +344,9 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
int actualDamage = Mathf.Min(damage, _currentHealth.Value);
|
||||
_currentHealth.Value -= actualDamage;
|
||||
|
||||
// 전투 상태 기록 (회복 방지)
|
||||
MarkInCombat();
|
||||
|
||||
// 데미지 이펙트
|
||||
ShowDamageEffectClientRpc();
|
||||
|
||||
@@ -478,6 +568,62 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
|
||||
public int GetCurrentHealth() => _currentHealth.Value;
|
||||
|
||||
/// <summary>
|
||||
/// 전투 상태 기록 (데미지를 받거나 입힐 때 호출)
|
||||
/// </summary>
|
||||
public void MarkInCombat()
|
||||
{
|
||||
_lastCombatTime = Time.time;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 현재 전투 중인지 확인 (회복 대기 시간이 지났는지)
|
||||
/// </summary>
|
||||
public bool IsInCombat()
|
||||
{
|
||||
if (_playerStats == null) return false;
|
||||
float regenDelay = _playerStats.GetHpRegenDelay();
|
||||
return (Time.time - _lastCombatTime) < regenDelay;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 서버에서 체력 자연 회복 처리
|
||||
/// </summary>
|
||||
private void UpdateHealthRegeneration()
|
||||
{
|
||||
// 죽었으면 회복하지 않음
|
||||
if (_currentHealth.Value <= 0) return;
|
||||
|
||||
// 이미 최대 체력이면 회복하지 않음
|
||||
int maxHealth = GetMaxHealth();
|
||||
if (_currentHealth.Value >= maxHealth)
|
||||
{
|
||||
_hpRegenAccumulator = 0f;
|
||||
return;
|
||||
}
|
||||
|
||||
// 전투 중이면 회복하지 않음
|
||||
if (IsInCombat()) return;
|
||||
|
||||
// 회복량 계산
|
||||
float hpRegen = _playerStats?.GetHpRegen() ?? 0f;
|
||||
if (hpRegen <= 0f) return;
|
||||
|
||||
// 프레임당 회복량 누적
|
||||
_hpRegenAccumulator += hpRegen * Time.deltaTime;
|
||||
|
||||
// 1 이상 누적되면 정수만큼 회복
|
||||
if (_hpRegenAccumulator >= 1f)
|
||||
{
|
||||
int healAmount = Mathf.FloorToInt(_hpRegenAccumulator);
|
||||
_hpRegenAccumulator -= healAmount;
|
||||
|
||||
// 실제 회복
|
||||
int actualHeal = Mathf.Min(healAmount, maxHealth - _currentHealth.Value);
|
||||
_currentHealth.Value += actualHeal;
|
||||
}
|
||||
}
|
||||
|
||||
public int GetMaxHealth() => _playerStats?.GetMaxHp() ?? 100;
|
||||
|
||||
public float GetHealthPercentage()
|
||||
|
||||
@@ -17,11 +17,11 @@ namespace Northbound
|
||||
[Header("Animation")]
|
||||
public bool playAnimations = true;
|
||||
|
||||
private PlayerInputActions _inputActions;
|
||||
private Dictionary<string, IAction> _actions = new Dictionary<string, IAction>();
|
||||
private Animator _animator;
|
||||
private NetworkAnimator _networkAnimator;
|
||||
private NetworkPlayerController _networkPlayerController;
|
||||
private bool _isInputInitialized = false;
|
||||
|
||||
// 로컬 플레이어인지 확인
|
||||
private bool IsLocalPlayer => _networkPlayerController != null && _networkPlayerController.IsLocalPlayer;
|
||||
@@ -49,12 +49,19 @@ namespace Northbound
|
||||
if (_networkPlayerController != null)
|
||||
{
|
||||
_networkPlayerController.OnOwnerChanged += OnOwnerPlayerIdChanged;
|
||||
_networkPlayerController.OnInputInitialized += TryInitializeInput;
|
||||
}
|
||||
|
||||
// 이미 로컬 플레이어면 입력 초기화
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Start에서 다시 한번 확인 (이벤트 타이밍 문제 해결)
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void OnOwnerPlayerIdChanged(ulong newOwnerId)
|
||||
{
|
||||
TryInitializeInput();
|
||||
@@ -63,11 +70,11 @@ namespace Northbound
|
||||
private void TryInitializeInput()
|
||||
{
|
||||
if (!IsLocalPlayer) return;
|
||||
if (_inputActions != null) return;
|
||||
if (_isInputInitialized) return; // 이미 초기화됨
|
||||
if (_networkPlayerController.InputActions == null) return; // 아직 InputActions가 없음
|
||||
|
||||
_inputActions = new PlayerInputActions();
|
||||
_inputActions.Player.Attack.performed += OnAttack;
|
||||
_inputActions.Enable();
|
||||
_isInputInitialized = true;
|
||||
_networkPlayerController.InputActions.Player.Attack.performed += OnAttack;
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
@@ -75,13 +82,13 @@ namespace Northbound
|
||||
if (_networkPlayerController != null)
|
||||
{
|
||||
_networkPlayerController.OnOwnerChanged -= OnOwnerPlayerIdChanged;
|
||||
}
|
||||
_networkPlayerController.OnInputInitialized -= TryInitializeInput;
|
||||
|
||||
if (_inputActions != null)
|
||||
{
|
||||
_inputActions.Player.Attack.performed -= OnAttack;
|
||||
_inputActions.Disable();
|
||||
_inputActions.Dispose();
|
||||
// 입력 이벤트 해제
|
||||
if (_networkPlayerController.InputActions != null)
|
||||
{
|
||||
_networkPlayerController.InputActions.Player.Attack.performed -= OnAttack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,11 +133,7 @@ namespace Northbound
|
||||
|
||||
override public void OnDestroy()
|
||||
{
|
||||
if (_inputActions != null)
|
||||
{
|
||||
_inputActions.Dispose();
|
||||
}
|
||||
|
||||
// 입력 정리는 NetworkPlayerController에서 담당
|
||||
base.OnDestroy();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
using Northbound;
|
||||
using UnityEngine;
|
||||
|
||||
[RequireComponent(typeof(Rigidbody))]
|
||||
public class PlayerController : MonoBehaviour
|
||||
{
|
||||
[Header("Movement Settings")]
|
||||
[SerializeField] private float moveSpeed = 5f;
|
||||
|
||||
private Rigidbody rb;
|
||||
private Vector3 moveDirection;
|
||||
private PlayerInteraction playerInteraction;
|
||||
|
||||
void Start()
|
||||
{
|
||||
rb = GetComponent<Rigidbody>();
|
||||
rb.constraints = RigidbodyConstraints.FreezeRotation;
|
||||
playerInteraction = GetComponent<PlayerInteraction>();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (playerInteraction != null && playerInteraction.IsInteracting)
|
||||
return;
|
||||
|
||||
float horizontal = Input.GetAxisRaw("Horizontal");
|
||||
float vertical = Input.GetAxisRaw("Vertical");
|
||||
|
||||
moveDirection = new Vector3(horizontal, 0f, vertical).normalized;
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
rb.linearVelocity = new Vector3(
|
||||
moveDirection.x * moveSpeed,
|
||||
rb.linearVelocity.y,
|
||||
moveDirection.z * moveSpeed
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a3e5b8c4d2f1a9e6b0c3d7e8f1a2b3c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -33,7 +33,6 @@ namespace Northbound
|
||||
[Header("Worker")]
|
||||
public Worker assignedWorker;
|
||||
|
||||
private PlayerInputActions _inputActions;
|
||||
private IInteractable _currentInteractable;
|
||||
private IInteractable _unavailableInteractable;
|
||||
private Camera _mainCamera;
|
||||
@@ -48,6 +47,7 @@ namespace Northbound
|
||||
|
||||
private NetworkPlayerController _networkPlayerController;
|
||||
private PlayerStats _playerStats;
|
||||
private bool _isInputInitialized = false;
|
||||
|
||||
public bool IsInteracting => _isInteracting;
|
||||
public float WorkPower => _playerStats?.GetManpower() ?? 10f;
|
||||
@@ -69,7 +69,7 @@ namespace Northbound
|
||||
{
|
||||
_animator = GetComponent<Animator>();
|
||||
_equipmentSocket = GetComponent<EquipmentSocket>();
|
||||
|
||||
|
||||
if (rayOrigin == null)
|
||||
rayOrigin = transform;
|
||||
|
||||
@@ -77,12 +77,19 @@ namespace Northbound
|
||||
if (_networkPlayerController != null)
|
||||
{
|
||||
_networkPlayerController.OnOwnerChanged += OnOwnerPlayerIdChanged;
|
||||
_networkPlayerController.OnInputInitialized += TryInitializeInput;
|
||||
}
|
||||
|
||||
// 이미 로컬 플레이어면 입력 초기화
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Start에서 다시 한번 확인 (이벤트 타이밍 문제 해결)
|
||||
TryInitializeInput();
|
||||
}
|
||||
|
||||
private void OnOwnerPlayerIdChanged(ulong newOwnerId)
|
||||
{
|
||||
TryInitializeInput();
|
||||
@@ -91,12 +98,12 @@ namespace Northbound
|
||||
private void TryInitializeInput()
|
||||
{
|
||||
if (!IsLocalPlayer) return;
|
||||
if (_inputActions != null) return;
|
||||
if (_isInputInitialized) return; // 이미 초기화됨
|
||||
if (_networkPlayerController.InputActions == null) return; // 아직 InputActions가 없음
|
||||
|
||||
_isInputInitialized = true;
|
||||
_mainCamera = Camera.main;
|
||||
_inputActions = new PlayerInputActions();
|
||||
_inputActions.Player.Interact.performed += OnInteract;
|
||||
_inputActions.Enable();
|
||||
_networkPlayerController.InputActions.Player.Interact.performed += OnInteract;
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
@@ -104,13 +111,13 @@ namespace Northbound
|
||||
if (_networkPlayerController != null)
|
||||
{
|
||||
_networkPlayerController.OnOwnerChanged -= OnOwnerPlayerIdChanged;
|
||||
}
|
||||
_networkPlayerController.OnInputInitialized -= TryInitializeInput;
|
||||
|
||||
if (_inputActions != null)
|
||||
{
|
||||
_inputActions.Player.Interact.performed -= OnInteract;
|
||||
_inputActions.Disable();
|
||||
_inputActions.Dispose();
|
||||
// 입력 이벤트 해제
|
||||
if (_networkPlayerController.InputActions != null)
|
||||
{
|
||||
_networkPlayerController.InputActions.Player.Interact.performed -= OnInteract;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,10 +409,7 @@ namespace Northbound
|
||||
|
||||
public override void OnDestroy()
|
||||
{
|
||||
if (_inputActions != null)
|
||||
{
|
||||
_inputActions.Dispose();
|
||||
}
|
||||
// 입력 정리는 NetworkPlayerController에서 담당
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,12 @@ namespace Northbound
|
||||
[SerializeField] private float baseSight = 10f;
|
||||
[SerializeField] private float baseAttackRange = 2f;
|
||||
|
||||
[Header("Health Regeneration")]
|
||||
[Tooltip("초당 체력 회복량")]
|
||||
[SerializeField] private float baseHpRegen = 2f;
|
||||
[Tooltip("전투 종료 후 회복 시작까지의 대기 시간 (초)")]
|
||||
[SerializeField] private float baseHpRegenDelay = 5f;
|
||||
|
||||
private PlayerUpgradeManager _upgradeManager;
|
||||
|
||||
private void Awake()
|
||||
@@ -129,6 +135,25 @@ namespace Northbound
|
||||
return baseAttackRange + bonus;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 초당 체력 회복량 반환
|
||||
/// </summary>
|
||||
public float GetHpRegen()
|
||||
{
|
||||
float bonus = CalculateStatBonus("player_hp_regen");
|
||||
return baseHpRegen + bonus;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 전투 종료 후 회복 시작 대기 시간 반환 (초)
|
||||
/// </summary>
|
||||
public float GetHpRegenDelay()
|
||||
{
|
||||
float bonus = CalculateStatBonus("player_hp_regen_delay");
|
||||
// delay는 보통 줄어드는 것이 좋으므로 음수 bonus는 감소로 처리
|
||||
return Mathf.Max(1f, baseHpRegenDelay + bonus);
|
||||
}
|
||||
|
||||
#region Base Stat Setters (에디터/초기화용)
|
||||
|
||||
public void SetBaseMaxHp(int value) => baseMaxHp = value;
|
||||
@@ -138,6 +163,8 @@ namespace Northbound
|
||||
public void SetBaseMoveSpeed(float value) => baseMoveSpeed = value;
|
||||
public void SetBaseSight(float value) => baseSight = value;
|
||||
public void SetBaseAttackRange(float value) => baseAttackRange = value;
|
||||
public void SetBaseHpRegen(float value) => baseHpRegen = value;
|
||||
public void SetBaseHpRegenDelay(float value) => baseHpRegenDelay = value;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -153,7 +180,9 @@ namespace Northbound
|
||||
$" Manpower: {GetManpower()} (기본: {baseManpower})\n" +
|
||||
$" Move Speed: {GetMoveSpeed()} (기본: {baseMoveSpeed})\n" +
|
||||
$" Sight: {GetSight()} (기본: {baseSight})\n" +
|
||||
$" Attack Range: {GetAttackRange()} (기본: {baseAttackRange})");
|
||||
$" Attack Range: {GetAttackRange()} (기본: {baseAttackRange})\n" +
|
||||
$" HP Regen: {GetHpRegen():F1}/s (기본: {baseHpRegen})\n" +
|
||||
$" HP Regen Delay: {GetHpRegenDelay():F1}s (기본: {baseHpRegenDelay})");
|
||||
|
||||
if (_upgradeManager != null)
|
||||
{
|
||||
|
||||
@@ -9,10 +9,12 @@ namespace Northbound
|
||||
public class PlayerVisionProvider : NetworkBehaviour, IVisionProvider
|
||||
{
|
||||
private PlayerStats _playerStats;
|
||||
private NetworkPlayerController _playerController;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
_playerStats = GetComponent<PlayerStats>();
|
||||
_playerController = GetComponent<NetworkPlayerController>();
|
||||
if (IsServer)
|
||||
{
|
||||
FogOfWarSystem.Instance?.RegisterVisionProvider(this);
|
||||
@@ -27,10 +29,13 @@ namespace Northbound
|
||||
}
|
||||
}
|
||||
|
||||
public ulong GetOwnerId() => OwnerClientId;
|
||||
// NetworkPlayerController.OwnerPlayerId 사용 (실제 플레이어 ID)
|
||||
// OwnerClientId는 서버 소유권이므로 잘못된 ID 반환
|
||||
public ulong GetOwnerId() => _playerController?.OwnerPlayerId ?? OwnerClientId;
|
||||
public float GetVisionRange() => _playerStats?.GetSight() ?? 10f;
|
||||
public Transform GetTransform() => transform;
|
||||
public bool IsActive() => IsSpawned;
|
||||
public TeamType GetTeam() => _playerController?.GetTeam() ?? TeamType.Player;
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
|
||||
@@ -28,7 +28,74 @@ namespace Northbound
|
||||
public GameObject pickupEffectPrefab;
|
||||
public Transform effectSpawnPoint;
|
||||
|
||||
// 가시성 동기화 (기본적으로 숨김)
|
||||
private NetworkVariable<bool> _isVisible = new NetworkVariable<bool>(
|
||||
false,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server
|
||||
);
|
||||
|
||||
private bool _isCollected = false;
|
||||
private Renderer[] _renderers;
|
||||
private Collider[] _colliders;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
base.OnNetworkSpawn();
|
||||
|
||||
// 렌더러와 콜라이더 캐시
|
||||
_renderers = GetComponentsInChildren<Renderer>();
|
||||
_colliders = GetComponentsInChildren<Collider>();
|
||||
|
||||
// 초기 가시성 적용
|
||||
UpdateVisibility(_isVisible.Value);
|
||||
|
||||
// 가시성 변경 이벤트 구독
|
||||
_isVisible.OnValueChanged += OnVisibilityChanged;
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
_isVisible.OnValueChanged -= OnVisibilityChanged;
|
||||
base.OnNetworkDespawn();
|
||||
}
|
||||
|
||||
private void OnVisibilityChanged(bool previousValue, bool newValue)
|
||||
{
|
||||
UpdateVisibility(newValue);
|
||||
}
|
||||
|
||||
private void UpdateVisibility(bool visible)
|
||||
{
|
||||
if (_renderers != null)
|
||||
{
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
if (renderer != null)
|
||||
renderer.enabled = visible;
|
||||
}
|
||||
}
|
||||
|
||||
if (_colliders != null)
|
||||
{
|
||||
foreach (var collider in _colliders)
|
||||
{
|
||||
if (collider != null)
|
||||
collider.enabled = visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 가시성 설정 (서버만 호출 가능)
|
||||
/// </summary>
|
||||
public void SetVisible(bool visible)
|
||||
{
|
||||
if (IsServer)
|
||||
{
|
||||
_isVisible.Value = visible;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanInteract(ulong playerId)
|
||||
{
|
||||
|
||||
391
Assets/Scripts/UI/TeamHealthUI.cs
Normal file
391
Assets/Scripts/UI/TeamHealthUI.cs
Normal file
@@ -0,0 +1,391 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using Unity.Netcode;
|
||||
|
||||
namespace Northbound
|
||||
{
|
||||
/// <summary>
|
||||
/// 팀원 체력 UI 관리
|
||||
/// Slot 1: 로컬 플레이어 (본인)
|
||||
/// Slot 2~4: 다른 플레이어 (플레이어 ID 순)
|
||||
/// </summary>
|
||||
public class TeamHealthUI : MonoBehaviour
|
||||
{
|
||||
[Header("Slot References (자동 할당됨)")]
|
||||
[SerializeField] private TeamCardSlot slot1; // 로컬 플레이어 (본인)
|
||||
[SerializeField] private TeamCardSlot slot2; // 다른 플레이어 1
|
||||
[SerializeField] private TeamCardSlot slot3; // 다른 플레이어 2
|
||||
[SerializeField] private TeamCardSlot slot4; // 다른 플레이어 3
|
||||
|
||||
private Dictionary<ulong, NetworkPlayerController> _playerControllers = new Dictionary<ulong, NetworkPlayerController>();
|
||||
private Dictionary<ulong, TeamCardSlot> _playerSlotMapping = new Dictionary<ulong, TeamCardSlot>();
|
||||
private ulong _localPlayerId = ulong.MaxValue;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// 슬롯 초기화
|
||||
InitializeSlots();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// 네트워크 이벤트 구독
|
||||
if (NetworkManager.Singleton != null)
|
||||
{
|
||||
NetworkManager.Singleton.OnClientConnectedCallback += OnClientConnected;
|
||||
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnect;
|
||||
}
|
||||
|
||||
// 이미 연결된 플레이어들 처리
|
||||
RefreshAllPlayers();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
// 이벤트 구독 해제
|
||||
if (NetworkManager.Singleton != null)
|
||||
{
|
||||
NetworkManager.Singleton.OnClientConnectedCallback -= OnClientConnected;
|
||||
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnect;
|
||||
}
|
||||
|
||||
// 모든 플레이어 체력 변경 이벤트 구독 해제
|
||||
foreach (var kvp in _playerControllers)
|
||||
{
|
||||
if (kvp.Value != null)
|
||||
{
|
||||
kvp.Value.OnOwnerChanged -= OnPlayerOwnerChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeSlots()
|
||||
{
|
||||
// 슬롯 자동 할당 - 이름으로 찾기
|
||||
if (slot1 == null) slot1 = FindSlotByName("Slot_1");
|
||||
if (slot2 == null) slot2 = FindSlotByName("Slot_2");
|
||||
if (slot3 == null) slot3 = FindSlotByName("Slot_3");
|
||||
if (slot4 == null) slot4 = FindSlotByName("Slot_4");
|
||||
|
||||
// 모든 슬롯 초기화 (비어있음)
|
||||
slot1?.Clear();
|
||||
slot2?.Clear();
|
||||
slot3?.Clear();
|
||||
slot4?.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 이름으로 슬롯 찾기 (자식의 자식 프리팹까지 검색)
|
||||
/// </summary>
|
||||
private TeamCardSlot FindSlotByName(string slotName)
|
||||
{
|
||||
// 직접 자식에서 찾기
|
||||
Transform slotTransform = transform.Find(slotName);
|
||||
if (slotTransform == null) return null;
|
||||
|
||||
// 자식 프리팹에서 TeamCardSlot 찾기 또는 생성
|
||||
TeamCardSlot slot = slotTransform.GetComponentInChildren<TeamCardSlot>(true);
|
||||
if (slot == null)
|
||||
{
|
||||
// TeamCardSlot 컴포넌트를 자식 프리팹의 루트에 추가
|
||||
// 프리팹 인스턴스의 첫 번째 자식이 실제 카드 프리팹
|
||||
if (slotTransform.childCount > 0)
|
||||
{
|
||||
GameObject cardObj = slotTransform.GetChild(0).gameObject;
|
||||
slot = cardObj.AddComponent<TeamCardSlot>();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 자식이 없으면 슬롯 자체에 추가
|
||||
slot = slotTransform.gameObject.AddComponent<TeamCardSlot>();
|
||||
}
|
||||
}
|
||||
|
||||
return slot;
|
||||
}
|
||||
|
||||
private void OnClientConnected(ulong clientId)
|
||||
{
|
||||
// 약간의 딜레이 후 플레이어 컨트롤러가 생성될 때까지 대기
|
||||
Invoke(nameof(RefreshAllPlayers), 0.5f);
|
||||
}
|
||||
|
||||
private void OnClientDisconnect(ulong clientId)
|
||||
{
|
||||
// 플레이어 제거
|
||||
RemovePlayer(clientId);
|
||||
}
|
||||
|
||||
private void RefreshAllPlayers()
|
||||
{
|
||||
// 로컬 플레이어 ID 확인
|
||||
if (NetworkManager.Singleton != null)
|
||||
{
|
||||
_localPlayerId = NetworkManager.Singleton.LocalClientId;
|
||||
}
|
||||
|
||||
// 모든 NetworkPlayerController 찾기
|
||||
var allPlayers = FindObjectsByType<NetworkPlayerController>(FindObjectsSortMode.None);
|
||||
|
||||
// 기존 매핑 클리어
|
||||
_playerControllers.Clear();
|
||||
|
||||
// 플레이어 등록
|
||||
foreach (var player in allPlayers)
|
||||
{
|
||||
ulong playerId = player.OwnerPlayerId;
|
||||
if (playerId != ulong.MaxValue)
|
||||
{
|
||||
_playerControllers[playerId] = player;
|
||||
player.OnOwnerChanged -= OnPlayerOwnerChanged;
|
||||
player.OnOwnerChanged += OnPlayerOwnerChanged;
|
||||
}
|
||||
}
|
||||
|
||||
// UI 업데이트
|
||||
UpdateAllSlots();
|
||||
}
|
||||
|
||||
private void OnPlayerOwnerChanged(ulong newOwnerId)
|
||||
{
|
||||
// 플레이어 소유자 변경 시 갱신
|
||||
Invoke(nameof(RefreshAllPlayers), 0.1f);
|
||||
}
|
||||
|
||||
private void UpdateAllSlots()
|
||||
{
|
||||
// 기존 매핑 클리어
|
||||
_playerSlotMapping.Clear();
|
||||
slot1?.Clear();
|
||||
slot2?.Clear();
|
||||
slot3?.Clear();
|
||||
slot4?.Clear();
|
||||
|
||||
// 로컬 플레이어를 Slot 1에 배치
|
||||
if (_playerControllers.TryGetValue(_localPlayerId, out var localPlayer))
|
||||
{
|
||||
slot1?.SetPlayer(localPlayer, true);
|
||||
_playerSlotMapping[_localPlayerId] = slot1;
|
||||
}
|
||||
|
||||
// 다른 플레이어들을 ID 순으로 Slot 2~4에 배치
|
||||
var otherPlayers = new List<KeyValuePair<ulong, NetworkPlayerController>>();
|
||||
foreach (var kvp in _playerControllers)
|
||||
{
|
||||
if (kvp.Key != _localPlayerId)
|
||||
{
|
||||
otherPlayers.Add(kvp);
|
||||
}
|
||||
}
|
||||
|
||||
// ID 순으로 정렬
|
||||
otherPlayers.Sort((a, b) => a.Key.CompareTo(b.Key));
|
||||
|
||||
// 슬롯에 배치
|
||||
var slots = new[] { slot2, slot3, slot4 };
|
||||
for (int i = 0; i < otherPlayers.Count && i < slots.Length; i++)
|
||||
{
|
||||
var player = otherPlayers[i];
|
||||
slots[i]?.SetPlayer(player.Value, false);
|
||||
_playerSlotMapping[player.Key] = slots[i];
|
||||
}
|
||||
}
|
||||
|
||||
private void RemovePlayer(ulong playerId)
|
||||
{
|
||||
if (_playerControllers.TryGetValue(playerId, out var player))
|
||||
{
|
||||
player.OnOwnerChanged -= OnPlayerOwnerChanged;
|
||||
_playerControllers.Remove(playerId);
|
||||
}
|
||||
|
||||
if (_playerSlotMapping.TryGetValue(playerId, out var slot))
|
||||
{
|
||||
slot?.Clear();
|
||||
_playerSlotMapping.Remove(playerId);
|
||||
}
|
||||
|
||||
// 슬롯 재배치
|
||||
UpdateAllSlots();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 개별 팀 카드 슬롯
|
||||
/// TeamCard_Large 또는 TeamCard_Small 프리팹에 붙여서 사용
|
||||
/// </summary>
|
||||
public class TeamCardSlot : MonoBehaviour
|
||||
{
|
||||
[Header("UI References (자동 할당됨)")]
|
||||
[SerializeField] private TextMeshProUGUI _playerNameText;
|
||||
[SerializeField] private Image _hpBarFill;
|
||||
[SerializeField] private TextMeshProUGUI _hpText;
|
||||
|
||||
private NetworkPlayerController _player;
|
||||
private bool _isLocalPlayer;
|
||||
private int _lastHealth = -1;
|
||||
private int _lastMaxHealth = -1;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// 자동으로 UI 요소 찾기
|
||||
FindUIElements();
|
||||
}
|
||||
|
||||
private void FindUIElements()
|
||||
{
|
||||
// PlayerNameText 찾기 - 이름으로 정확히 찾기
|
||||
if (_playerNameText == null)
|
||||
{
|
||||
Transform nameText = FindDeepChild(transform, "PlayerNameText");
|
||||
if (nameText != null)
|
||||
{
|
||||
_playerNameText = nameText.GetComponent<TextMeshProUGUI>();
|
||||
}
|
||||
}
|
||||
|
||||
// HPBarFill 찾기
|
||||
if (_hpBarFill == null)
|
||||
{
|
||||
Transform hpFill = FindDeepChild(transform, "HPBarFill");
|
||||
if (hpFill != null)
|
||||
{
|
||||
_hpBarFill = hpFill.GetComponent<Image>();
|
||||
}
|
||||
}
|
||||
|
||||
// HPText 찾기
|
||||
if (_hpText == null)
|
||||
{
|
||||
Transform hpText = FindDeepChild(transform, "HPText");
|
||||
if (hpText != null)
|
||||
{
|
||||
_hpText = hpText.GetComponent<TextMeshProUGUI>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 깊이 우선 탐색으로 자식 찾기
|
||||
/// </summary>
|
||||
private Transform FindDeepChild(Transform parent, string name)
|
||||
{
|
||||
// 직접 자식에서 찾기
|
||||
Transform found = parent.Find(name);
|
||||
if (found != null) return found;
|
||||
|
||||
// 재귀적으로 자식의 자식에서 찾기
|
||||
for (int i = 0; i < parent.childCount; i++)
|
||||
{
|
||||
found = FindDeepChild(parent.GetChild(i), name);
|
||||
if (found != null) return found;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void SetPlayer(NetworkPlayerController player, bool isLocalPlayer)
|
||||
{
|
||||
_player = player;
|
||||
_isLocalPlayer = isLocalPlayer;
|
||||
_lastHealth = -1; // 강제 업데이트를 위해 리셋
|
||||
_lastMaxHealth = -1;
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
Clear();
|
||||
return;
|
||||
}
|
||||
|
||||
// UI 요소가 없으면 다시 찾기
|
||||
FindUIElements();
|
||||
|
||||
// 플레이어 이름 설정
|
||||
if (_playerNameText != null)
|
||||
{
|
||||
string playerName = $"Player {player.OwnerPlayerId + 1}";
|
||||
if (isLocalPlayer)
|
||||
{
|
||||
playerName += " (YOU)";
|
||||
}
|
||||
_playerNameText.text = playerName;
|
||||
}
|
||||
|
||||
// 초기 체력 업데이트
|
||||
UpdateHealth();
|
||||
|
||||
// 활성화
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
_player = null;
|
||||
_lastHealth = -1;
|
||||
_lastMaxHealth = -1;
|
||||
|
||||
if (_playerNameText != null)
|
||||
{
|
||||
_playerNameText.text = "Waiting...";
|
||||
}
|
||||
|
||||
if (_hpBarFill != null)
|
||||
{
|
||||
_hpBarFill.fillAmount = 0f;
|
||||
}
|
||||
|
||||
if (_hpText != null)
|
||||
{
|
||||
_hpText.text = "--- / ---";
|
||||
}
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
// 체력 업데이트 (변경 시에만)
|
||||
if (_player != null)
|
||||
{
|
||||
int currentHp = _player.GetCurrentHealth();
|
||||
int maxHp = _player.GetMaxHealth();
|
||||
|
||||
// 체력이나 최대 체력이 변경된 경우에만 UI 업데이트
|
||||
if (currentHp != _lastHealth || maxHp != _lastMaxHealth)
|
||||
{
|
||||
UpdateHealth();
|
||||
_lastHealth = currentHp;
|
||||
_lastMaxHealth = maxHp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateHealth()
|
||||
{
|
||||
if (_player == null) return;
|
||||
|
||||
int currentHp = _player.GetCurrentHealth();
|
||||
int maxHp = _player.GetMaxHealth();
|
||||
float hpPercent = maxHp > 0 ? (float)currentHp / maxHp : 0f;
|
||||
|
||||
if (_hpBarFill != null)
|
||||
{
|
||||
_hpBarFill.fillAmount = hpPercent;
|
||||
}
|
||||
|
||||
if (_hpText != null)
|
||||
{
|
||||
_hpText.text = $"{currentHp} / {maxHp}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 에디터에서 UI 요소 자동 할당
|
||||
/// </summary>
|
||||
[ContextMenu("Auto Find UI Elements")]
|
||||
private void AutoFindUIElements()
|
||||
{
|
||||
FindUIElements();
|
||||
Debug.Log($"[TeamCardSlot] UI Elements Found - Name: {_playerNameText != null}, HPFill: {_hpBarFill != null}, HPText: {_hpText != null}");
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UI/TeamHealthUI.cs.meta
Normal file
2
Assets/Scripts/UI/TeamHealthUI.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b5135790bbd96064aab844c2ba2aaa32
|
||||
@@ -3,8 +3,16 @@ using UnityEngine;
|
||||
|
||||
namespace Northbound
|
||||
{
|
||||
public class WorkerSpawner : NetworkBehaviour, IInteractable
|
||||
public class WorkerSpawner : NetworkBehaviour, IInteractable, IVisionProvider, ITeamMember
|
||||
{
|
||||
[Header("Vision Settings")]
|
||||
[Tooltip("워커 홀이 제공하는 시야 범위")]
|
||||
public float visionRange = 10f;
|
||||
|
||||
[Header("Team")]
|
||||
[Tooltip("건물의 팀")]
|
||||
public TeamType initialTeam = TeamType.Player;
|
||||
|
||||
[Header("Spawner Settings")]
|
||||
public GameObject workerPrefab;
|
||||
public Transform spawnPoint;
|
||||
@@ -34,11 +42,24 @@ namespace Northbound
|
||||
{
|
||||
base.OnNetworkSpawn();
|
||||
_workerCount.OnValueChanged += OnWorkerCountChanged;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
// 시야 제공자로 등록
|
||||
FogOfWarSystem.Instance?.RegisterVisionProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
_workerCount.OnValueChanged -= OnWorkerCountChanged;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
// 시야 제공자 등록 해제
|
||||
FogOfWarSystem.Instance?.UnregisterVisionProvider(this);
|
||||
}
|
||||
|
||||
base.OnNetworkDespawn();
|
||||
}
|
||||
|
||||
@@ -240,9 +261,37 @@ namespace Northbound
|
||||
Vector3 spawnCenter = spawnPoint != null ? spawnPoint.position : transform.position;
|
||||
Gizmos.DrawWireSphere(spawnCenter, spawnRadius);
|
||||
|
||||
UnityEditor.Handles.Label(spawnCenter + Vector3.up * 2f,
|
||||
UnityEditor.Handles.Label(spawnCenter + Vector3.up * 2f,
|
||||
$"Worker Spawner\nWorkers: {_workerCount.Value}/{maxWorkers}");
|
||||
#endif
|
||||
}
|
||||
|
||||
#region IVisionProvider Implementation
|
||||
|
||||
public ulong GetOwnerId() => 0; // 워커 홀은 모든 플레이어에게 시야 제공
|
||||
|
||||
public float GetVisionRange() => visionRange;
|
||||
|
||||
Transform IVisionProvider.GetTransform() => transform;
|
||||
|
||||
public bool IsActive() => IsSpawned;
|
||||
|
||||
TeamType IVisionProvider.GetTeam() => initialTeam;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ITeamMember Implementation
|
||||
|
||||
public TeamType GetTeam() => initialTeam;
|
||||
|
||||
public bool IsDead() => false; // 워커 홀은 파괴되지 않음
|
||||
|
||||
public void SetTeam(TeamType team)
|
||||
{
|
||||
// 워커 홀의 팀은 변경할 수 없음
|
||||
Debug.LogWarning("[WorkerSpawner] 워커 홀의 팀은 변경할 수 없습니다.");
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
8
Assets/UI/TeamCard.meta
Normal file
8
Assets/UI/TeamCard.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53e466e1ebe8177418ecfddedc4d2888
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/UI/TeamCard/HPBar_green.png
Normal file
BIN
Assets/UI/TeamCard/HPBar_green.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
143
Assets/UI/TeamCard/HPBar_green.png.meta
Normal file
143
Assets/UI/TeamCard/HPBar_green.png.meta
Normal file
@@ -0,0 +1,143 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c97158fbcfbbf242ae9b266c285261e
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 8957537473066040245
|
||||
second: HPBar_green_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: HPBar_green_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 41
|
||||
height: 41
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 5bbf9586fd09f4c70800000000000000
|
||||
internalID: 8957537473066040245
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
HPBar_green_0: 8957537473066040245
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
990
Assets/UI/TeamCard/TeamCard_Large.prefab
Normal file
990
Assets/UI/TeamCard/TeamCard_Large.prefab
Normal file
@@ -0,0 +1,990 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &900691420667464671
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3909561321110962711}
|
||||
- component: {fileID: 4562475140131647601}
|
||||
- component: {fileID: 3641503078295860797}
|
||||
m_Layer: 5
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3909561321110962711
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 900691420667464671}
|
||||
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: 1671567835747073886}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 450, y: 130}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4562475140131647601
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 900691420667464671}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3641503078295860797
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 900691420667464671}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.5254902}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1397827455277597976
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1909221061409215995}
|
||||
- component: {fileID: 4115447053854238644}
|
||||
m_Layer: 5
|
||||
m_Name: Row_HP
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1909221061409215995
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1397827455277597976}
|
||||
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: 3623982467735649376}
|
||||
- {fileID: 6479671700234456601}
|
||||
m_Father: {fileID: 1848615146409787736}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4115447053854238644
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1397827455277597976}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &1524661661008175776
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3623982467735649376}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarRoot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3623982467735649376
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1524661661008175776}
|
||||
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: 4526962547313490101}
|
||||
- {fileID: 6546054952217937965}
|
||||
m_Father: {fileID: 1909221061409215995}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 320, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &1887481747058627097
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1671567835747073886}
|
||||
m_Layer: 5
|
||||
m_Name: TeamCard_Large
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1671567835747073886
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1887481747058627097}
|
||||
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: 3909561321110962711}
|
||||
- {fileID: 1511118888812183331}
|
||||
- {fileID: 6493168435657054733}
|
||||
m_Father: {fileID: 0}
|
||||
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!1 &2263815619202694770
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8270131593793046794}
|
||||
- component: {fileID: 6874510865284232069}
|
||||
- component: {fileID: 5228251429256210363}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerNameText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8270131593793046794
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2263815619202694770}
|
||||
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: 4715303447718307229}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6874510865284232069
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2263815619202694770}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5228251429256210363
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2263815619202694770}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Player 1 (YOU)
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: cac3ad1b064570d46abc7f664d02d23e, type: 2}
|
||||
m_sharedMaterial: {fileID: -8208170789151758778, guid: cac3ad1b064570d46abc7f664d02d23e, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 36
|
||||
m_fontSizeBase: 36
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &2332988383367038871
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1511118888812183331}
|
||||
- component: {fileID: 2760543776975673489}
|
||||
m_Layer: 5
|
||||
m_Name: Content
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1511118888812183331
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2332988383367038871}
|
||||
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: 2795229366996019796}
|
||||
- {fileID: 1848615146409787736}
|
||||
m_Father: {fileID: 1671567835747073886}
|
||||
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: 30, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2760543776975673489
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2332988383367038871}
|
||||
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: 10
|
||||
m_Right: 10
|
||||
m_Top: 10
|
||||
m_Bottom: 10
|
||||
m_ChildAlignment: 3
|
||||
m_Spacing: 10
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 1
|
||||
m_ChildControlHeight: 1
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &4445285748216119847
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2795229366996019796}
|
||||
- component: {fileID: 1593405979637777621}
|
||||
- component: {fileID: 2612123753227482464}
|
||||
- component: {fileID: 8985400032926287030}
|
||||
m_Layer: 5
|
||||
m_Name: PortraitFrame
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2795229366996019796
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4445285748216119847}
|
||||
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: 1511118888812183331}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1593405979637777621
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4445285748216119847}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &2612123753227482464
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4445285748216119847}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &8985400032926287030
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4445285748216119847}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: 100
|
||||
m_MinHeight: 100
|
||||
m_PreferredWidth: 100
|
||||
m_PreferredHeight: 100
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &4855823295685342202
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4715303447718307229}
|
||||
- component: {fileID: 1772785610992859156}
|
||||
m_Layer: 5
|
||||
m_Name: Row_Name
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4715303447718307229
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4855823295685342202}
|
||||
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: 8270131593793046794}
|
||||
m_Father: {fileID: 1848615146409787736}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1772785610992859156
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4855823295685342202}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: 320
|
||||
m_MinHeight: 50
|
||||
m_PreferredWidth: 320
|
||||
m_PreferredHeight: 50
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &5635920112903963799
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6546054952217937965}
|
||||
- component: {fileID: 1411402556195867580}
|
||||
- component: {fileID: 392033387581393578}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarFill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6546054952217937965
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5635920112903963799}
|
||||
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: 3623982467735649376}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 320, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1411402556195867580
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5635920112903963799}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &392033387581393578
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5635920112903963799}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 8957537473066040245, guid: 6c97158fbcfbbf242ae9b266c285261e, type: 3}
|
||||
m_Type: 3
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 0
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6318370184295727766
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6479671700234456601}
|
||||
- component: {fileID: 919834822258377369}
|
||||
- component: {fileID: 157813252385139848}
|
||||
m_Layer: 5
|
||||
m_Name: HPText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6479671700234456601
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6318370184295727766}
|
||||
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: 1909221061409215995}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 320, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &919834822258377369
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6318370184295727766}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &157813252385139848
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6318370184295727766}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 100 / 100
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 72491e21fef70124c9ebc25ff62fd3e9, type: 2}
|
||||
m_sharedMaterial: {fileID: 9147849279665769802, guid: 72491e21fef70124c9ebc25ff62fd3e9, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &6360479704059743584
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1848615146409787736}
|
||||
- component: {fileID: 1704105055393465885}
|
||||
m_Layer: 5
|
||||
m_Name: InfoGroup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1848615146409787736
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6360479704059743584}
|
||||
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: 4715303447718307229}
|
||||
- {fileID: 1909221061409215995}
|
||||
m_Father: {fileID: 1511118888812183331}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1704105055393465885
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6360479704059743584}
|
||||
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: 10
|
||||
m_Bottom: 40
|
||||
m_ChildAlignment: 3
|
||||
m_Spacing: 20
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 1
|
||||
m_ChildControlHeight: 1
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &6711787659623841782
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4526962547313490101}
|
||||
- component: {fileID: 4986890417745144886}
|
||||
- component: {fileID: 7857089966618426166}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarBG
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4526962547313490101
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6711787659623841782}
|
||||
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: 3623982467735649376}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 320, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4986890417745144886
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6711787659623841782}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7857089966618426166
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6711787659623841782}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8992019966963279634
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6493168435657054733}
|
||||
- component: {fileID: 1615791677248318544}
|
||||
- component: {fileID: 89451014552905569}
|
||||
m_Layer: 5
|
||||
m_Name: StatusScreen
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6493168435657054733
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8992019966963279634}
|
||||
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: 1671567835747073886}
|
||||
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: 30, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1615791677248318544
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8992019966963279634}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &89451014552905569
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8992019966963279634}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.003921569, g: 0.003921569, b: 0.003921569, a: 0}
|
||||
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: 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
|
||||
7
Assets/UI/TeamCard/TeamCard_Large.prefab.meta
Normal file
7
Assets/UI/TeamCard/TeamCard_Large.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 685f476a561713e42889dcfd23465842
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
969
Assets/UI/TeamCard/TeamCard_Small.prefab
Normal file
969
Assets/UI/TeamCard/TeamCard_Small.prefab
Normal file
@@ -0,0 +1,969 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2074171136745008206
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5198198148521458082}
|
||||
- component: {fileID: 1826486670657657610}
|
||||
- component: {fileID: 8273750792848853139}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarFill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5198198148521458082
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2074171136745008206}
|
||||
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: 3702526597436997994}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 260, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1826486670657657610
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2074171136745008206}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8273750792848853139
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2074171136745008206}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 8957537473066040245, guid: 6c97158fbcfbbf242ae9b266c285261e, type: 3}
|
||||
m_Type: 3
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 0
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &2253511433390990024
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1284898007502304109}
|
||||
m_Layer: 5
|
||||
m_Name: TeamCard_Small
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1284898007502304109
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2253511433390990024}
|
||||
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: 7560997970798250675}
|
||||
- {fileID: 8503868087006291890}
|
||||
- {fileID: 4561880499055873524}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -15, y: 0}
|
||||
m_SizeDelta: {x: 30, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &2900382378627822061
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4561880499055873524}
|
||||
- component: {fileID: 8627558946663358117}
|
||||
- component: {fileID: 8207203923599803865}
|
||||
m_Layer: 5
|
||||
m_Name: StatusScreen
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4561880499055873524
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2900382378627822061}
|
||||
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: 1284898007502304109}
|
||||
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 &8627558946663358117
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2900382378627822061}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8207203923599803865
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2900382378627822061}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.003921569, g: 0.003921569, b: 0.003921569, a: 0.95686275}
|
||||
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: 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!1 &2968470668028046660
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5917359228874704445}
|
||||
- component: {fileID: 5042915766726483101}
|
||||
m_Layer: 5
|
||||
m_Name: InfoGroup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5917359228874704445
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2968470668028046660}
|
||||
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: 194619546641387405}
|
||||
- {fileID: 291540299496549388}
|
||||
m_Father: {fileID: 8503868087006291890}
|
||||
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: 250, y: 80}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &5042915766726483101
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2968470668028046660}
|
||||
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: 20
|
||||
m_ChildAlignment: 3
|
||||
m_Spacing: 10
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 1
|
||||
m_ChildControlHeight: 1
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &3640157395410386983
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7560997970798250675}
|
||||
- component: {fileID: 2705099275371687515}
|
||||
- component: {fileID: 8518698171192333884}
|
||||
m_Layer: 5
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7560997970798250675
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3640157395410386983}
|
||||
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: 1284898007502304109}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 370, y: 90}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2705099275371687515
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3640157395410386983}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8518698171192333884
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3640157395410386983}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0.5254902}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &4102094337288095666
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 291540299496549388}
|
||||
- component: {fileID: 4720487827404151422}
|
||||
m_Layer: 5
|
||||
m_Name: Row_HP
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &291540299496549388
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4102094337288095666}
|
||||
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: 3702526597436997994}
|
||||
- {fileID: 6245799478517062558}
|
||||
m_Father: {fileID: 5917359228874704445}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4720487827404151422
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4102094337288095666}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &4343589651227387619
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8503868087006291890}
|
||||
- component: {fileID: 4482117481812084865}
|
||||
m_Layer: 5
|
||||
m_Name: Content
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8503868087006291890
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4343589651227387619}
|
||||
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: 2205644490763987176}
|
||||
- {fileID: 5917359228874704445}
|
||||
m_Father: {fileID: 1284898007502304109}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 370, y: 90}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4482117481812084865
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4343589651227387619}
|
||||
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: 10
|
||||
m_Right: 10
|
||||
m_Top: 10
|
||||
m_Bottom: 10
|
||||
m_ChildAlignment: 3
|
||||
m_Spacing: 10
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &5793376694639013665
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2205644490763987176}
|
||||
- component: {fileID: 1577489590812274390}
|
||||
- component: {fileID: 4030882051384975456}
|
||||
m_Layer: 5
|
||||
m_Name: PortraitFrame
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2205644490763987176
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5793376694639013665}
|
||||
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: 8503868087006291890}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 80, y: 80}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1577489590812274390
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5793376694639013665}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4030882051384975456
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5793376694639013665}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
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!1 &6414600283166031257
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6245799478517062558}
|
||||
- component: {fileID: 5135884166251837940}
|
||||
- component: {fileID: 1343573155229754827}
|
||||
m_Layer: 5
|
||||
m_Name: HPText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6245799478517062558
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6414600283166031257}
|
||||
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: 291540299496549388}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 250, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5135884166251837940
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6414600283166031257}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1343573155229754827
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6414600283166031257}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: 100 / 100
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 72491e21fef70124c9ebc25ff62fd3e9, type: 2}
|
||||
m_sharedMaterial: {fileID: 9147849279665769802, guid: 72491e21fef70124c9ebc25ff62fd3e9, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 28
|
||||
m_fontSizeBase: 28
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &7834539181679316471
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3702526597436997994}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarRoot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3702526597436997994
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7834539181679316471}
|
||||
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: 3802551536411645914}
|
||||
- {fileID: 5198198148521458082}
|
||||
m_Father: {fileID: 291540299496549388}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 260, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &8164887723793364555
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3802551536411645914}
|
||||
- component: {fileID: 3656180201220190327}
|
||||
- component: {fileID: 1104169946164349632}
|
||||
m_Layer: 5
|
||||
m_Name: HPBarBG
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3802551536411645914
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8164887723793364555}
|
||||
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: 3702526597436997994}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 260, y: 30}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3656180201220190327
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8164887723793364555}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1104169946164349632
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8164887723793364555}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8988597135719243260
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 194619546641387405}
|
||||
- component: {fileID: 6633126197091541793}
|
||||
m_Layer: 5
|
||||
m_Name: Row_Name
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &194619546641387405
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8988597135719243260}
|
||||
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: 4888232951558913288}
|
||||
m_Father: {fileID: 5917359228874704445}
|
||||
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: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &6633126197091541793
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8988597135719243260}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: 320
|
||||
m_MinHeight: 50
|
||||
m_PreferredWidth: 320
|
||||
m_PreferredHeight: 50
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &9132062344038458924
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4888232951558913288}
|
||||
- component: {fileID: 6038280827777648504}
|
||||
- component: {fileID: 4716558580110790481}
|
||||
m_Layer: 5
|
||||
m_Name: PlayerNameText
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4888232951558913288
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9132062344038458924}
|
||||
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: 194619546641387405}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 1, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6038280827777648504
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9132062344038458924}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4716558580110790481
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9132062344038458924}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Player 4
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: cac3ad1b064570d46abc7f664d02d23e, type: 2}
|
||||
m_sharedMaterial: {fileID: -8208170789151758778, guid: cac3ad1b064570d46abc7f664d02d23e, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
7
Assets/UI/TeamCard/TeamCard_Small.prefab.meta
Normal file
7
Assets/UI/TeamCard/TeamCard_Small.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 76993c29348a34e48bf805ce324efb62
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,3 +1,3 @@
|
||||
id,memo,move_speed,max_hp,sight,atk_range,atk_damage,atk_interval_sec,cost,weight,model_path,animation_controller_path
|
||||
1,기본1,5,75,6,1,10,2,2,1,Assets/Models/PlantWarrior.fbx,Assets/Animations/MonsterAnimationController.controller
|
||||
2,기본2,4.5,100,6,4,15,4,5,0.5,Assets/Models/Rogue.fbx,Assets/Animations/MonsterAnimationController.controller
|
||||
1,기본1,4,75,6,1,10,2,2,1,Assets/Models/PlantWarrior_With_Spear.fbx,Assets/Animations/MonsterAnimationController.controller
|
||||
2,기본2,3.5,50,6,4,15,4,5,0.5,Assets/Models/Rogue.fbx,Assets/Animations/MonsterAnimationController.controller
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
id,memo,move_speed,max_hp,sight,atk_range,atk_damage,atk_interval_sec,cost,weight,model_path,animation_controller_path,wave_min,wave_max
|
||||
101,Grunt(기본),6.7,75,6,1,3,1.2,3,1.0,Assets/Models/Skeleton_Minion.fbx,Assets/Animations/MonsterAnimationController.controller,1,10
|
||||
102,Tank(느림/단단),3.3,125,6,1,4,1.5,5,0.5,Assets/Models/Druid.fbx,Assets/Animations/MonsterAnimationController.controller,3,15
|
||||
103,Ranged(원거리/약함),5.3,65,6,5,2,1.4,3,0.2,Assets/Models/Skeleton_Warrior.fbx,Assets/Animations/MonsterAnimationController.controller,3,20
|
||||
104,Fast(빠름/약함),8.6,45,6,1,2,1.0,3,0.333,Assets/Models/Skeleton_Rogue.fbx,Assets/Animations/MonsterAnimationController.controller,3,20
|
||||
105,Elite(소수 정예),6.6,100,6,1,7,1.3,6,0.1,Assets/Models/Barbarian_Large.fbx,Assets/Animations/MonsterAnimationController.controller,5,20
|
||||
101,Grunt(기본),4.5,75,6,1,3,1.2,3,1,Assets/Models/Skeleton_Minion_With_Sword.fbx,Assets/Animations/MonsterAnimationController.controller,1,10
|
||||
102,Tank(느림/단단),2.5,125,6,1,4,1.5,5,0.5,Assets/Models/Druid.fbx,Assets/Animations/MonsterAnimationController.controller,3,15
|
||||
103,Ranged(원거리/약함),3.5,65,6,5,2,1.4,3,0.2,Assets/Models/Skeleton_Warrior.fbx,Assets/Animations/MonsterAnimationController.controller,3,20
|
||||
104,Fast(빠름/약함),6,45,6,1,2,1,3,0.333,Assets/Models/Skeleton_Rogue.fbx,Assets/Animations/MonsterAnimationController.controller,3,20
|
||||
105,Elite(소수 정예),4.5,100,6,1,7,1.3,6,0.1,Assets/Models/Barbarian_Large.fbx,Assets/Animations/MonsterAnimationController.controller,5,20
|
||||
|
||||
|
@@ -1,2 +1,2 @@
|
||||
id,memo,move_speed,capacity,manpower,max_hp,sight,atk_range,atk_damage,atk_interval_sec,prefab_path
|
||||
1,,5,50,10,100,10,3,10,1,Assets/Prefabs/Player/Player
|
||||
1,,4,50,10,100,10,3,10,1,Assets/Prefabs/Player/Player
|
||||
|
||||
|
@@ -1,12 +1,12 @@
|
||||
id,memo,building_name,level,upgrade_to,tower_type,mana,manpower,size_x,size_y,size_z,max_hp,sight,atk_range,atk_damage,atk_interval_sec,model_path
|
||||
1,타워,Arrow Tower Lv.1,1,2,attack,100,10,4,10,4,100,15,10,15,2,Assets/Models/building_tower_B_blue.fbx
|
||||
2,타워,Arrow Tower Lv.2,2,3,attack,200,20,4,10,4,150,15,15,20,2,Assets/Models/building_tower_B_blue.fbx
|
||||
3,타워,Arrow Tower Lv.3,3,4,attack,300,30,4,10,4,200,20,15,30,2,Assets/Models/building_tower_B_blue.fbx
|
||||
4,타워,Arrow Tower Lv.4,4,5,attack,400,40,4,10,4,250,25,20,40,2,Assets/Models/building_tower_B_blue.fbx
|
||||
5,타워,Arrow Tower Lv.5,5,,attack,600,50,4,10,4,400,25,25,50,2,Assets/Models/building_tower_B_blue.fbx
|
||||
1,타워,Arrow Tower Lv.1,1,2,attack,150,50,4,10,4,100,15,10,15,2,Assets/Models/building_tower_B_blue.fbx
|
||||
2,타워,Arrow Tower Lv.2,2,3,attack,300,60,4,10,4,150,15,15,20,2,Assets/Models/building_tower_B_blue.fbx
|
||||
3,타워,Arrow Tower Lv.3,3,4,attack,450,70,4,10,4,200,20,15,30,2,Assets/Models/building_tower_B_blue.fbx
|
||||
4,타워,Arrow Tower Lv.4,4,5,attack,600,80,4,10,4,250,25,20,40,2,Assets/Models/building_tower_B_blue.fbx
|
||||
5,타워,Arrow Tower Lv.5,5,,attack,750,100,4,10,4,400,25,25,50,2,Assets/Models/building_tower_B_blue.fbx
|
||||
6,벽,Wall Lv.1,1,7,defense,10,10,8,4,3,30,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
7,벽,Wall Lv.2,2,8,defense,30,10,8,4,3,30,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
8,벽,Wall Lv.3,3,9,defense,50,20,8,4,3,30,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
9,벽,Wall Lv.4,4,10,defense,100,20,8,4,3,30,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
10,벽,Wall Lv.5,5,,defense,150,20,8,4,3,30,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
7,벽,Wall Lv.2,2,8,defense,30,20,8,4,3,50,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
8,벽,Wall Lv.3,3,9,defense,50,30,8,4,3,60,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
9,벽,Wall Lv.4,4,10,defense,100,40,8,4,3,80,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
10,벽,Wall Lv.5,5,,defense,150,50,8,4,3,110,1,0,0,0,Assets/Models/wall_straight.fbx
|
||||
11,와드,Ward Lv.1,1,,sight,10,10,1,1,1,10,5,0,0,0,Assets/Models/torch.fbx
|
||||
|
||||
|
@@ -11,6 +11,6 @@
|
||||
10,노동력 증가 Lv.1,harvest,person,200,,player_manpower,add,5,10
|
||||
11,노동력 증가 Lv.2,harvest,person,300,10,player_manpower,add,10,11
|
||||
12,노동력 증가 Lv.3,harvest,person,400,7; 10,player_manpower,add,20,12
|
||||
13,이동속도 증가 Lv.1,scout,person,200,,player_move_speed,mul,1.2,13
|
||||
14,이동속도 증가 Lv.2,scout,person,300,13,player_move_speed,mul,1.6,14
|
||||
15,이동속도 증가 Lv.3,scout,person,400,14,player_move_speed,mul,2,15
|
||||
13,이동속도 증가 Lv.1,scout,person,200,,player_move_speed,mul,1.5,13
|
||||
14,이동속도 증가 Lv.2,scout,person,300,13,player_move_speed,mul,2,14
|
||||
15,이동속도 증가 Lv.3,scout,person,400,14,player_move_speed,mul,2.5,15
|
||||
|
||||
|
Reference in New Issue
Block a user