데이터 파이프라인 추가 및 수정 + 크립 및 크립 캠프 배치 자동화
Hierachy > System > MapGenerator 에서 크립 관련 변수 설정 가능 Kaykit PlantWarrior 애셋 추가
This commit is contained in:
@@ -62,6 +62,7 @@
|
|||||||
<Compile Include="Assets\Scripts\Editor\CSVToSOImporter.cs" />
|
<Compile Include="Assets\Scripts\Editor\CSVToSOImporter.cs" />
|
||||||
<Compile Include="Assets\Scripts\Editor\TowerPrefabSetup.cs" />
|
<Compile Include="Assets\Scripts\Editor\TowerPrefabSetup.cs" />
|
||||||
<Compile Include="Assets\Scripts\Editor\PlayerPrefabSetup.cs" />
|
<Compile Include="Assets\Scripts\Editor\PlayerPrefabSetup.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Editor\CreepPrefabSetup.cs" />
|
||||||
<Compile Include="Assets\Scripts\Editor\TemplateCreator.cs" />
|
<Compile Include="Assets\Scripts\Editor\TemplateCreator.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Shaders\Editor\Tooltips.cs" />
|
<Compile Include="Assets\FlatKit\Shaders\Editor\Tooltips.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Shaders\Editor\StylizedSurfaceEditor.cs" />
|
<Compile Include="Assets\FlatKit\Shaders\Editor\StylizedSurfaceEditor.cs" />
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
<Compile Include="Assets\Scripts\PlayerVisionProvider.cs" />
|
<Compile Include="Assets\Scripts\PlayerVisionProvider.cs" />
|
||||||
<Compile Include="Assets\Scripts\PlayerController.cs" />
|
<Compile Include="Assets\Scripts\PlayerController.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\Motion\OrbitMotion.cs" />
|
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\Motion\OrbitMotion.cs" />
|
||||||
<Compile Include="Assets\Scripts\BuildingDamageTest.cs" />
|
<Compile Include="Assets\Scripts\CreepCamp.cs" />
|
||||||
<Compile Include="Assets\Scripts\EnemyAIController.cs" />
|
<Compile Include="Assets\Scripts\EnemyAIController.cs" />
|
||||||
<Compile Include="Assets\Scripts\EquipmentSocket.cs" />
|
<Compile Include="Assets\Scripts\EquipmentSocket.cs" />
|
||||||
<Compile Include="Assets\Scripts\DebugLogUI.cs" />
|
<Compile Include="Assets\Scripts\DebugLogUI.cs" />
|
||||||
@@ -78,6 +78,7 @@
|
|||||||
<Compile Include="Assets\Scripts\WorkerSpawner.cs" />
|
<Compile Include="Assets\Scripts\WorkerSpawner.cs" />
|
||||||
<Compile Include="Assets\Scripts\Resource.cs" />
|
<Compile Include="Assets\Scripts\Resource.cs" />
|
||||||
<Compile Include="Assets\Scripts\AutoTargetSystem.cs" />
|
<Compile Include="Assets\Scripts\AutoTargetSystem.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\CreepDataComponent.cs" />
|
||||||
<Compile Include="Assets\Scripts\BuildingSlotButton.cs" />
|
<Compile Include="Assets\Scripts\BuildingSlotButton.cs" />
|
||||||
<Compile Include="Assets\FlatKit\[Render Pipeline] URP\Water\Scripts\Buoyancy.cs" />
|
<Compile Include="Assets\FlatKit\[Render Pipeline] URP\Water\Scripts\Buoyancy.cs" />
|
||||||
<Compile Include="Assets\Scripts\ObstacleSpawner.cs" />
|
<Compile Include="Assets\Scripts\ObstacleSpawner.cs" />
|
||||||
@@ -86,10 +87,12 @@
|
|||||||
<Compile Include="Assets\Scripts\IInteractable.cs" />
|
<Compile Include="Assets\Scripts\IInteractable.cs" />
|
||||||
<Compile Include="Assets\Scripts\ServerResourceManager.cs" />
|
<Compile Include="Assets\Scripts\ServerResourceManager.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\UvScroller.cs" />
|
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\UvScroller.cs" />
|
||||||
|
<Compile Include="Assets\Data\Scripts\DataClasses\TowerDataExtensions.cs" />
|
||||||
<Compile Include="Assets\Scripts\GlobalTimer.cs" />
|
<Compile Include="Assets\Scripts\GlobalTimer.cs" />
|
||||||
<Compile Include="Assets\InputSystem_Actions.cs" />
|
<Compile Include="Assets\InputSystem_Actions.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Demos\[Demo] Desert\Scripts\BillboardLineRendererCircle.cs" />
|
<Compile Include="Assets\FlatKit\Demos\[Demo] Desert\Scripts\BillboardLineRendererCircle.cs" />
|
||||||
<Compile Include="Assets\Scripts\BuildingHealthBar.cs" />
|
<Compile Include="Assets\Scripts\BuildingHealthBar.cs" />
|
||||||
|
<Compile Include="Assets\Data\Scripts\DataClasses\CreepData.cs" />
|
||||||
<Compile Include="Assets\Scripts\PlayerSpawnPoint.cs" />
|
<Compile Include="Assets\Scripts\PlayerSpawnPoint.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\AutoLoadPipelineAsset.cs" />
|
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\AutoLoadPipelineAsset.cs" />
|
||||||
<Compile Include="Assets\Scripts\AutoHost.cs" />
|
<Compile Include="Assets\Scripts\AutoHost.cs" />
|
||||||
|
|||||||
8
Assets/Data/ScriptableObjects/Creep.meta
Normal file
8
Assets/Data/ScriptableObjects/Creep.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a5c1da0f3a91f2e40b5dff67f0be3705
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
25
Assets/Data/ScriptableObjects/Creep/Creep1.asset
Normal file
25
Assets/Data/ScriptableObjects/Creep/Creep1.asset
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
%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: f7bb664a82feb0e43b3c5f459ca775f7, type: 3}
|
||||||
|
m_Name: Creep1
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.CreepData
|
||||||
|
id: 1
|
||||||
|
memo: "\uAE30\uBCF81"
|
||||||
|
moveSpeed: 5
|
||||||
|
maxHp: 100
|
||||||
|
atkRange: 3
|
||||||
|
atkDamage: 20
|
||||||
|
atkIntervalSec: 1.5
|
||||||
|
cost: 1
|
||||||
|
weight: 1
|
||||||
|
modelPath: Assets/Models/PlantWarrior.fbx
|
||||||
|
animationControllerPath: Assets/Animations/MonsterAnimationController.controller
|
||||||
8
Assets/Data/ScriptableObjects/Creep/Creep1.asset.meta
Normal file
8
Assets/Data/ScriptableObjects/Creep/Creep1.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3d9df9cc2ed8c9e4394fa77bc21c47c6
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -12,24 +12,32 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 8c40fef5ebc37b743a3f225c1ca57c32, type: 3}
|
m_Script: {fileID: 11500000, guid: 8c40fef5ebc37b743a3f225c1ca57c32, type: 3}
|
||||||
m_Name: Tower1
|
m_Name: Tower1
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.TowerData
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.TowerData
|
||||||
buildingName: "\uD0C0\uC6CC"
|
|
||||||
prefab: {fileID: 8512676738329978770, guid: 3f7838db2c2fc424d9bd9a0d243b43be, type: 3}
|
|
||||||
icon: {fileID: 0}
|
|
||||||
id: 1
|
id: 1
|
||||||
memo: "\uD0C0\uC6CC"
|
memo: "\uD0C0\uC6CC"
|
||||||
|
buildingName:
|
||||||
mana: 25
|
mana: 25
|
||||||
|
manpower: 10
|
||||||
sizeX: 4
|
sizeX: 4
|
||||||
sizeY: 10
|
sizeY: 10
|
||||||
sizeZ: 4
|
sizeZ: 4
|
||||||
placementOffset: {x: 0, y: 0, z: 0}
|
|
||||||
allowRotation: 1
|
|
||||||
manpower: 10
|
|
||||||
maxHp: 50
|
maxHp: 50
|
||||||
isIndestructible: 0
|
|
||||||
autoRegenerate: 0
|
|
||||||
regenPerSecond: 1
|
|
||||||
atkRange: 10
|
atkRange: 10
|
||||||
providesVision: 1
|
|
||||||
atkDamage: 5
|
atkDamage: 5
|
||||||
atkIntervalSec: 2
|
atkIntervalSec: 2
|
||||||
modelPath: Assets/Models/building_tower_B_blue.fbx
|
modelPath: Assets/Models/building_tower_B_blue.fbx
|
||||||
|
prefab: {fileID: 8512676738329978770, guid: 3f7838db2c2fc424d9bd9a0d243b43be, type: 3}
|
||||||
|
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
|
||||||
|
|||||||
@@ -12,24 +12,32 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 8c40fef5ebc37b743a3f225c1ca57c32, type: 3}
|
m_Script: {fileID: 11500000, guid: 8c40fef5ebc37b743a3f225c1ca57c32, type: 3}
|
||||||
m_Name: Tower2
|
m_Name: Tower2
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.TowerData
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Data.TowerData
|
||||||
buildingName: "\uBCBD"
|
|
||||||
prefab: {fileID: 3671057791414486316, guid: ae9a9b515e1792a45887f0d967b943d6, type: 3}
|
|
||||||
icon: {fileID: 0}
|
|
||||||
id: 2
|
id: 2
|
||||||
memo: "\uBCBD"
|
memo: "\uBCBD"
|
||||||
|
buildingName:
|
||||||
mana: 5
|
mana: 5
|
||||||
|
manpower: 5
|
||||||
sizeX: 8
|
sizeX: 8
|
||||||
sizeY: 4
|
sizeY: 4
|
||||||
sizeZ: 3
|
sizeZ: 3
|
||||||
placementOffset: {x: 0, y: 0, z: 0}
|
|
||||||
allowRotation: 1
|
|
||||||
manpower: 5
|
|
||||||
maxHp: 30
|
maxHp: 30
|
||||||
isIndestructible: 0
|
|
||||||
autoRegenerate: 0
|
|
||||||
regenPerSecond: 1
|
|
||||||
atkRange: 0
|
atkRange: 0
|
||||||
providesVision: 1
|
|
||||||
atkDamage: 0
|
atkDamage: 0
|
||||||
atkIntervalSec: 0
|
atkIntervalSec: 0
|
||||||
modelPath: Assets/Models/wall_straight.fbx
|
modelPath: Assets/Models/wall_straight.fbx
|
||||||
|
prefab: {fileID: 3671057791414486316, guid: ae9a9b515e1792a45887f0d967b943d6, type: 3}
|
||||||
|
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
|
||||||
|
|||||||
37
Assets/Data/Scripts/DataClasses/CreepData.cs
Normal file
37
Assets/Data/Scripts/DataClasses/CreepData.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// 이 파일은 자동 생성되었습니다. 직접 수정하지 마세요!
|
||||||
|
// 생성 스크립트: DataTools/generate_csharp_classes.py
|
||||||
|
|
||||||
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic; // 리스트 지원을 위해 추가
|
||||||
|
|
||||||
|
namespace Northbound.Data
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "CreepData", menuName = "Northbound/Creep Data")]
|
||||||
|
public partial class CreepData : ScriptableObject
|
||||||
|
{
|
||||||
|
[Header("기본 정보")]
|
||||||
|
/// <summary>고유 ID</summary>
|
||||||
|
public int id;
|
||||||
|
/// <summary>기획 메모</summary>
|
||||||
|
public string memo;
|
||||||
|
/// <summary>이동 속도</summary>
|
||||||
|
public float moveSpeed;
|
||||||
|
/// <summary>체력</summary>
|
||||||
|
public int maxHp;
|
||||||
|
/// <summary>사정 거리</summary>
|
||||||
|
public int atkRange;
|
||||||
|
/// <summary>데미지</summary>
|
||||||
|
public int atkDamage;
|
||||||
|
/// <summary>공격 주기</summary>
|
||||||
|
public float atkIntervalSec;
|
||||||
|
/// <summary>몬스터 난이도 점수</summary>
|
||||||
|
public int cost;
|
||||||
|
/// <summary>등장 가중치</summary>
|
||||||
|
public float weight;
|
||||||
|
/// <summary>사용할 모델의 경로</summary>
|
||||||
|
public string modelPath;
|
||||||
|
/// <summary>사용할 애니메이션 컨트롤러의 경로</summary>
|
||||||
|
public string animationControllerPath;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Data/Scripts/DataClasses/CreepData.cs.meta
Normal file
2
Assets/Data/Scripts/DataClasses/CreepData.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f7bb664a82feb0e43b3c5f459ca775f7
|
||||||
@@ -7,7 +7,7 @@ using System.Collections.Generic; // 리스트 지원을 위해 추가
|
|||||||
namespace Northbound.Data
|
namespace Northbound.Data
|
||||||
{
|
{
|
||||||
[CreateAssetMenu(fileName = "DefaultSettingsData", menuName = "Northbound/DefaultSettings Data")]
|
[CreateAssetMenu(fileName = "DefaultSettingsData", menuName = "Northbound/DefaultSettings Data")]
|
||||||
public class DefaultSettingsData : ScriptableObject
|
public partial class DefaultSettingsData : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("기본 정보")]
|
[Header("기본 정보")]
|
||||||
/// <summary>고유 ID</summary>
|
/// <summary>고유 ID</summary>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using System.Collections.Generic; // 리스트 지원을 위해 추가
|
|||||||
namespace Northbound.Data
|
namespace Northbound.Data
|
||||||
{
|
{
|
||||||
[CreateAssetMenu(fileName = "MonsterData", menuName = "Northbound/Monster Data")]
|
[CreateAssetMenu(fileName = "MonsterData", menuName = "Northbound/Monster Data")]
|
||||||
public class MonsterData : ScriptableObject
|
public partial class MonsterData : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("기본 정보")]
|
[Header("기본 정보")]
|
||||||
/// <summary>고유 ID</summary>
|
/// <summary>고유 ID</summary>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using System.Collections.Generic; // 리스트 지원을 위해 추가
|
|||||||
namespace Northbound.Data
|
namespace Northbound.Data
|
||||||
{
|
{
|
||||||
[CreateAssetMenu(fileName = "PlayerData", menuName = "Northbound/Player Data")]
|
[CreateAssetMenu(fileName = "PlayerData", menuName = "Northbound/Player Data")]
|
||||||
public class PlayerData : ScriptableObject
|
public partial class PlayerData : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("기본 정보")]
|
[Header("기본 정보")]
|
||||||
/// <summary>고유 ID</summary>
|
/// <summary>고유 ID</summary>
|
||||||
|
|||||||
@@ -1,83 +1,41 @@
|
|||||||
|
// 이 파일은 자동 생성되었습니다. 직접 수정하지 마세요!
|
||||||
|
// 생성 스크립트: DataTools/generate_csharp_classes.py
|
||||||
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic; // 리스트 지원을 위해 추가
|
||||||
|
|
||||||
namespace Northbound.Data
|
namespace Northbound.Data
|
||||||
{
|
{
|
||||||
[CreateAssetMenu(fileName = "TowerData", menuName = "Northbound/Tower Data")]
|
[CreateAssetMenu(fileName = "TowerData", menuName = "Northbound/Tower Data")]
|
||||||
public class TowerData : ScriptableObject
|
public partial class TowerData : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("Building Info")]
|
[Header("기본 정보")]
|
||||||
public string buildingName;
|
/// <summary>고유 ID</summary>
|
||||||
public GameObject prefab;
|
|
||||||
[Tooltip("UI에 표시될 건물 아이콘")]
|
|
||||||
public Sprite icon;
|
|
||||||
|
|
||||||
[Header("Basic Info")]
|
|
||||||
[Tooltip("고유 ID")]
|
|
||||||
public int id;
|
public int id;
|
||||||
[Tooltip("기획 메모")]
|
/// <summary>기획 메모</summary>
|
||||||
public string memo;
|
public string memo;
|
||||||
[Tooltip("건설 비용")]
|
/// <summary>건물 이름</summary>
|
||||||
|
public string buildingName;
|
||||||
|
/// <summary>건설 비용 (mana=20) (mana=50; iron=10)</summary>
|
||||||
public int mana;
|
public int mana;
|
||||||
|
/// <summary>건설 노동량</summary>
|
||||||
[Header("Grid Size")]
|
public float manpower;
|
||||||
[Tooltip("X 그리드 차지 공간")]
|
/// <summary>X 그리드 차지 공간</summary>
|
||||||
public int sizeX = 1;
|
public int sizeX;
|
||||||
[Tooltip("Y 그리드 차지 공간")]
|
/// <summary>Y 그리드 차지 공간</summary>
|
||||||
public int sizeY = 1;
|
public int sizeY;
|
||||||
[Tooltip("Z 차지 공간")]
|
/// <summary>Z 차지 공간</summary>
|
||||||
public int sizeZ = 2;
|
public int sizeZ;
|
||||||
|
/// <summary>체력</summary>
|
||||||
[Header("Placement Settings")]
|
public int maxHp;
|
||||||
[Tooltip("Offset from grid position")]
|
/// <summary>사정거리</summary>
|
||||||
public Vector3 placementOffset = Vector3.zero;
|
public int atkRange;
|
||||||
[Tooltip("Can rotate this building?")]
|
/// <summary>데미지</summary>
|
||||||
public bool allowRotation = true;
|
public int atkDamage;
|
||||||
|
/// <summary>공격 주기</summary>
|
||||||
[Header("Construction Settings")]
|
public float atkIntervalSec;
|
||||||
[Tooltip("건설 완료에 필요한 총 작업량")]
|
/// <summary>모델 경로</summary>
|
||||||
public float manpower = 100f;
|
|
||||||
|
|
||||||
[Header("Health Settings")]
|
|
||||||
[Tooltip("체력")]
|
|
||||||
public int maxHp = 100;
|
|
||||||
[Tooltip("Can this building be damaged?")]
|
|
||||||
public bool isIndestructible = false;
|
|
||||||
[Tooltip("Auto-regenerate health over time")]
|
|
||||||
public bool autoRegenerate = false;
|
|
||||||
[Tooltip("Health regeneration per second")]
|
|
||||||
public int regenPerSecond = 1;
|
|
||||||
|
|
||||||
[Header("Vision Settings")]
|
|
||||||
[Tooltip("사정거리")]
|
|
||||||
public int atkRange = 15;
|
|
||||||
[Tooltip("Does this building provide vision?")]
|
|
||||||
public bool providesVision = true;
|
|
||||||
|
|
||||||
[Header("Attack Settings")]
|
|
||||||
[Tooltip("데미지")]
|
|
||||||
public int atkDamage = 10;
|
|
||||||
[Tooltip("공격 주기")]
|
|
||||||
public float atkIntervalSec = 1f;
|
|
||||||
|
|
||||||
[Header("Model Settings")]
|
|
||||||
[Tooltip("모델 경로")]
|
|
||||||
public string modelPath;
|
public string modelPath;
|
||||||
|
|
||||||
[Header("Properties for convenience")]
|
|
||||||
public int width => sizeX;
|
|
||||||
public int length => sizeY;
|
|
||||||
public float height => sizeY;
|
|
||||||
public int maxHealth => maxHp;
|
|
||||||
public float visionRange => atkRange;
|
|
||||||
public float requiredWorkAmount => manpower;
|
|
||||||
|
|
||||||
public Vector3 GetSize(int rotation)
|
|
||||||
{
|
|
||||||
// Rotation 0,180 = normal, 90,270 = swap width/length
|
|
||||||
bool isRotated = (rotation == 1 || rotation == 3);
|
|
||||||
float w = isRotated ? length : width;
|
|
||||||
float l = isRotated ? width : length;
|
|
||||||
return new Vector3(w, sizeY, l);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
52
Assets/Data/Scripts/DataClasses/TowerDataExtensions.cs
Normal file
52
Assets/Data/Scripts/DataClasses/TowerDataExtensions.cs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using Northbound;
|
||||||
|
|
||||||
|
namespace Northbound.Data
|
||||||
|
{
|
||||||
|
public partial class TowerData
|
||||||
|
{
|
||||||
|
[Header("Runtime References")]
|
||||||
|
[Tooltip("Prefab reference - set by data pipeline")]
|
||||||
|
public GameObject prefab;
|
||||||
|
[Tooltip("UI icon")]
|
||||||
|
public Sprite icon;
|
||||||
|
|
||||||
|
[Header("Placement Settings")]
|
||||||
|
[Tooltip("Offset from grid position")]
|
||||||
|
public Vector3 placementOffset = Vector3.zero;
|
||||||
|
[Tooltip("Can rotate this building?")]
|
||||||
|
public bool allowRotation = true;
|
||||||
|
|
||||||
|
[Header("Health Settings")]
|
||||||
|
[Tooltip("Can this building be damaged?")]
|
||||||
|
public bool isIndestructible = false;
|
||||||
|
[Tooltip("Auto-regenerate health over time")]
|
||||||
|
public bool autoRegenerate = false;
|
||||||
|
[Tooltip("Health regeneration per second")]
|
||||||
|
public int regenPerSecond = 1;
|
||||||
|
|
||||||
|
[Header("Vision Settings")]
|
||||||
|
[Tooltip("Does this building provide vision?")]
|
||||||
|
public bool providesVision = true;
|
||||||
|
|
||||||
|
[Header("Construction Settings")]
|
||||||
|
[Tooltip("건설 시 사용할 도구")]
|
||||||
|
public EquipmentData constructionEquipment;
|
||||||
|
|
||||||
|
[Header("Properties for convenience")]
|
||||||
|
public int width => sizeX;
|
||||||
|
public int length => sizeY;
|
||||||
|
public float height => sizeY;
|
||||||
|
public int maxHealth => maxHp;
|
||||||
|
public float visionRange => atkRange;
|
||||||
|
public float requiredWorkAmount => manpower;
|
||||||
|
|
||||||
|
public Vector3 GetSize(int rotation)
|
||||||
|
{
|
||||||
|
bool isRotated = (rotation == 1 || rotation == 3);
|
||||||
|
float w = isRotated ? length : width;
|
||||||
|
float l = isRotated ? width : length;
|
||||||
|
return new Vector3(w, sizeY, l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fc31df76646aef242938ae1ab8547e0d
|
||||||
212
Assets/Data/Templates/CreepTemplate.prefab
Normal file
212
Assets/Data/Templates/CreepTemplate.prefab
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &3810918154428190126
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 244366501961263783}
|
||||||
|
- component: {fileID: 6694091345637567571}
|
||||||
|
- component: {fileID: 876002834352819743}
|
||||||
|
- component: {fileID: 3376121002006894933}
|
||||||
|
- component: {fileID: 4485945348237935463}
|
||||||
|
- component: {fileID: 3318886927439461238}
|
||||||
|
- component: {fileID: 6023907831447366429}
|
||||||
|
- component: {fileID: 8728041163683826261}
|
||||||
|
- component: {fileID: 3928237758911375249}
|
||||||
|
m_Layer: 11
|
||||||
|
m_Name: CreepTemplate
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &244366501961263783
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!136 &6694091345637567571
|
||||||
|
CapsuleCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 0
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: 0.5
|
||||||
|
m_Height: 2
|
||||||
|
m_Direction: 1
|
||||||
|
m_Center: {x: 0, y: 1, z: 0}
|
||||||
|
--- !u!114 &876002834352819743
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
|
GlobalObjectIdHash: 437508337
|
||||||
|
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||||
|
DeferredDespawnTick: 0
|
||||||
|
Ownership: 1
|
||||||
|
AlwaysReplicateAsRoot: 0
|
||||||
|
SynchronizeTransform: 1
|
||||||
|
ActiveSceneSynchronization: 0
|
||||||
|
SceneMigrationSynchronization: 0
|
||||||
|
SpawnWithObservers: 1
|
||||||
|
DontDestroyWithOwner: 0
|
||||||
|
AutoObjectParentSync: 1
|
||||||
|
SyncOwnerTransformWhenParented: 1
|
||||||
|
AllowOwnerToParent: 0
|
||||||
|
--- !u!114 &3376121002006894933
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 345fc6e7d4f06314f8b548129700eccb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyUnit
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
enemyTeam: 2
|
||||||
|
maxHealth: 100
|
||||||
|
damageEffectPrefab: {fileID: 0}
|
||||||
|
destroyEffectPrefab: {fileID: 0}
|
||||||
|
--- !u!195 &4485945348237935463
|
||||||
|
NavMeshAgent:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_AgentTypeID: 0
|
||||||
|
m_Radius: 0.5
|
||||||
|
m_Speed: 3.5
|
||||||
|
m_Acceleration: 8
|
||||||
|
avoidancePriority: 50
|
||||||
|
m_AngularSpeed: 120
|
||||||
|
m_StoppingDistance: 0
|
||||||
|
m_AutoTraverseOffMeshLink: 1
|
||||||
|
m_AutoBraking: 1
|
||||||
|
m_AutoRepath: 1
|
||||||
|
m_Height: 2
|
||||||
|
m_BaseOffset: 0
|
||||||
|
m_WalkableMask: 4294967295
|
||||||
|
m_ObstacleAvoidanceType: 4
|
||||||
|
--- !u!114 &3318886927439461238
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 453e726e48d16214f84c6d5737edd7df, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyAIController
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
aiType: 2
|
||||||
|
detectionRange: 15
|
||||||
|
detectionAngle: 120
|
||||||
|
playerLayer:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 640
|
||||||
|
obstacleLayer:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 1152
|
||||||
|
maxChaseDistance: 30
|
||||||
|
chaseGiveUpDistance: 25
|
||||||
|
attackRange: 2
|
||||||
|
attackInterval: 1.5
|
||||||
|
attackDamage: 10
|
||||||
|
moveSpeed: 3.5
|
||||||
|
chaseSpeedMultiplier: 1.5
|
||||||
|
showDebugInfo: 1
|
||||||
|
--- !u!95 &6023907831447366429
|
||||||
|
Animator:
|
||||||
|
serializedVersion: 7
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_Avatar: {fileID: 0}
|
||||||
|
m_Controller: {fileID: 9100000, guid: 0a6254dd97e2e8a47ab5cd5c1a629717, type: 2}
|
||||||
|
m_CullingMode: 0
|
||||||
|
m_UpdateMode: 0
|
||||||
|
m_ApplyRootMotion: 0
|
||||||
|
m_LinearVelocityBlending: 0
|
||||||
|
m_StabilizeFeet: 0
|
||||||
|
m_AnimatePhysics: 0
|
||||||
|
m_WarningMessage:
|
||||||
|
m_HasTransformHierarchy: 1
|
||||||
|
m_AllowConstantClipSamplingOptimization: 1
|
||||||
|
m_KeepAnimatorStateOnDisable: 0
|
||||||
|
m_WriteDefaultValuesOnDisable: 0
|
||||||
|
--- !u!114 &8728041163683826261
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 2b2a547d86f65d64a93a7a3c415d1ce2, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.MonsterAnimationController
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
speedParam: Speed
|
||||||
|
attackTriggerParam: Attack
|
||||||
|
isMovingParam: IsMoving
|
||||||
|
autoLoadFromMonsterData: 1
|
||||||
|
debugLogging: 0
|
||||||
|
--- !u!114 &3928237758911375249
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3810918154428190126}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 85e4c68e85ef1704b83cecb71de7d67a, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.CreepDataComponent
|
||||||
|
creepData: {fileID: 0}
|
||||||
|
autoApplyOnAwake: 1
|
||||||
7
Assets/Data/Templates/CreepTemplate.prefab.meta
Normal file
7
Assets/Data/Templates/CreepTemplate.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ed91faf6ce548f94b80fff463c6c42e2
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -139,3 +139,18 @@ MonoBehaviour:
|
|||||||
SourcePrefabToOverride: {fileID: 0}
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
SourceHashToOverride: 0
|
SourceHashToOverride: 0
|
||||||
OverridingTargetPrefab: {fileID: 0}
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
- Override: 0
|
||||||
|
Prefab: {fileID: 3810918154428190126, guid: ed91faf6ce548f94b80fff463c6c42e2, type: 3}
|
||||||
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
|
SourceHashToOverride: 0
|
||||||
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
- Override: 0
|
||||||
|
Prefab: {fileID: 4538112939981844081, guid: 79ce9cde6263e34498c5011cdcf36695, type: 3}
|
||||||
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
|
SourceHashToOverride: 0
|
||||||
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
- Override: 0
|
||||||
|
Prefab: {fileID: 3360908504529629757, guid: 41d918243a20cbd4d8f1558ac8345e9b, type: 3}
|
||||||
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
|
SourceHashToOverride: 0
|
||||||
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
|||||||
8
Assets/External/Kaykit Plant Warrior.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 54bd923b7725e12459eaed04d33a5c48
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Animations.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Animations.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 75ee017f5669e634c9ca6c410cc48fc8
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
6
Assets/External/Kaykit Plant Warrior/Animations/Click here for more Free Animations.url
vendored
Normal file
6
Assets/External/Kaykit Plant Warrior/Animations/Click here for more Free Animations.url
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[{000214A0-0000-0000-C000-000000000046}]
|
||||||
|
Prop3=19,11
|
||||||
|
[InternetShortcut]
|
||||||
|
IDList=
|
||||||
|
URL=https://kaylousberg.itch.io/kaykit-character-animations
|
||||||
|
HotKey=0
|
||||||
7
Assets/External/Kaykit Plant Warrior/Animations/Click here for more Free Animations.url.meta
vendored
Normal file
7
Assets/External/Kaykit Plant Warrior/Animations/Click here for more Free Animations.url.meta
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8763aa09260d6ac409f2707855fa5443
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Animations/fbx.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Animations/fbx.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b0874cb7ca57c3d49a29ed6d136ab653
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6b8d81791453f9d458015812a83e2c39
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_General.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_General.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_General.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_General.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8872ce421a78bdd4eb1f5c8fc78e87c9
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_MovementBasic.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_MovementBasic.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_MovementBasic.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Animations/fbx/Rig_Medium/Rig_Medium_MovementBasic.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 596f19e97b943af4f8167f39421d88ed
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Animations/gltf.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Animations/gltf.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5d922eec39a80ae4ba3d599b6825af8b
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c9f6f1074733b2d41b39d4510728a029
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_General.glb
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_General.glb
vendored
Normal file
Binary file not shown.
7
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_General.glb.meta
vendored
Normal file
7
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_General.glb.meta
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bd4101a0e02dd1b4bbccff629b1fde15
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_MovementBasic.glb
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Animations/gltf/Rig_Medium/Rig_Medium_MovementBasic.glb
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 779d860784ddc294c9bb39a03ec33862
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/Assets.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/Assets.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c54d0285bea0de94b874a9fb29d9fbd3
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Arrow.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Arrow.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Arrow.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Arrow.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8c62b3852e53ff14dad446ec1d6d3f39
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f12d0aaf9f944044e968c491911ae432
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow_withString.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow_withString.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow_withString.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Bow_withString.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0bec7fc8ba62f974cb204103d5086ac6
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Shield.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Shield.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Shield.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Shield.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d952e765bc3159946897942a74a81b27
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Spear.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Spear.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Spear.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/Assets/PlantWarrior_Spear.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bec7726862777a042919c40fd38fce81
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/Assets/plantcreatures_texture.png
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/Assets/plantcreatures_texture.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
143
Assets/External/Kaykit Plant Warrior/Assets/plantcreatures_texture.png.meta
vendored
Normal file
143
Assets/External/Kaykit Plant Warrior/Assets/plantcreatures_texture.png.meta
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e521081c4e068ff409bd4d6199155ceb
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable:
|
||||||
|
- first:
|
||||||
|
213: 934633628187620750
|
||||||
|
second: plantcreatures_texture_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: plantcreatures_texture_0
|
||||||
|
rect:
|
||||||
|
serializedVersion: 2
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
width: 1024
|
||||||
|
height: 1024
|
||||||
|
alignment: 0
|
||||||
|
pivot: {x: 0, y: 0}
|
||||||
|
border: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
customData:
|
||||||
|
outline: []
|
||||||
|
physicsShape: []
|
||||||
|
tessellationDetail: -1
|
||||||
|
bones: []
|
||||||
|
spriteID: e85f14b355c78fc00800000000000000
|
||||||
|
internalID: 934633628187620750
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
outline: []
|
||||||
|
customData:
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable:
|
||||||
|
plantcreatures_texture_0: 934633628187620750
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/characters.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/characters.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d915cfad29386964abec8e1e1dec1598
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/characters/PlantWarrior.fbx
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/characters/PlantWarrior.fbx
vendored
Normal file
Binary file not shown.
110
Assets/External/Kaykit Plant Warrior/characters/PlantWarrior.fbx.meta
vendored
Normal file
110
Assets/External/Kaykit Plant Warrior/characters/PlantWarrior.fbx.meta
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a7b7bbc10aa9e924e842b5f03bf52e44
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName:
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 0
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/External/Kaykit Plant Warrior/textures.meta
vendored
Normal file
8
Assets/External/Kaykit Plant Warrior/textures.meta
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0a22594ddd696564c9c15862251e4e47
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture.png
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
143
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture.png.meta
vendored
Normal file
143
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture.png.meta
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2e4c485dd1ea2564cb09817675b80365
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable:
|
||||||
|
- first:
|
||||||
|
213: 934633628187620750
|
||||||
|
second: plantcreatures_texture_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: plantcreatures_texture_0
|
||||||
|
rect:
|
||||||
|
serializedVersion: 2
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
width: 1024
|
||||||
|
height: 1024
|
||||||
|
alignment: 0
|
||||||
|
pivot: {x: 0, y: 0}
|
||||||
|
border: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
customData:
|
||||||
|
outline: []
|
||||||
|
physicsShape: []
|
||||||
|
tessellationDetail: -1
|
||||||
|
bones: []
|
||||||
|
spriteID: e85f14b355c78fc00800000000000000
|
||||||
|
internalID: 934633628187620750
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
outline: []
|
||||||
|
customData:
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable:
|
||||||
|
plantcreatures_texture_0: 934633628187620750
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture_B.png
vendored
Normal file
BIN
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture_B.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
143
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture_B.png.meta
vendored
Normal file
143
Assets/External/Kaykit Plant Warrior/textures/plantcreatures_texture_B.png.meta
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 810873a624517f34282bfa7bb27e0d85
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable:
|
||||||
|
- first:
|
||||||
|
213: -4786934506563326636
|
||||||
|
second: plantcreatures_texture_B_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: plantcreatures_texture_B_0
|
||||||
|
rect:
|
||||||
|
serializedVersion: 2
|
||||||
|
x: 0
|
||||||
|
y: 0
|
||||||
|
width: 1024
|
||||||
|
height: 1024
|
||||||
|
alignment: 0
|
||||||
|
pivot: {x: 0, y: 0}
|
||||||
|
border: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
customData:
|
||||||
|
outline: []
|
||||||
|
physicsShape: []
|
||||||
|
tessellationDetail: -1
|
||||||
|
bones: []
|
||||||
|
spriteID: 45dab35bd64619db0800000000000000
|
||||||
|
internalID: -4786934506563326636
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
outline: []
|
||||||
|
customData:
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable:
|
||||||
|
plantcreatures_texture_B_0: -4786934506563326636
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Models/PlantWarrior.fbx
Normal file
BIN
Assets/Models/PlantWarrior.fbx
Normal file
Binary file not shown.
110
Assets/Models/PlantWarrior.fbx.meta
Normal file
110
Assets/Models/PlantWarrior.fbx.meta
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1b47a488ece83f249abea22b1b1877fb
|
||||||
|
ModelImporter:
|
||||||
|
serializedVersion: 24200
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
materials:
|
||||||
|
materialImportMode: 2
|
||||||
|
materialName: 0
|
||||||
|
materialSearch: 1
|
||||||
|
materialLocation: 1
|
||||||
|
animations:
|
||||||
|
legacyGenerateAnimations: 4
|
||||||
|
bakeSimulation: 0
|
||||||
|
resampleCurves: 1
|
||||||
|
optimizeGameObjects: 0
|
||||||
|
removeConstantScaleCurves: 0
|
||||||
|
motionNodeName:
|
||||||
|
animationImportErrors:
|
||||||
|
animationImportWarnings:
|
||||||
|
animationRetargetingWarnings:
|
||||||
|
animationDoRetargetingWarnings: 0
|
||||||
|
importAnimatedCustomProperties: 0
|
||||||
|
importConstraints: 0
|
||||||
|
animationCompression: 1
|
||||||
|
animationRotationError: 0.5
|
||||||
|
animationPositionError: 0.5
|
||||||
|
animationScaleError: 0.5
|
||||||
|
animationWrapMode: 0
|
||||||
|
extraExposedTransformPaths: []
|
||||||
|
extraUserProperties: []
|
||||||
|
clipAnimations: []
|
||||||
|
isReadable: 0
|
||||||
|
meshes:
|
||||||
|
lODScreenPercentages: []
|
||||||
|
globalScale: 1
|
||||||
|
meshCompression: 0
|
||||||
|
addColliders: 0
|
||||||
|
useSRGBMaterialColor: 1
|
||||||
|
sortHierarchyByName: 1
|
||||||
|
importPhysicalCameras: 1
|
||||||
|
importVisibility: 1
|
||||||
|
importBlendShapes: 1
|
||||||
|
importCameras: 1
|
||||||
|
importLights: 1
|
||||||
|
nodeNameCollisionStrategy: 1
|
||||||
|
fileIdsGeneration: 2
|
||||||
|
swapUVChannels: 0
|
||||||
|
generateSecondaryUV: 0
|
||||||
|
useFileUnits: 1
|
||||||
|
keepQuads: 0
|
||||||
|
weldVertices: 1
|
||||||
|
bakeAxisConversion: 0
|
||||||
|
preserveHierarchy: 0
|
||||||
|
skinWeightsMode: 0
|
||||||
|
maxBonesPerVertex: 4
|
||||||
|
minBoneWeight: 0.001
|
||||||
|
optimizeBones: 1
|
||||||
|
generateMeshLods: 0
|
||||||
|
meshLodGenerationFlags: 0
|
||||||
|
maximumMeshLod: -1
|
||||||
|
meshOptimizationFlags: -1
|
||||||
|
indexFormat: 0
|
||||||
|
secondaryUVAngleDistortion: 8
|
||||||
|
secondaryUVAreaDistortion: 15.000001
|
||||||
|
secondaryUVHardAngle: 88
|
||||||
|
secondaryUVMarginMethod: 1
|
||||||
|
secondaryUVMinLightmapResolution: 40
|
||||||
|
secondaryUVMinObjectScale: 1
|
||||||
|
secondaryUVPackMargin: 4
|
||||||
|
useFileScale: 1
|
||||||
|
strictVertexDataChecks: 0
|
||||||
|
tangentSpace:
|
||||||
|
normalSmoothAngle: 60
|
||||||
|
normalImportMode: 0
|
||||||
|
tangentImportMode: 3
|
||||||
|
normalCalculationMode: 4
|
||||||
|
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||||
|
blendShapeNormalImportMode: 1
|
||||||
|
normalSmoothingSource: 0
|
||||||
|
referencedClips: []
|
||||||
|
importAnimation: 1
|
||||||
|
humanDescription:
|
||||||
|
serializedVersion: 3
|
||||||
|
human: []
|
||||||
|
skeleton: []
|
||||||
|
armTwist: 0.5
|
||||||
|
foreArmTwist: 0.5
|
||||||
|
upperLegTwist: 0.5
|
||||||
|
legTwist: 0.5
|
||||||
|
armStretch: 0.05
|
||||||
|
legStretch: 0.05
|
||||||
|
feetSpacing: 0
|
||||||
|
globalScale: 1
|
||||||
|
rootMotionBoneName: root
|
||||||
|
hasTranslationDoF: 0
|
||||||
|
hasExtraRoot: 0
|
||||||
|
skeletonHasParents: 1
|
||||||
|
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||||
|
autoGenerateAvatarMappingIfUnspecified: 1
|
||||||
|
animationType: 2
|
||||||
|
humanoidOversampling: 1
|
||||||
|
avatarSetup: 1
|
||||||
|
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||||
|
importBlendShapeDeformPercent: 1
|
||||||
|
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||||
|
additionalBone: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Prefabs/Creep.meta
Normal file
8
Assets/Prefabs/Creep.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d7d14085325223a4d9f0b56c40c0d2b9
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
1910
Assets/Prefabs/Creep/Creep1.prefab
Normal file
1910
Assets/Prefabs/Creep/Creep1.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/Creep/Creep1.prefab.meta
Normal file
7
Assets/Prefabs/Creep/Creep1.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 79ce9cde6263e34498c5011cdcf36695
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
78
Assets/Prefabs/CreepCamp.prefab
Normal file
78
Assets/Prefabs/CreepCamp.prefab
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &3360908504529629757
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 5307373070786284181}
|
||||||
|
- component: {fileID: 7944914562202077200}
|
||||||
|
- component: {fileID: 3349671398273528302}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: CreepCamp
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &5307373070786284181
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3360908504529629757}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -6.74042, y: 1.00002, z: -72.33073}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &7944914562202077200
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3360908504529629757}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
|
GlobalObjectIdHash: 0
|
||||||
|
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||||
|
DeferredDespawnTick: 0
|
||||||
|
Ownership: 1
|
||||||
|
AlwaysReplicateAsRoot: 0
|
||||||
|
SynchronizeTransform: 1
|
||||||
|
ActiveSceneSynchronization: 0
|
||||||
|
SceneMigrationSynchronization: 1
|
||||||
|
SpawnWithObservers: 1
|
||||||
|
DontDestroyWithOwner: 0
|
||||||
|
AutoObjectParentSync: 1
|
||||||
|
SyncOwnerTransformWhenParented: 1
|
||||||
|
AllowOwnerToParent: 0
|
||||||
|
--- !u!114 &3349671398273528302
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3360908504529629757}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d4c5f296c2ebd7d41b2517a03c8b574c, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.CreepCamp
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
creepPrefabs: []
|
||||||
|
campStrength: 1
|
||||||
|
campCostBudget: 10
|
||||||
|
spawnRadius: 5
|
||||||
|
maxSpawnAttempts: 50
|
||||||
7
Assets/Prefabs/CreepCamp.prefab.meta
Normal file
7
Assets/Prefabs/CreepCamp.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 41d918243a20cbd4d8f1558ac8345e9b
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -930,6 +930,15 @@ MonoBehaviour:
|
|||||||
randomRotation: 1
|
randomRotation: 1
|
||||||
scaleVariation: 0.2
|
scaleVariation: 0.2
|
||||||
maxObstacleSpawnAttempts: 50
|
maxObstacleSpawnAttempts: 50
|
||||||
|
creepCampPrefab: {fileID: 3360908504529629757, guid: 41d918243a20cbd4d8f1558ac8345e9b, type: 3}
|
||||||
|
minDistanceBetweenCamps: 60
|
||||||
|
minDistanceFromCoreCamps: 60
|
||||||
|
minDistanceFromBarracksCamps: 60
|
||||||
|
minDistanceFromInitialResource: 60
|
||||||
|
additionalCreepCampCount: 5
|
||||||
|
baseCampStrength: 3
|
||||||
|
strengthIncreasePerZ100: 0.1
|
||||||
|
resourceCampStrengthBonus: 0.2
|
||||||
generateResourcesFirst: 1
|
generateResourcesFirst: 1
|
||||||
--- !u!4 &672563223
|
--- !u!4 &672563223
|
||||||
Transform:
|
Transform:
|
||||||
@@ -1836,8 +1845,8 @@ MonoBehaviour:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 64
|
m_Bits: 64
|
||||||
availableBuildings:
|
availableBuildings:
|
||||||
- {fileID: 11400000, guid: 03a521eb1160745439ba2d0efeb12f3c, type: 2}
|
|
||||||
- {fileID: 11400000, guid: 3e2e145df85a3ee4eb615f87efba4554, type: 2}
|
- {fileID: 11400000, guid: 3e2e145df85a3ee4eb615f87efba4554, type: 2}
|
||||||
|
- {fileID: 11400000, guid: 03a521eb1160745439ba2d0efeb12f3c, type: 2}
|
||||||
foundationPrefab: {fileID: 1340458267086560577, guid: d20c3ce6a3c39154aa033d0f61bd9a4d, type: 3}
|
foundationPrefab: {fileID: 1340458267086560577, guid: d20c3ce6a3c39154aa033d0f61bd9a4d, type: 3}
|
||||||
--- !u!4 &1199559224
|
--- !u!4 &1199559224
|
||||||
Transform:
|
Transform:
|
||||||
@@ -2049,7 +2058,7 @@ MonoBehaviour:
|
|||||||
m_DisconnectTimeoutMS: 30000
|
m_DisconnectTimeoutMS: 30000
|
||||||
ConnectionData:
|
ConnectionData:
|
||||||
Address: 127.0.0.1
|
Address: 127.0.0.1
|
||||||
Port: 7914
|
Port: 7954
|
||||||
ServerListenAddress: 127.0.0.1
|
ServerListenAddress: 127.0.0.1
|
||||||
ClientBindPort: 0
|
ClientBindPort: 0
|
||||||
DebugSimulator:
|
DebugSimulator:
|
||||||
|
|||||||
8
Assets/ScriptableObjects/Creep.meta
Normal file
8
Assets/ScriptableObjects/Creep.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f03bcf83cef19884cb1e18080e7f7cf4
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
using Unity.Netcode;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Northbound
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 건물에 데미지를 주는 테스트/공격 시스템
|
|
||||||
/// </summary>
|
|
||||||
public class BuildingDamageTest : MonoBehaviour
|
|
||||||
{
|
|
||||||
[Header("Damage Settings")]
|
|
||||||
public int damageAmount = 10;
|
|
||||||
public float damageInterval = 1f;
|
|
||||||
public KeyCode damageKey = KeyCode.F;
|
|
||||||
|
|
||||||
[Header("Target")]
|
|
||||||
public float maxDistance = 10f;
|
|
||||||
public LayerMask buildingLayer;
|
|
||||||
|
|
||||||
private float _lastDamageTime;
|
|
||||||
|
|
||||||
private void Update()
|
|
||||||
{
|
|
||||||
if (Input.GetKeyDown(damageKey))
|
|
||||||
{
|
|
||||||
TryDamageBuilding();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 자동 데미지 (테스트용)
|
|
||||||
if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(damageKey))
|
|
||||||
{
|
|
||||||
if (Time.time - _lastDamageTime >= damageInterval)
|
|
||||||
{
|
|
||||||
TryDamageBuilding();
|
|
||||||
_lastDamageTime = Time.time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TryDamageBuilding()
|
|
||||||
{
|
|
||||||
// 카메라에서 레이캐스트
|
|
||||||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
||||||
|
|
||||||
if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, buildingLayer))
|
|
||||||
{
|
|
||||||
Building building = hit.collider.GetComponentInParent<Building>();
|
|
||||||
|
|
||||||
if (building != null)
|
|
||||||
{
|
|
||||||
ulong attackerId = NetworkManager.Singleton != null && NetworkManager.Singleton.IsClient
|
|
||||||
? NetworkManager.Singleton.LocalClientId
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
building.TakeDamage(damageAmount, attackerId);
|
|
||||||
Debug.Log($"<color=yellow>[Test] {building.buildingData?.buildingName ?? "건물"}에게 {damageAmount} 데미지!</color>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnGUI()
|
|
||||||
{
|
|
||||||
GUILayout.BeginArea(new Rect(10, 10, 300, 100));
|
|
||||||
GUILayout.Label($"[{damageKey}] 건물에 {damageAmount} 데미지");
|
|
||||||
GUILayout.Label($"[Shift + {damageKey}] 연속 데미지");
|
|
||||||
GUILayout.EndArea();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 62b3bdffc8c849d48886167d316e16b6
|
|
||||||
@@ -60,6 +60,7 @@ namespace Northbound
|
|||||||
if (buildingData == null) return;
|
if (buildingData == null) return;
|
||||||
|
|
||||||
// 아이콘 설정
|
// 아이콘 설정
|
||||||
|
/*
|
||||||
if (iconImage != null && buildingData.icon != null)
|
if (iconImage != null && buildingData.icon != null)
|
||||||
{
|
{
|
||||||
iconImage.sprite = buildingData.icon;
|
iconImage.sprite = buildingData.icon;
|
||||||
@@ -69,7 +70,8 @@ namespace Northbound
|
|||||||
{
|
{
|
||||||
iconImage.enabled = false;
|
iconImage.enabled = false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
iconImage.enabled = false;
|
||||||
// 이름 설정
|
// 이름 설정
|
||||||
if (nameText != null)
|
if (nameText != null)
|
||||||
{
|
{
|
||||||
|
|||||||
215
Assets/Scripts/CreepCamp.cs
Normal file
215
Assets/Scripts/CreepCamp.cs
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
using Northbound.Data;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Northbound
|
||||||
|
{
|
||||||
|
public class CreepCamp : NetworkBehaviour
|
||||||
|
{
|
||||||
|
[Header("Camp Settings")]
|
||||||
|
[Tooltip("Creep prefabs available to spawn")]
|
||||||
|
[SerializeField] private List<GameObject> creepPrefabs = new List<GameObject>();
|
||||||
|
|
||||||
|
[Header("Spawning Settings")]
|
||||||
|
[Tooltip("Camp strength multiplier (higher = stronger creeps)")]
|
||||||
|
[SerializeField] private float campStrength = 1f;
|
||||||
|
|
||||||
|
[Tooltip("Cost budget for spawning creeps")]
|
||||||
|
[SerializeField] private float campCostBudget = 10f;
|
||||||
|
|
||||||
|
[Tooltip("Spawn radius around camp")]
|
||||||
|
[SerializeField] private float spawnRadius = 5f;
|
||||||
|
|
||||||
|
[Tooltip("Max creep spawn attempts")]
|
||||||
|
[SerializeField] private int maxSpawnAttempts = 50;
|
||||||
|
|
||||||
|
private float _zPosition;
|
||||||
|
|
||||||
|
public override void OnNetworkSpawn()
|
||||||
|
{
|
||||||
|
if (IsServer)
|
||||||
|
{
|
||||||
|
SpawnCreeps();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitializeCamp(float zPosition, float strengthMultiplier)
|
||||||
|
{
|
||||||
|
_zPosition = zPosition;
|
||||||
|
campStrength = strengthMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetCreepPrefabs(List<GameObject> prefabs)
|
||||||
|
{
|
||||||
|
creepPrefabs.Clear();
|
||||||
|
creepPrefabs.AddRange(prefabs);
|
||||||
|
Debug.Log($"[CreepCamp] SetCreepPrefabs called with {prefabs.Count} prefabs. Current count: {creepPrefabs.Count}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SpawnCreeps()
|
||||||
|
{
|
||||||
|
Debug.Log($"[CreepCamp] Starting creep spawn at Z={_zPosition:F1}, strength={campStrength:F2}x, prefabs={creepPrefabs.Count}");
|
||||||
|
|
||||||
|
if (creepPrefabs.Count == 0)
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepCamp] No creep prefabs assigned!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float remainingCost = campCostBudget * campStrength;
|
||||||
|
Debug.Log($"[CreepCamp] Cost budget: {campCostBudget} x {campStrength:F2} = {remainingCost:F2}");
|
||||||
|
|
||||||
|
int spawnedCount = 0;
|
||||||
|
|
||||||
|
for (int attempt = 0; attempt < maxSpawnAttempts && remainingCost > 0; attempt++)
|
||||||
|
{
|
||||||
|
GameObject selectedCreep = SelectCreepByCost(remainingCost);
|
||||||
|
if (selectedCreep == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepCamp] Could not select creep (attempt {attempt + 1}/{maxSpawnAttempts}), remaining cost: {remainingCost:F2}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
CreepData creepData = GetCreepDataFromPrefab(selectedCreep);
|
||||||
|
if (creepData == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepCamp] Could not get creep data from {selectedCreep.name}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (creepData.cost > remainingCost)
|
||||||
|
{
|
||||||
|
if (!CanSpawnAnyCreep(remainingCost))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepCamp] No affordable creeps found. Remaining cost: {remainingCost:F2}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[CreepCamp] Spawning {selectedCreep.name} (cost: {creepData.cost}, remaining: {remainingCost:F2})");
|
||||||
|
SpawnCreep(selectedCreep);
|
||||||
|
remainingCost -= creepData.cost;
|
||||||
|
spawnedCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[CreepCamp] Spawned {spawnedCount} creeps at Z={_zPosition:F1} with strength {campStrength:F2}x");
|
||||||
|
}
|
||||||
|
|
||||||
|
private GameObject SelectCreepByCost(float remainingCost)
|
||||||
|
{
|
||||||
|
List<GameObject> affordableCreeps = new List<GameObject>();
|
||||||
|
|
||||||
|
foreach (var prefab in creepPrefabs)
|
||||||
|
{
|
||||||
|
CreepData creepData = GetCreepDataFromPrefab(prefab);
|
||||||
|
if (creepData != null && creepData.cost <= remainingCost)
|
||||||
|
{
|
||||||
|
affordableCreeps.Add(prefab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (affordableCreeps.Count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
float totalWeight = 0f;
|
||||||
|
foreach (var prefab in affordableCreeps)
|
||||||
|
{
|
||||||
|
CreepData creepData = GetCreepDataFromPrefab(prefab);
|
||||||
|
if (creepData != null)
|
||||||
|
{
|
||||||
|
totalWeight += creepData.weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalWeight == 0f)
|
||||||
|
{
|
||||||
|
return affordableCreeps[Random.Range(0, affordableCreeps.Count)];
|
||||||
|
}
|
||||||
|
|
||||||
|
float randomValue = Random.Range(0f, totalWeight);
|
||||||
|
float cumulativeWeight = 0f;
|
||||||
|
|
||||||
|
foreach (var prefab in affordableCreeps)
|
||||||
|
{
|
||||||
|
CreepData creepData = GetCreepDataFromPrefab(prefab);
|
||||||
|
if (creepData != null)
|
||||||
|
{
|
||||||
|
cumulativeWeight += creepData.weight;
|
||||||
|
if (randomValue <= cumulativeWeight)
|
||||||
|
{
|
||||||
|
return prefab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return affordableCreeps[Random.Range(0, affordableCreeps.Count)];
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanSpawnAnyCreep(float remainingCost)
|
||||||
|
{
|
||||||
|
foreach (var prefab in creepPrefabs)
|
||||||
|
{
|
||||||
|
CreepData creepData = GetCreepDataFromPrefab(prefab);
|
||||||
|
if (creepData != null && creepData.cost <= remainingCost)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CreepData GetCreepDataFromPrefab(GameObject prefab)
|
||||||
|
{
|
||||||
|
if (prefab == null) return null;
|
||||||
|
|
||||||
|
CreepDataComponent component = prefab.GetComponent<CreepDataComponent>();
|
||||||
|
if (component != null)
|
||||||
|
{
|
||||||
|
return component.creepData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SpawnCreep(GameObject prefab)
|
||||||
|
{
|
||||||
|
Vector3 spawnOffset = Random.insideUnitSphere * spawnRadius;
|
||||||
|
spawnOffset.y = 0;
|
||||||
|
|
||||||
|
GameObject creep = Instantiate(prefab, transform.position + spawnOffset, Quaternion.identity);
|
||||||
|
|
||||||
|
if (creep.GetComponent<FogOfWarVisibility>() == null)
|
||||||
|
{
|
||||||
|
var visibility = creep.AddComponent<FogOfWarVisibility>();
|
||||||
|
visibility.showInExploredAreas = false;
|
||||||
|
visibility.updateInterval = 0.2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkObject networkObj = creep.GetComponent<NetworkObject>();
|
||||||
|
if (networkObj == null)
|
||||||
|
{
|
||||||
|
networkObj = creep.AddComponent<NetworkObject>();
|
||||||
|
}
|
||||||
|
|
||||||
|
networkObj.Spawn();
|
||||||
|
|
||||||
|
creep.transform.SetParent(transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDrawGizmos()
|
||||||
|
{
|
||||||
|
Gizmos.color = Color.red;
|
||||||
|
Gizmos.DrawWireSphere(transform.position, spawnRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDrawGizmosSelected()
|
||||||
|
{
|
||||||
|
Gizmos.color = new Color(1f, 0f, 0f, 0.3f);
|
||||||
|
Gizmos.DrawSphere(transform.position, spawnRadius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/CreepCamp.cs.meta
Normal file
2
Assets/Scripts/CreepCamp.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d4c5f296c2ebd7d41b2517a03c8b574c
|
||||||
62
Assets/Scripts/CreepDataComponent.cs
Normal file
62
Assets/Scripts/CreepDataComponent.cs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
using Northbound.Data;
|
||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.AI;
|
||||||
|
|
||||||
|
namespace Northbound
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(EnemyUnit))]
|
||||||
|
[RequireComponent(typeof(EnemyAIController))]
|
||||||
|
[RequireComponent(typeof(NavMeshAgent))]
|
||||||
|
[RequireComponent(typeof(NetworkObject))]
|
||||||
|
public class CreepDataComponent : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("Data Reference")]
|
||||||
|
[Tooltip("ScriptableObject containing creep data")]
|
||||||
|
public CreepData creepData;
|
||||||
|
|
||||||
|
[Header("Auto-Apply Settings")]
|
||||||
|
[Tooltip("Automatically apply stats from creepData on Awake")]
|
||||||
|
public bool autoApplyOnAwake = true;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
if (autoApplyOnAwake && creepData != null)
|
||||||
|
{
|
||||||
|
ApplyCreepData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyCreepData()
|
||||||
|
{
|
||||||
|
if (creepData == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[CreepDataComponent] creepData is null", this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnemyUnit enemyUnit = GetComponent<EnemyUnit>();
|
||||||
|
if (enemyUnit != null)
|
||||||
|
{
|
||||||
|
enemyUnit.maxHealth = creepData.maxHp;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnemyAIController aiController = GetComponent<EnemyAIController>();
|
||||||
|
if (aiController != null)
|
||||||
|
{
|
||||||
|
aiController.moveSpeed = creepData.moveSpeed;
|
||||||
|
aiController.attackDamage = creepData.atkDamage;
|
||||||
|
aiController.attackRange = creepData.atkRange;
|
||||||
|
aiController.attackInterval = creepData.atkIntervalSec;
|
||||||
|
}
|
||||||
|
|
||||||
|
NavMeshAgent navAgent = GetComponent<NavMeshAgent>();
|
||||||
|
if (navAgent != null)
|
||||||
|
{
|
||||||
|
navAgent.speed = creepData.moveSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[CreepDataComponent] Applied data for {creepData.id} ({creepData.memo})", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/CreepDataComponent.cs.meta
Normal file
2
Assets/Scripts/CreepDataComponent.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 85e4c68e85ef1704b83cecb71de7d67a
|
||||||
@@ -59,6 +59,7 @@ namespace Northbound.Editor
|
|||||||
prefabSetups = new Dictionary<string, IPrefabSetup>
|
prefabSetups = new Dictionary<string, IPrefabSetup>
|
||||||
{
|
{
|
||||||
{ "Monster", new MonsterPrefabSetup() },
|
{ "Monster", new MonsterPrefabSetup() },
|
||||||
|
{ "Creep", new CreepPrefabSetup() },
|
||||||
{ "Tower", new TowerPrefabSetup() },
|
{ "Tower", new TowerPrefabSetup() },
|
||||||
{ "Player", new PlayerPrefabSetup() }
|
{ "Player", new PlayerPrefabSetup() }
|
||||||
};
|
};
|
||||||
|
|||||||
118
Assets/Scripts/Editor/CreepPrefabSetup.cs
Normal file
118
Assets/Scripts/Editor/CreepPrefabSetup.cs
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
using Northbound.Data;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Northbound.Editor
|
||||||
|
{
|
||||||
|
public class CreepPrefabSetup : IPrefabSetup
|
||||||
|
{
|
||||||
|
public string GetTemplateName()
|
||||||
|
{
|
||||||
|
return "CreepTemplate";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetupPrefab(GameObject prefab, ScriptableObject data)
|
||||||
|
{
|
||||||
|
if (!(data is CreepData creepData))
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepPrefabSetup] Expected CreepData, got {data.GetType().Name}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var creepDataComponent = prefab.GetComponent<CreepDataComponent>();
|
||||||
|
if (creepDataComponent != null)
|
||||||
|
{
|
||||||
|
creepDataComponent.creepData = creepData;
|
||||||
|
creepDataComponent.ApplyCreepData();
|
||||||
|
}
|
||||||
|
|
||||||
|
var animationController = prefab.GetComponent<MonsterAnimationController>();
|
||||||
|
if (animationController == null)
|
||||||
|
{
|
||||||
|
animationController = prefab.AddComponent<MonsterAnimationController>();
|
||||||
|
Debug.Log($"[CreepPrefabSetup] Added MonsterAnimationController component");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(creepData.modelPath))
|
||||||
|
{
|
||||||
|
RemoveOldModel(prefab);
|
||||||
|
|
||||||
|
if (creepData.modelPath.ToLower().EndsWith(".fbx"))
|
||||||
|
{
|
||||||
|
GameObject fbxModel = AssetDatabase.LoadAssetAtPath<GameObject>(creepData.modelPath);
|
||||||
|
if (fbxModel != null)
|
||||||
|
{
|
||||||
|
GameObject fbxInstance = GameObject.Instantiate(fbxModel);
|
||||||
|
fbxInstance.name = "Model";
|
||||||
|
fbxInstance.transform.SetParent(prefab.transform, false);
|
||||||
|
fbxInstance.transform.localPosition = Vector3.zero;
|
||||||
|
fbxInstance.transform.localRotation = Quaternion.identity;
|
||||||
|
fbxInstance.transform.localScale = Vector3.one;
|
||||||
|
|
||||||
|
Debug.Log($"[CreepPrefabSetup] Applied FBX model: {creepData.modelPath}");
|
||||||
|
|
||||||
|
Avatar modelAvatar = fbxModel.GetComponent<Animator>()?.avatar;
|
||||||
|
|
||||||
|
if (modelAvatar != null)
|
||||||
|
{
|
||||||
|
Animator prefabAnimator = prefab.GetComponent<Animator>();
|
||||||
|
if (prefabAnimator != null)
|
||||||
|
{
|
||||||
|
prefabAnimator.avatar = modelAvatar;
|
||||||
|
Debug.Log($"[CreepPrefabSetup] Applied Avatar: {modelAvatar.name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepPrefabSetup] Could not load FBX model: {creepData.modelPath}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var meshFilter = prefab.GetComponent<MeshFilter>();
|
||||||
|
if (meshFilter != null)
|
||||||
|
{
|
||||||
|
Mesh mesh = AssetDatabase.LoadAssetAtPath<Mesh>(creepData.modelPath);
|
||||||
|
if (mesh != null)
|
||||||
|
{
|
||||||
|
meshFilter.sharedMesh = mesh;
|
||||||
|
Debug.Log($"[CreepPrefabSetup] Applied mesh: {creepData.modelPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepPrefabSetup] Could not load mesh: {creepData.modelPath}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(creepData.animationControllerPath))
|
||||||
|
{
|
||||||
|
Animator animator = prefab.GetComponent<Animator>();
|
||||||
|
if (animator != null)
|
||||||
|
{
|
||||||
|
RuntimeAnimatorController controller = AssetDatabase.LoadAssetAtPath<RuntimeAnimatorController>(creepData.animationControllerPath);
|
||||||
|
if (controller != null)
|
||||||
|
{
|
||||||
|
animator.runtimeAnimatorController = controller;
|
||||||
|
Debug.Log($"[CreepPrefabSetup] Applied Animator Controller: {creepData.animationControllerPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[CreepPrefabSetup] Could not load Animator Controller: {creepData.animationControllerPath}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RemoveOldModel(GameObject prefab)
|
||||||
|
{
|
||||||
|
Transform oldModel = prefab.transform.Find("Model");
|
||||||
|
if (oldModel != null)
|
||||||
|
{
|
||||||
|
GameObject.DestroyImmediate(oldModel.gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/Editor/CreepPrefabSetup.cs.meta
Normal file
2
Assets/Scripts/Editor/CreepPrefabSetup.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 74efb75ea8ccbe54a9c86d0fd503f85f
|
||||||
@@ -86,6 +86,27 @@ namespace Northbound
|
|||||||
[Tooltip("배치 시도 최대 횟수")]
|
[Tooltip("배치 시도 최대 횟수")]
|
||||||
[SerializeField] private int maxObstacleSpawnAttempts = 50;
|
[SerializeField] private int maxObstacleSpawnAttempts = 50;
|
||||||
|
|
||||||
|
[Header("Creep Camp Settings")]
|
||||||
|
[Tooltip("크립 캠프 프리팹")]
|
||||||
|
public GameObject creepCampPrefab;
|
||||||
|
[Tooltip("크립 캠프 간 최소 거리")]
|
||||||
|
[SerializeField] private float minDistanceBetweenCamps = 30f;
|
||||||
|
[Tooltip("코어와의 최소 거리")]
|
||||||
|
[SerializeField] private float minDistanceFromCoreCamps = 30f;
|
||||||
|
[Tooltip("막사와의 최소 거리")]
|
||||||
|
[SerializeField] private float minDistanceFromBarracksCamps = 30f;
|
||||||
|
[Tooltip("초기 자원과의 최소 거리")]
|
||||||
|
[SerializeField] private float minDistanceFromInitialResource = 30f;
|
||||||
|
[Tooltip("추가 크립 캠프 개수")]
|
||||||
|
[Range(0, 10)]
|
||||||
|
[SerializeField] private int additionalCreepCampCount = 5;
|
||||||
|
[Tooltip("크립 캠프 강도 기본값")]
|
||||||
|
[SerializeField] private float baseCampStrength = 1f;
|
||||||
|
[Tooltip("Z 위치에 따른 강도 증가율 (Z 100당)")]
|
||||||
|
[SerializeField] private float strengthIncreasePerZ100 = 0.2f;
|
||||||
|
[Tooltip("자원 보호 캠프 강도 보너스 (far camp보다 얼마나 강할지)")]
|
||||||
|
[SerializeField] private float resourceCampStrengthBonus = 0.5f;
|
||||||
|
|
||||||
[Header("Generation Order")]
|
[Header("Generation Order")]
|
||||||
[Tooltip("자원 먼저 생성 후 장애물 생성 (true) 또는 그 반대 (false)")]
|
[Tooltip("자원 먼저 생성 후 장애물 생성 (true) 또는 그 반대 (false)")]
|
||||||
[SerializeField] private bool generateResourcesFirst = true;
|
[SerializeField] private bool generateResourcesFirst = true;
|
||||||
@@ -93,6 +114,8 @@ namespace Northbound
|
|||||||
private ResourceData[] _generatedResources;
|
private ResourceData[] _generatedResources;
|
||||||
private float _globalProductionMultiplier = 1f;
|
private float _globalProductionMultiplier = 1f;
|
||||||
private List<Vector3> _spawnedPositions = new List<Vector3>();
|
private List<Vector3> _spawnedPositions = new List<Vector3>();
|
||||||
|
private List<Vector3> _creepCampPositions = new List<Vector3>();
|
||||||
|
private List<GameObject> _creepPrefabs = new List<GameObject>();
|
||||||
private Transform _objectsParent;
|
private Transform _objectsParent;
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
@@ -177,6 +200,7 @@ namespace Northbound
|
|||||||
}
|
}
|
||||||
|
|
||||||
_spawnedPositions.Clear();
|
_spawnedPositions.Clear();
|
||||||
|
_creepCampPositions.Clear();
|
||||||
|
|
||||||
if (generateResourcesFirst)
|
if (generateResourcesFirst)
|
||||||
{
|
{
|
||||||
@@ -189,6 +213,8 @@ namespace Northbound
|
|||||||
GenerateResources();
|
GenerateResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GenerateCreepCamps();
|
||||||
|
|
||||||
Debug.Log($"[MapGenerator] Map generation complete!");
|
Debug.Log($"[MapGenerator] Map generation complete!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -658,6 +684,241 @@ namespace Northbound
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Creep Camp Generation
|
||||||
|
|
||||||
|
private void GenerateCreepCamps()
|
||||||
|
{
|
||||||
|
if (creepCampPrefab == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[MapGenerator] Creep camp prefab not assigned, skipping creep camp generation.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadCreepPrefabs();
|
||||||
|
|
||||||
|
if (_creepPrefabs.Count == 0)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[MapGenerator] No creep prefabs found in Assets/Prefabs/Creep/, skipping creep camp generation.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[MapGenerator] Starting creep camp generation. Resources: {_generatedResources.Length}, Additional camps: {additionalCreepCampCount}");
|
||||||
|
|
||||||
|
int totalCampsSpawned = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < _generatedResources.Length; i++)
|
||||||
|
{
|
||||||
|
Vector3 campPosition = FindValidCampPositionForResource(_generatedResources[i].position);
|
||||||
|
if (campPosition != Vector3.zero)
|
||||||
|
{
|
||||||
|
float strength = CalculateCampStrength(_generatedResources[i].position.y, isResourceCamp: true);
|
||||||
|
Debug.Log($"[MapGenerator] Spawning resource camp {i + 1} for resource at {_generatedResources[i].position}, position: {campPosition}, strength: {strength:F2} (with bonus)");
|
||||||
|
SpawnCreepCamp(campPosition, strength);
|
||||||
|
_creepCampPositions.Add(campPosition);
|
||||||
|
totalCampsSpawned++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int additionalSpawned = 0;
|
||||||
|
for (int i = 0; i < additionalCreepCampCount; i++)
|
||||||
|
{
|
||||||
|
Vector3 campPosition = FindValidCampPosition();
|
||||||
|
if (campPosition != Vector3.zero)
|
||||||
|
{
|
||||||
|
float strength = CalculateCampStrength(campPosition.z, isResourceCamp: false);
|
||||||
|
Debug.Log($"[MapGenerator] Spawning additional camp {i + 1}, position: {campPosition}, strength: {strength:F2}");
|
||||||
|
SpawnCreepCamp(campPosition, strength);
|
||||||
|
_creepCampPositions.Add(campPosition);
|
||||||
|
additionalSpawned++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log($"[MapGenerator] Spawned {totalCampsSpawned} resource-based camps and {additionalSpawned} additional camps. Total: {totalCampsSpawned + additionalSpawned}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadCreepPrefabs()
|
||||||
|
{
|
||||||
|
Debug.Log($"[MapGenerator] LoadCreepPrefabs called, current count: {_creepPrefabs.Count}");
|
||||||
|
|
||||||
|
if (_creepPrefabs.Count > 0)
|
||||||
|
{
|
||||||
|
Debug.Log($"[MapGenerator] Skipping load, already have {_creepPrefabs.Count} prefabs");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
string[] prefabGuids = UnityEditor.AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/Prefabs/Creep" });
|
||||||
|
Debug.Log($"[MapGenerator] Found {prefabGuids.Length} prefabs in Assets/Prefabs/Creep/");
|
||||||
|
_creepPrefabs.Clear();
|
||||||
|
|
||||||
|
foreach (string guid in prefabGuids)
|
||||||
|
{
|
||||||
|
string assetPath = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
|
||||||
|
GameObject prefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
|
||||||
|
|
||||||
|
if (prefab != null && prefab.GetComponent<CreepDataComponent>() != null)
|
||||||
|
{
|
||||||
|
_creepPrefabs.Add(prefab);
|
||||||
|
Debug.Log($"[MapGenerator] Added creep prefab: {prefab.name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Debug.LogWarning("[MapGenerator] Creep prefabs not loaded in build. Please assign creep prefabs manually in Inspector.");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (_creepPrefabs.Count > 0)
|
||||||
|
{
|
||||||
|
Debug.Log($"[MapGenerator] Loaded {_creepPrefabs.Count} creep prefabs from Assets/Prefabs/Creep/");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[MapGenerator] No creep prefabs loaded!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Vector3 FindValidCampPosition()
|
||||||
|
{
|
||||||
|
int maxAttempts = 200;
|
||||||
|
|
||||||
|
for (int attempt = 0; attempt < maxAttempts; attempt++)
|
||||||
|
{
|
||||||
|
Vector3 candidatePosition = GetRandomPositionInPlayableArea();
|
||||||
|
|
||||||
|
if (IsValidCreepCampPosition(candidatePosition))
|
||||||
|
{
|
||||||
|
return candidatePosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Vector3.zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsValidCreepCampPosition(Vector3 position)
|
||||||
|
{
|
||||||
|
if (Vector2.Distance(new Vector2(position.x, position.z), _corePosition) < minDistanceFromCoreCamps)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Vector2.Distance(new Vector2(position.x, position.z), _barracksPosition) < minDistanceFromBarracksCamps)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Vector2.Distance(new Vector2(position.x, position.z), _initialResourcePosition) < minDistanceFromInitialResource)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var campPos in _creepCampPositions)
|
||||||
|
{
|
||||||
|
if (Vector3.Distance(position, campPos) < minDistanceBetweenCamps)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (position.x < -playableAreaWidth / 2f || position.x > playableAreaWidth / 2f)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (position.z < startZ || position.z > endZ)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Vector3 FindValidCampPositionForResource(Vector2 resourcePosition)
|
||||||
|
{
|
||||||
|
Vector3 bestPosition = Vector3.zero;
|
||||||
|
float bestDistance = float.MaxValue;
|
||||||
|
int maxAttempts = 50;
|
||||||
|
|
||||||
|
Debug.Log($"[MapGenerator] FindValidCampPositionForResource: Resource at {resourcePosition}, bounds: X:[{-playableAreaWidth/2f}, {playableAreaWidth/2f}], Z:[{startZ}, {endZ}]");
|
||||||
|
|
||||||
|
for (int attempt = 0; attempt < maxAttempts; attempt++)
|
||||||
|
{
|
||||||
|
float angle = Random.Range(0f, 360f);
|
||||||
|
float distance = Random.Range(8f, 20f);
|
||||||
|
Vector3 candidatePosition = new Vector3(
|
||||||
|
resourcePosition.x + Mathf.Cos(angle * Mathf.Deg2Rad) * distance,
|
||||||
|
1f,
|
||||||
|
resourcePosition.y + Mathf.Sin(angle * Mathf.Deg2Rad) * distance
|
||||||
|
);
|
||||||
|
|
||||||
|
if (IsValidCreepCampPosition(candidatePosition))
|
||||||
|
{
|
||||||
|
if (Vector3.Distance(candidatePosition, new Vector3(resourcePosition.x, 0, resourcePosition.y)) < bestDistance)
|
||||||
|
{
|
||||||
|
bestDistance = Vector3.Distance(candidatePosition, new Vector3(resourcePosition.x, 0, resourcePosition.y));
|
||||||
|
bestPosition = candidatePosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bestPosition == Vector3.zero)
|
||||||
|
{
|
||||||
|
Debug.LogWarning($"[MapGenerator] Failed to find camp position for resource at {resourcePosition} after {maxAttempts} attempts");
|
||||||
|
}
|
||||||
|
|
||||||
|
return bestPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
private float CalculateCampStrength(float zPosition, bool isResourceCamp = false)
|
||||||
|
{
|
||||||
|
float normalizedZ = (zPosition - startZ) / (endZ - startZ);
|
||||||
|
float strengthMultiplier = baseCampStrength + (normalizedZ * (strengthIncreasePerZ100 * (endZ - startZ) / 100f));
|
||||||
|
|
||||||
|
if (isResourceCamp)
|
||||||
|
{
|
||||||
|
strengthMultiplier *= resourceCampStrengthBonus;
|
||||||
|
}
|
||||||
|
|
||||||
|
return strengthMultiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SpawnCreepCamp(Vector3 position, float strength)
|
||||||
|
{
|
||||||
|
GameObject campObj = Instantiate(creepCampPrefab, position, Quaternion.identity);
|
||||||
|
|
||||||
|
CreepCamp creepCamp = campObj.GetComponent<CreepCamp>();
|
||||||
|
if (creepCamp == null)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[MapGenerator] Creep camp prefab doesn't have CreepCamp component!");
|
||||||
|
Destroy(campObj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
creepCamp.InitializeCamp(position.z, strength);
|
||||||
|
creepCamp.SetCreepPrefabs(_creepPrefabs);
|
||||||
|
Debug.Log($"[MapGenerator] Camp initialized with {_creepPrefabs.Count} creep prefabs");
|
||||||
|
|
||||||
|
NetworkObject networkObj = campObj.GetComponent<NetworkObject>();
|
||||||
|
if (networkObj == null)
|
||||||
|
{
|
||||||
|
networkObj = campObj.AddComponent<NetworkObject>();
|
||||||
|
}
|
||||||
|
|
||||||
|
networkObj.Spawn();
|
||||||
|
|
||||||
|
if (groupUnderParent && _objectsParent != null)
|
||||||
|
{
|
||||||
|
campObj.transform.SetParent(_objectsParent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (campObj.GetComponent<FogOfWarVisibility>() == null)
|
||||||
|
{
|
||||||
|
var visibility = campObj.AddComponent<FogOfWarVisibility>();
|
||||||
|
visibility.showInExploredAreas = false;
|
||||||
|
visibility.updateInterval = 0.2f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
public float GetTotalProduction()
|
public float GetTotalProduction()
|
||||||
@@ -758,6 +1019,15 @@ namespace Northbound
|
|||||||
Gizmos.color = Color.blue;
|
Gizmos.color = Color.blue;
|
||||||
Gizmos.DrawWireSphere(new Vector3(_initialResourcePosition.x, 0, _initialResourcePosition.y), 5f);
|
Gizmos.DrawWireSphere(new Vector3(_initialResourcePosition.x, 0, _initialResourcePosition.y), 5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (creepCampPrefab != null)
|
||||||
|
{
|
||||||
|
Gizmos.color = Color.red;
|
||||||
|
foreach (var campPos in _creepCampPositions)
|
||||||
|
{
|
||||||
|
Gizmos.DrawWireSphere(campPos, 8f);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ def generate_class(schema_name, schema):
|
|||||||
lines.append("namespace Northbound.Data")
|
lines.append("namespace Northbound.Data")
|
||||||
lines.append("{")
|
lines.append("{")
|
||||||
lines.append(f' [CreateAssetMenu(fileName = "{class_name}", menuName = "Northbound/{schema_name} Data")]')
|
lines.append(f' [CreateAssetMenu(fileName = "{class_name}", menuName = "Northbound/{schema_name} Data")]')
|
||||||
lines.append(f" public class {class_name} : ScriptableObject")
|
lines.append(f" public partial class {class_name} : ScriptableObject")
|
||||||
lines.append(" {")
|
lines.append(" {")
|
||||||
|
|
||||||
# 공통 필드
|
# 공통 필드
|
||||||
|
|||||||
68
GameData/.Creep_schema.json
Normal file
68
GameData/.Creep_schema.json
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "id",
|
||||||
|
"type": "int",
|
||||||
|
"condition": null,
|
||||||
|
"description": "고유 ID"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memo",
|
||||||
|
"type": "string",
|
||||||
|
"condition": null,
|
||||||
|
"description": "기획 메모"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "move_speed",
|
||||||
|
"type": "float",
|
||||||
|
"condition": null,
|
||||||
|
"description": "이동 속도"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "max_hp",
|
||||||
|
"type": "int",
|
||||||
|
"condition": null,
|
||||||
|
"description": "체력"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "atk_range",
|
||||||
|
"type": "int",
|
||||||
|
"condition": null,
|
||||||
|
"description": "사정 거리"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "atk_damage",
|
||||||
|
"type": "int",
|
||||||
|
"condition": null,
|
||||||
|
"description": "데미지"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "atk_interval_sec",
|
||||||
|
"type": "float",
|
||||||
|
"condition": null,
|
||||||
|
"description": "공격 주기"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cost",
|
||||||
|
"type": "int",
|
||||||
|
"condition": null,
|
||||||
|
"description": "몬스터 난이도 점수"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "weight",
|
||||||
|
"type": "float",
|
||||||
|
"condition": null,
|
||||||
|
"description": "등장 가중치"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "model_path",
|
||||||
|
"type": "string",
|
||||||
|
"condition": null,
|
||||||
|
"description": "사용할 모델의 경로"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "animation_controller_path",
|
||||||
|
"type": "string",
|
||||||
|
"condition": null,
|
||||||
|
"description": "사용할 애니메이션 컨트롤러의 경로"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -11,6 +11,12 @@
|
|||||||
"condition": null,
|
"condition": null,
|
||||||
"description": "기획 메모"
|
"description": "기획 메모"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "building_name",
|
||||||
|
"type": "string",
|
||||||
|
"condition": null,
|
||||||
|
"description": "건물 이름"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mana",
|
"name": "mana",
|
||||||
"type": "int",
|
"type": "int",
|
||||||
|
|||||||
2
GameData/Creep.csv
Normal file
2
GameData/Creep.csv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
id,memo,move_speed,max_hp,atk_range,atk_damage,atk_interval_sec,cost,weight,model_path,animation_controller_path
|
||||||
|
1,기본1,5.0,100,3,20,1.5,1,1.0,Assets/Models/PlantWarrior.fbx,Assets/Animations/MonsterAnimationController.controller
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
id,memo,move_speed,vision_radius,capacity,manpower,max_hp,atk_range,atk_damage,atk_interval_sec,prefab_path
|
id,memo,move_speed,vision_radius,capacity,manpower,max_hp,atk_range,atk_damage,atk_interval_sec,prefab_path
|
||||||
1,,5,10,50,10,100,3,100,1,Assets/Prefabs/Player/Player
|
1,,5,10,50,10,100,3,100,1,Assets/Prefabs/Player/Player
|
||||||
|
|||||||
|
@@ -1,3 +1,3 @@
|
|||||||
id,memo,mana,manpower,size_x,size_y,size_z,max_hp,atk_range,atk_damage,atk_interval_sec,model_path
|
id,memo,building_name,mana,manpower,size_x,size_y,size_z,max_hp,atk_range,atk_damage,atk_interval_sec,model_path
|
||||||
1,타워,25,10,4,10,4,50,10,5,2,Assets/Models/building_tower_B_blue.fbx
|
1,타워,,25,10,4,10,4,50,10,5,2,Assets/Models/building_tower_B_blue.fbx
|
||||||
2,벽,5,5,8,4,3,30,0,0,0,Assets/Models/wall_straight.fbx
|
2,벽,,5,5,8,4,3,30,0,0,0,Assets/Models/wall_straight.fbx
|
||||||
|
|||||||
|
Reference in New Issue
Block a user