#29 유닛 이동 방식 수정 중

1. IDamageable 인터페이스 수정
2. Ai 프리팹 크기 변경, 깃발 LookAt 추가
3. Boat 공격 선택 매개변수 제거
This commit is contained in:
NTG_Lenovo 2023-08-31 16:38:08 +09:00
parent 09c56b52f9
commit dc00036723
36 changed files with 324 additions and 244 deletions

View File

@ -6,6 +6,7 @@ using Sirenix.OdinInspector;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Animations;
using Random = UnityEngine.Random;
// ReSharper disable once CheckNamespace
@ -69,13 +70,12 @@ namespace BlueWaterProject
[SerializeField] protected Color mouseEnterHighlightSkinColor = Color.white;
[Tooltip("캐릭터가 선택되었을 때 색상")]
[SerializeField] protected Color selectedSkinColor = Color.blue;
[SerializeField] protected Color selectedSkinColor = Color.red;
[DisableIf("@true")]
[SerializeField] private IslandInfo islandInfo;
protected bool isAttacking;
private Vector3 commandedPos;
protected Transform backpackContainer;
protected Transform leftWeaponContainer;
@ -91,7 +91,8 @@ namespace BlueWaterProject
private UnitController mouseEnterUnitController;
private UnitSelection unitSelection;
private CapsuleCollider myCollider;
private CapsuleCollider hitBoxCollider;
private LookAtConstraint lookAtConstraint;
protected CapsuleCollider hitBoxCollider;
protected CloseWeapon closeWeapon;
private static readonly int SpeedHash = Animator.StringToHash("Speed");
@ -103,6 +104,7 @@ namespace BlueWaterProject
private static readonly int OutlineColorHash = Shader.PropertyToID("_OutlineColor");
protected static readonly WaitForSeconds FindTargetWaitTime = new(0.5f);
private static readonly WaitForSeconds CheckAgentArriveTime = new(0.1f);
#endregion
@ -117,7 +119,6 @@ namespace BlueWaterProject
protected virtual void Awake()
{
FindMaterial();
InitComponent();
}
@ -142,28 +143,30 @@ namespace BlueWaterProject
private void FixedUpdate()
{
UpdateLookAtTarget();
UpdateMovement();
}
private void OnMouseEnter()
{
if (AiStat.AiType == AiType.ENEMY) return;
mouseEnterUnitController = gameObject.GetComponentInParent<UnitController>();
if (mouseEnterUnitController == unitSelection.SelectedUnitController) return;
foreach (var soldier in mouseEnterUnitController.unit.UnitList)
foreach (var unit in mouseEnterUnitController.unit.UnitList)
{
soldier.MouseEnterHighlight();
unit.MouseEnterHighlight();
}
}
private void OnMouseExit()
{
if (!mouseEnterUnitController || mouseEnterUnitController == unitSelection.SelectedUnitController) return;
if (AiStat.AiType == AiType.ENEMY ||
!mouseEnterUnitController || mouseEnterUnitController == unitSelection.SelectedUnitController) return;
foreach (var soldier in mouseEnterUnitController.unit.UnitList)
foreach (var unit in mouseEnterUnitController.unit.UnitList)
{
soldier.ResetHighlight();
unit.ResetHighlight();
}
mouseEnterUnitController = null;
@ -182,7 +185,7 @@ namespace BlueWaterProject
public float GetCurrentHp() => AiStat.CurrentHp;
public void SetCurrentHp(float value) => AiStat.CurrentHp = value;
public void TakeDamage(AiStat attacker, AiStat defender, Vector3? attackPos = null)
public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate, Vector3? attackPos = null)
{
if (!TargetTransform && attackPos != null)
{
@ -190,13 +193,13 @@ namespace BlueWaterProject
}
// 회피 성공 체크
if (Random.Range(0, 100) < defender.AvoidanceRate)
if (Random.Range(0, 100) < AiStat.AvoidanceRate)
{
// TODO : 회피 처리
return;
}
var finalDamage = Utils.CalcDamage(attacker, defender);
var finalDamage = Utils.CalcDamage(attackerPower, attackerShieldPenetrationRate, AiStat);
// 방패 막기 체크
if (finalDamage == 0f)
@ -204,7 +207,7 @@ namespace BlueWaterProject
aiAnimator.SetTrigger(ShieldHash);
return;
}
var changeHp = Mathf.Max(defender.CurrentHp - finalDamage, 0);
var changeHp = Mathf.Max(AiStat.CurrentHp - finalDamage, 0);
SetCurrentHp(changeHp);
// 죽었는지 체크
@ -403,26 +406,6 @@ namespace BlueWaterProject
[field: SerializeField] public bool IsCommanded { get; set; }
public void UpdateMovement()
{
// if (IsCommanded)
// {
// if (navMeshAgent.destination == commandedPos)
// {
// if (navMeshAgent.remainingDistance <= navMeshAgent.stoppingDistance)
// {
// IsCommanded = false;
// }
// }
// else
// {
// if (isAttacking) return;
//
// navMeshAgent.SetDestination(commandedPos);
// }
// }
}
public void BeAttackedMovement(Vector3 attackPos)
{
if (TargetTransform) return;
@ -444,10 +427,29 @@ namespace BlueWaterProject
}
}
public void MoveTarget(Vector3 targetPos)
public void CommandMove(Vector3 targetPos)
{
IsCommanded = true;
commandedPos = targetPos;
StartCoroutine(CommandMoveCoroutine(targetPos));
}
public IEnumerator CommandMoveCoroutine(Vector3 targetPos)
{
while (isAttacking)
{
yield return null;
}
if (Utils.SetCloseDestination(navMeshAgent, targetPos, 0.5f, 1f))
{
IsCommanded = true;
}
while (navMeshAgent.pathPending || navMeshAgent.remainingDistance > navMeshAgent.stoppingDistance)
{
yield return CheckAgentArriveTime;
}
IsCommanded = false;
}
#endregion
@ -477,13 +479,21 @@ namespace BlueWaterProject
navMeshAgent = Utils.GetComponentAndAssert<NavMeshAgent>(transform);
myUnitController = Utils.GetComponentAndAssert<UnitController>(transform.parent);
myCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform);
lookAtConstraint = Utils.GetComponentAndAssert<LookAtConstraint>(flagContainer);
hitBoxCollider = Utils.GetComponentAndAssert<CapsuleCollider>(transform.Find("HitBox"));
unitSelection = FindObjectOfType<UnitSelection>();
var source = new ConstraintSource();
source.sourceTransform = Camera.main.transform;
source.weight = 1f;
lookAtConstraint.AddSource(source);
lookAtConstraint.constraintActive = true;
}
private void InitStart()
{
InitViewModel();
FindMaterial();
SetLayer();
SetCurrentHp(AiStat.MaxHp);
SetMoveSpeed(AiStat.MoveSpd);

View File

@ -73,6 +73,38 @@ namespace BlueWaterProject
#region Custom function
protected override void SetLayer()
{
switch (AiStat.AiType)
{
case AiType.NONE:
break;
case AiType.PLAYER:
gameObject.layer = LayerMask.NameToLayer("Player");
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Player");
TargetLayer = LayerMask.GetMask("Enemy");
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
LayerMask.GetMask("Enemy") | LayerMask.GetMask("Props");
break;
case AiType.PIRATE:
gameObject.layer = LayerMask.NameToLayer("Pirate");
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Pirate");
TargetLayer = LayerMask.GetMask("Enemy");
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
LayerMask.GetMask("Enemy") | LayerMask.GetMask("Props");
break;
case AiType.ENEMY:
gameObject.layer = LayerMask.NameToLayer("Enemy");
hitBoxCollider.gameObject.layer = LayerMask.NameToLayer("Enemy");
TargetLayer = LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate") | LayerMask.GetMask("Props");
archerLayer = LayerMask.GetMask("Ground") | LayerMask.GetMask("Water") |
LayerMask.GetMask("Player") | LayerMask.GetMask("Pirate") | LayerMask.GetMask("Props");
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public override void UpdateLookAtTarget()
{
if (TargetTransform)

View File

@ -129,9 +129,41 @@ namespace BlueWaterProject
public void MoveCommand(Vector3 targetPos)
{
foreach (var soldier in unit.UnitList)
var gridSize = 0;
switch (unit.SailorCount)
{
soldier.MoveTarget(targetPos);
case 0:
gridSize = 1;
break;
case <= 3:
gridSize = 2;
break;
case <= 8:
gridSize = 3;
break;
case <= 15:
gridSize = 4;
break;
default:
print("유닛의 병사 숫자 설정 에러");
break;
}
for (var i = 0; i < gridSize; i++)
{
for (var j = 0; j < gridSize; j++)
{
var currentPos = i * gridSize + j;
if (currentPos > unit.SailorCount) break;
var zOffset = (i - (gridSize - 1) / 2.0f) * UnitManager.Inst.UnitSpacing;
var xOffset = (j - (gridSize - 1) / 2.0f) * UnitManager.Inst.UnitSpacing;
var movePos = targetPos + new Vector3(xOffset, 0, zOffset);
unit.UnitList[currentPos].CommandMove(movePos);
}
}
}

View File

@ -44,7 +44,7 @@ namespace BlueWaterProject
[field: SerializeField] public float MaxGroundDistance { get; private set; } = 2.5f;
[Tooltip("병력 간의 간격")]
[field: SerializeField] public float UnitSpacing { get; private set; } = 0.8f;
[field: SerializeField] public float UnitSpacing { get; private set; } = 2.5f;
[Tooltip("부대 배치 행렬")]
[field: SerializeField] public List<UnitMatrix> UnitMatrices { get; private set; } = new(MATRICES_CAPACITY);
@ -83,7 +83,7 @@ namespace BlueWaterProject
{
GroundLayer = LayerMask.GetMask("Ground");
MaxGroundDistance = 2.5f;
UnitSpacing = 0.8f;
UnitSpacing = 2.5f;
characterPrefabList = new List<GameObject>(CHARACTER_PREFAB_CAPACITY);
InitUnitMatrices();
InitCharacterPrefabList();
@ -216,9 +216,9 @@ namespace BlueWaterProject
}
}
public void CreateAndAssign(string cardIdx, AttackerType attackerType, Vector3 assignPos)
public void CreateAndAssign(string cardIdx, Vector3 assignPos)
{
var newUnitController = CreateUnit(cardIdx, attackerType);
var newUnitController = CreateUnit(cardIdx, AttackerType.OFFENSE);
AssignUnit(newUnitController, assignPos);
}

View File

@ -1,7 +1,5 @@
using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
@ -25,7 +23,7 @@ namespace BlueWaterProject
private void Reset()
{
unitLayer = LayerMask.GetMask("Pirate") | LayerMask.GetMask("Enemy");
unitLayer = LayerMask.GetMask("Pirate");
groundLayer = LayerMask.GetMask("Ground");
}
@ -37,7 +35,7 @@ namespace BlueWaterProject
controls.Unit.RightClick.performed += OnRightClick;
controls.Enable();
unitLayer = LayerMask.GetMask("Pirate") | LayerMask.GetMask("Enemy");
unitLayer = LayerMask.GetMask("Pirate");
groundLayer = LayerMask.GetMask("Ground");
mainCamera = Camera.main;

View File

@ -21,7 +21,7 @@ public class Boat : MonoBehaviour
public Vector3 Target { get; set; }
public string CardIndex { get; set; }
public delegate void LandedEventHandler(string cardIndex, AttackerType attackerType, Vector3 assignPos);
public delegate void LandedEventHandler(string cardIndex, Vector3 assignPos);
public event LandedEventHandler OnLanded;
private void Awake()
@ -67,7 +67,7 @@ public class Boat : MonoBehaviour
lineRenderer.enabled = false;
if (draw != null) StopCoroutine(draw);
OnLanded?.Invoke(CardIndex, AttackerType.OFFENSE, Target);
OnLanded?.Invoke(CardIndex, Target);
Destroy(gameObject);
}

View File

@ -83,13 +83,3 @@ MonoBehaviour:
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
<UnitList>k__BackingField: []
- <Idx>k__BackingField: unit_archer_e_001
<CaptainStatIdx>k__BackingField: ai_stat_captain_e_001
<SailorStatIdx>k__BackingField: ai_stat_sailor_e_001
<UnitName>k__BackingField: Enemy001
<UnitType>k__BackingField: 5
<SailorCount>k__BackingField: 6
<AttackerType>k__BackingField: -1
<OffenseType>k__BackingField: 0
<DefenseType>k__BackingField: -1
<UnitList>k__BackingField: []

View File

@ -34,9 +34,9 @@ namespace BlueWaterProject
public void SetCurrentHp(float value) => AiStat.CurrentHp = value;
public void TakeDamage(AiStat attacker, AiStat defender, Vector3? attackPos = null)
public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate = default, Vector3? attackPos = null)
{
var changeHp = Mathf.Max(defender.CurrentHp - attacker.Atk, 0);
var changeHp = Mathf.Max(AiStat.CurrentHp - attackerPower, 0);
SetCurrentHp(changeHp);
// 건물 파괴

View File

@ -1,3 +1,4 @@
using System.Collections;
using UnityEngine;
// ReSharper disable once CheckNamespace
@ -20,8 +21,9 @@ namespace BlueWaterProject
bool IsCommanded { get; set; }
// Functions
void UpdateMovement();
void MoveTarget(Vector3 targetPos);
void CommandMove(Vector3 targetPos);
IEnumerator CommandMoveCoroutine(Vector3 targetPos);
}
}

View File

@ -3,8 +3,8 @@ using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public interface IDamageable : IAiStat
public interface IDamageable
{
public void TakeDamage(AiStat attacker, AiStat defender, Vector3? attackPos = null);
public void TakeDamage(float attackerPower, float attackerShieldPenetrationRate = default, Vector3? attackPos = null);
}
}

View File

@ -88,19 +88,19 @@ namespace BlueWaterProject
UnityEngine.Debug.Log($"Call {className}.{methodName}");
}
public static float CalcDamage(AiStat attacker, AiStat defender)
public static float CalcDamage(float attackerPower, float attackerShieldPenetrationRate, AiStat defender)
{
var finalDamage = 0f;
if (defender.UsingShield)
{
var penetrationChance = attacker.ShieldPenetrationRate -
(attacker.ShieldPenetrationRate * defender.PenetrationResistivity * 0.01f);
var penetrationChance = attackerShieldPenetrationRate -
(attackerShieldPenetrationRate * defender.PenetrationResistivity * 0.01f);
// 방패를 관통했다면,
if (Random.Range(0, 100) < penetrationChance)
{
finalDamage = attacker.Atk - defender.Def;
finalDamage = attackerPower - defender.Def;
finalDamage = Mathf.Max(finalDamage, 0);
return finalDamage;
}
@ -109,12 +109,36 @@ namespace BlueWaterProject
return 0;
}
finalDamage = attacker.Atk - defender.Def;
finalDamage = attackerPower - defender.Def;
finalDamage = Mathf.Max(finalDamage, 0);
return finalDamage;
}
public static bool SetCloseDestination(NavMeshAgent agent, Vector3 destination, float stopDistance, float maxDistance)
{
var walkableMask = 1 << NavMesh.GetAreaFromName("Walkable");
if (NavMesh.SamplePosition(destination, out var hit, maxDistance, walkableMask))
{
agent.stoppingDistance = stopDistance;
agent.SetDestination(hit.position);
return true;
// var path = new NavMeshPath();
// if (agent.CalculatePath(hit.position, path) && path.status == NavMeshPathStatus.PathComplete)
// {
// agent.stoppingDistance = stopDistance;
// agent.SetDestination(hit.position);
// return true;
// }
//
// Debug.Log("길이 연결되어 있지 않습니다.");
// return false;
}
Debug.Log("근처에 갈 수 있는 위치가 없습니다.");
return false;
}
#if UNITY_EDITOR
public static GameObject LoadPrefabFromFolder(string folderPath, string prefabName)
{

View File

@ -82,7 +82,7 @@ namespace BlueWaterProject
if (attackerPos != null)
{
iDamageable.TakeDamage(attackerStat, iDamageable.AiStat, (Vector3)attackerPos);
iDamageable.TakeDamage(attackerStat.Atk, attackerStat.ShieldPenetrationRate, (Vector3)attackerPos);
}
isAttacked = true;
DestroyObject();

View File

@ -45,7 +45,7 @@ namespace BlueWaterProject
var iDamageable = other.GetComponentInParent<IDamageable>();
iDamageable.TakeDamage(attackerStat, iDamageable.AiStat);
iDamageable.TakeDamage(attackerStat.Atk, attackerStat.ShieldPenetrationRate);
isAttacked = true;
}

View File

@ -8859,7 +8859,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_LocalScale: {x: 2.5, y: 2.5, z: 2.5}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 8216194093736172848}
@ -8901,17 +8901,17 @@ NavMeshAgent:
m_AgentTypeID: 0
m_Radius: 0.4
m_Speed: 3
m_Acceleration: 20
m_Acceleration: 40
avoidancePriority: 50
m_AngularSpeed: 180
m_StoppingDistance: 0
m_StoppingDistance: 3
m_AutoTraverseOffMeshLink: 1
m_AutoBraking: 0
m_AutoRepath: 1
m_Height: 1.6
m_BaseOffset: 0
m_WalkableMask: 1
m_ObstacleAvoidanceType: 4
m_ObstacleAvoidanceType: 1
--- !u!54 &8419222071034356516
Rigidbody:
m_ObjectHideFlags: 0
@ -18237,7 +18237,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 63358794340404201}
@ -19484,7 +19484,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 2465098882291399731}
@ -19878,6 +19878,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 3820477360039890828}
- component: {fileID: 9107736161700266012}
m_Layer: 0
m_Name: Flag_container
m_TagString: Untagged
@ -19912,6 +19913,24 @@ Transform:
- {fileID: 1547071791325143040}
m_Father: {fileID: 438990}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1183024399 &9107736161700266012
LookAtConstraint:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1666106266669059014}
m_Enabled: 1
serializedVersion: 2
m_Weight: 1
m_RotationAtRest: {x: 0, y: 0, z: 0}
m_RotationOffset: {x: 0, y: 0, z: 0}
m_Roll: 0
m_WorldUpObject: {fileID: 0}
m_UseUpObject: 0
m_Active: 1
m_IsLocked: 1
m_Sources: []
--- !u!1 &1697676565323874356
GameObject:
m_ObjectHideFlags: 0
@ -20338,7 +20357,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 5234011001907277804}
@ -20923,7 +20942,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!4 &3209293871077764151
Transform:
m_ObjectHideFlags: 0
@ -20934,7 +20953,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 2257428815309838277}
@ -21533,7 +21552,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 4132786258334076740}
@ -21784,6 +21803,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1453547390671515014}
- component: {fileID: 8589430503143481414}
m_Layer: 0
m_Name: Body_container
m_TagString: Untagged
@ -21799,7 +21819,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3528172999077177913}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 0
@ -21867,6 +21887,24 @@ Transform:
- {fileID: 6099091204058009794}
m_Father: {fileID: 438990}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1183024399 &8589430503143481414
LookAtConstraint:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3528172999077177913}
m_Enabled: 1
serializedVersion: 2
m_Weight: 1
m_RotationAtRest: {x: 0, y: 0, z: 0}
m_RotationOffset: {x: 0, y: 0, z: 0}
m_Roll: 0
m_WorldUpObject: {fileID: 0}
m_UseUpObject: 0
m_Active: 1
m_IsLocked: 1
m_Sources: []
--- !u!1 &3577565490594274997
GameObject:
m_ObjectHideFlags: 0
@ -22197,8 +22235,8 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 0
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 438990}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -23266,7 +23304,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 4474122488113416466}
@ -24499,7 +24537,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 5660875838862986692}
@ -25057,7 +25095,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 6989473619539101678}
@ -25533,7 +25571,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 3657631952372943943}
@ -27705,7 +27743,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 8778780943571046173}
@ -28782,7 +28820,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 851825707014898327}
@ -29193,7 +29231,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0.3, z: -0.295}
m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 1017353229399720737}

View File

@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 84c68c72d64fe49b4a85c32c0eaeab8b
m_currentHash:
serializedVersion: 2
Hash: 9a4a9c89ff154ecac1bb27339309598a
Hash: 0590df4bd029d1fa232f7e5fd489e2b1
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_BundleLocalCatalog: 0

View File

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

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 4ff1f29eab234cf4490d9bb383892c44
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 697b6e7dea1fde146b7e3e5cf3ed9e9f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 078b8f13a17171b49892ad10426d5af0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 9aacf6f3043624194bb6f6fe9a580786
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 41e59f562b69648719f2424c438758f3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 5f3f53ee059b45a4d9a5b9fc75e8aea9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 4368c9be31b3c174dbfd80f2caf98889
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: 617b3f1032a08c14ebfedfa340767cdf
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 106670
packageName: Rainbow Hierarchy 2
packageVersion: 2.6.1
assetPath: Assets/Plugins/Borodar/RainbowHierarchy/Source/RainbowHierarchy.src.unitypackage
uploadId: 605240

View File

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

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 48e08dc33330d11e9d4a1b246c52e4f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

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

View File

@ -8,17 +8,21 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: TT_Banner_black
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_Shader: {fileID: 4800000, guid: bee44b4a58655ee4cbff107302a3e131, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_ValidKeywords:
- DR_OUTLINE_ON
- _CELPRIMARYMODE_SINGLE
- _DETAILMAPBLENDINGMODE_MULTIPLY
- _TEXTUREBLENDINGMODE_MULTIPLY
m_InvalidKeywords:
- _UNITYSHADOWMODE_NONE
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap:
RenderType: Opaque
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
@ -32,10 +36,22 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CelCurveTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CelStepTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@ -84,40 +100,92 @@ Material:
m_Floats:
- _AlphaClip: 0
- _AlphaToMask: 0
- _BaseMapPremultiply: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _CameraDistanceImpact: 0
- _CelExtraEnabled: 0
- _CelNumSteps: 3
- _CelPrimaryMode: 1
- _Cull: 2
- _Cutoff: 0.5
- _DetailMapBlendingMode: 0
- _DetailMapImpact: 0
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _FlatRimEdgeSmoothness: 0.5
- _FlatRimLightAlign: 0
- _FlatRimSize: 0.5
- _FlatSpecularEdgeSmoothness: 0
- _FlatSpecularSize: 0.1
- _Flatness: 1
- _FlatnessExtra: 1
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossinessSource: 0
- _GlossyReflections: 1
- _GradientAngle: 0
- _GradientCenterX: 0
- _GradientCenterY: 0
- _GradientEnabled: 0
- _GradientSize: 10
- _LightContribution: 0
- _LightFalloffSize: 0
- _LightmapDirectionPitch: 0
- _LightmapDirectionYaw: 0
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _OutlineDepthOffset: 0
- _OutlineEnabled: 1
- _OutlineScale: 1
- _OutlineWidth: 1
- _OverrideLightmapDir: 0
- _Parallax: 0.02
- _QueueOffset: 0
- _ReceiveShadows: 1
- _RimEnabled: 0
- _SelfShadingSize: 0.5
- _SelfShadingSizeExtra: 0.6
- _ShadowEdgeSize: 0.05
- _ShadowEdgeSizeExtra: 0.05
- _Shininess: 0
- _Smoothness: 0.5
- _SmoothnessSource: 1
- _SmoothnessTextureChannel: 0
- _SpecSource: 0
- _SpecularEnabled: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _TextureBlendingMode: 0
- _TextureImpact: 1
- _UVSec: 0
- _UnityShadowMode: 0
- _UnityShadowOcclusion: 0
- _UnityShadowPower: 0.2
- _UnityShadowSharpness: 1
- _VertexColorsEnabled: 0
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorDim: {r: 1, g: 1, b: 1, a: 1}
- _ColorDimCurve: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorDimExtra: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorDimSteps: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorGradient: {r: 0.85023, g: 0.85034, b: 0.85045, a: 0.85056}
- _DetailMapColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _FlatRimColor: {r: 0.85023, g: 0.85034, b: 0.85045, a: 0.85056}
- _FlatSpecularColor: {r: 0.85023, g: 0.85034, b: 0.85045, a: 0.85056}
- _LightmapDirection: {r: 0, g: 1, b: 0, a: 0}
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
- _UnityShadowColor: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
m_BuildTextureStacks: []
--- !u!114 &3499469582880020717
MonoBehaviour:

View File

@ -8,22 +8,22 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: TT_RTS_Units
m_Shader: {fileID: 4800000, guid: 2a230514c860643f69b6a4d1871d3825, type: 3}
m_Shader: {fileID: 4800000, guid: bee44b4a58655ee4cbff107302a3e131, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- DR_OUTLINE_ON
- _CELPRIMARYMODE_SINGLE
- _DETAILMAPBLENDINGMODE_MULTIPLY
- _EMISSION
- _TEXTUREBLENDINGMODE_MULTIPLY
- _UNITYSHADOW_OCCLUSION
m_InvalidKeywords: []
m_InvalidKeywords:
- _UNITYSHADOWMODE_NONE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 2000
stringTagMap:
RenderType: Opaque
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
@ -41,6 +41,14 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CelCurveTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _CelStepTexture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@ -101,10 +109,14 @@ Material:
m_Floats:
- _AlphaClip: 0
- _AlphaToMask: 0
- _BaseMapPremultiply: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _CameraDistanceImpact: 0.5
- _CelExtraEnabled: 0
- _CelNumSteps: 3
- _CelPrimaryMode: 1
- _Cull: 2
- _Cutoff: 0.5
- _DetailMapBlendingMode: 0
@ -117,6 +129,8 @@ Material:
- _FlatRimSize: 0.5
- _FlatSpecularEdgeSmoothness: 0
- _FlatSpecularSize: 0.1
- _Flatness: 1
- _FlatnessExtra: 1
- _Glossiness: 0.5
- _GlossinessSource: 0
- _GradientAngle: 0
@ -125,6 +139,7 @@ Material:
- _GradientEnabled: 0
- _GradientSize: 10
- _LightContribution: 1
- _LightFalloffSize: 0
- _LightmapDirectionPitch: 0
- _LightmapDirectionYaw: 0
- _Metallic: 0
@ -142,6 +157,9 @@ Material:
- _ReceiveShadows: 1
- _RimEnabled: 0
- _SelfShadingSize: 0
- _SelfShadingSizeExtra: 0.6
- _ShadowEdgeSize: 0.05
- _ShadowEdgeSizeExtra: 0.05
- _Shininess: 0
- _Smoothness: 0.5
- _SmoothnessSource: 1
@ -154,12 +172,19 @@ Material:
- _TextureBlendingMode: 0
- _TextureImpact: 1
- _UVSec: 0
- _UnityShadowMode: 0
- _UnityShadowOcclusion: 1
- _UnityShadowPower: 0.2
- _UnityShadowSharpness: 1
- _VertexColorsEnabled: 0
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _ColorDim: {r: 1, g: 1, b: 1, a: 1}
- _ColorDimCurve: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorDimExtra: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorDimSteps: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _ColorGradient: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
- _DetailMapColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
@ -170,6 +195,7 @@ Material:
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
- _UnityShadowColor: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
m_BuildTextureStacks: []
--- !u!114 &8523542518157162783
MonoBehaviour: