일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Delegate
- Unreal Engine
- boss monster
- Security
- stride
- 운영체제
- DSP
- dirty cow
- 유니티
- DP
- 메카님
- animation
- 게임 개발
- photon fusion2
- gas
- ret2libc
- Race condition
- Replication
- 유스케이스
- Multiplay
- 언리얼엔진
- gameplay ability system
- MLFQ
- 언리얼 엔진
- 게임개발
- CTF
- Rr
- MAC
- unity
- ability task
Archives
- Today
- Total
다양한 기록
[Fortress Craft] Unit Upgrade (공격) 본문
using Fusion;
using UnityEngine;
using UnityEngine.UI;
using FusionHelpers;
namespace Agit.FortressCraft
{
public class UpgradeUnit : NetworkBehaviour
{
public string OwnType { get; set; }
private NormalUnitSpawner[] spawners;
private NormalUnitSpawner targetSpawner;
private Button btnAttackUpgrade;
private Button btnDefenseUpgrade;
private Button btnTimeUpgrade;
private Image[] btnAttackUpgradeImages;
private Image[] btnDefenseUpgradeImages;
private Image[] btnTimeUpgradeImages;
private int attackLevel = 1;
private int defenseLevel = 1;
private int timeLevel = 1;
private int attackLevelLimit = 11;
private int defenseLevelLimit = 11;
private int timeLevelLimit = 11;
private UpgradeUI upgradeUI;
private void Awake()
{
Player player = GameObject.FindObjectOfType<Player>();
if (player.Runner.TryGetSingleton<GameManager>(out GameManager gameManager))
{
int idx = gameManager.TryGetPlayerId(player.Runner.LocalPlayer);
Debug.Log("idx: " + idx);
switch (idx)
{
case 0:
OwnType = "A";
break;
case 1:
OwnType = "B";
break;
case 2:
OwnType = "C";
break;
case 3:
OwnType = "D";
break;
}
}
btnAttackUpgrade = transform.Find("AttackGroup").GetComponentInChildren<Button>();
btnAttackUpgrade.onClick.AddListener(UpgradeDamage);
btnAttackUpgradeImages = transform.Find("AttackGroup").GetComponentsInChildren<Image>();
btnDefenseUpgrade = transform.Find("DefensiveGroup").GetComponentInChildren<Button>();
btnDefenseUpgrade.onClick.AddListener(UpgradeDefense);
btnDefenseUpgradeImages = transform.Find("DefensiveGroup").GetComponentsInChildren<Image>();
btnTimeUpgrade = transform.Find("SummoningTimeGroup").GetComponentInChildren<Button>();
btnTimeUpgrade.onClick.AddListener(UpgradeSpawnTime);
btnTimeUpgradeImages = transform.Find("SummoningTimeGroup").GetComponentsInChildren<Image>();
upgradeUI = GetComponent<UpgradeUI>();
upgradeUI.SetUpgradeUIText(0, 1);
upgradeUI.SetUpgradeUIText(1, 1);
upgradeUI.SetUpgradeUIText(2, 1);
}
public void UpgradeDamage()
{
if (attackLevel >= attackLevelLimit) return;
UnitData unitData = GoogleSheetManager.GetUnitData(attackLevel);
if (RewardManager.Instance.Gold < unitData.UpgradeCost ) return;
RewardManager.Instance.Gold -= unitData.UpgradeCost;
++attackLevel;
unitData = GoogleSheetManager.GetUnitData(attackLevel);
NormalUnitDataManager.Instance.Attack = unitData.Attack;
upgradeUI.SetUpgradeUIText(0, attackLevel);
spawners = GameObject.FindObjectsOfType<NormalUnitSpawner>();
foreach (NormalUnitSpawner spawner in spawners)
{
if (spawner.SpawnerType.CompareTo(OwnType) != 0) continue;
Debug.Log("Upgrade Damage : " + unitData.Attack);
spawner.RPCSettingDamage( unitData.Attack );
}
if( attackLevel == attackLevelLimit )
{
foreach (Image image in btnAttackUpgradeImages)
{
image.color = new Color(image.color.r, image.color.g, image.color.b, 0.5f);
}
}
}
public void UpgradeDefense()
{
if (defenseLevel >= defenseLevelLimit) return;
UnitData unitData = GoogleSheetManager.GetUnitData(defenseLevel);
if (RewardManager.Instance.Gold < unitData.Defense ) return;
RewardManager.Instance.Gold -= unitData.UpgradeCost;
++defenseLevel;
upgradeUI.SetUpgradeUIText(1, defenseLevel);
unitData = GoogleSheetManager.GetUnitData(defenseLevel);
NormalUnitDataManager.Instance.Defense = unitData.Defense;
spawners = GameObject.FindObjectsOfType<NormalUnitSpawner>();
foreach (NormalUnitSpawner spawner in spawners)
{
if (spawner.SpawnerType.CompareTo(OwnType) != 0) continue;
Debug.Log("Upgrade Defense - " + unitData.Defense);
spawner.RPCSettingDefense(unitData.Defense);
}
if( defenseLevel == defenseLevelLimit )
{
foreach (Image image in btnDefenseUpgradeImages)
{
image.color = new Color(image.color.r, image.color.g, image.color.b, 0.5f);
}
}
}
public void UpgradeSpawnTime()
{
if (timeLevel >= timeLevelLimit) return;
UnitData unitData = GoogleSheetManager.GetUnitData(timeLevel);
if (RewardManager.Instance.Gold < unitData.UpgradeCost) return;
RewardManager.Instance.Gold -= unitData.UpgradeCost;
++timeLevel;
upgradeUI.SetUpgradeUIText(2, timeLevel);
unitData = GoogleSheetManager.GetUnitData(timeLevel);
NormalUnitDataManager.Instance.SpawnTime = unitData.SpawnDelay;
spawners = GameObject.FindObjectsOfType<NormalUnitSpawner>();
foreach (NormalUnitSpawner spawner in spawners)
{
if (spawner.SpawnerType.CompareTo(OwnType) != 0) continue;
NormalUnitGenerator generator = spawner.GetComponent<NormalUnitGenerator>();
generator.SpawnTime = unitData.SpawnDelay;
}
if (timeLevel == timeLevelLimit)
{
foreach (Image image in btnTimeUpgradeImages)
{
image.color = new Color(image.color.r, image.color.g, image.color.b, 0.5f);
}
}
}
}
}
UpgradeUnit 클래스에서 유닛 업그레이드를 시킨다
스프레드 시트에서 읽어온 값을 기반으로 공격력, 방어력, 스폰 딜레이를 설정한다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Agit.FortressCraft
{
public class NormalUnitDataManager : MonoBehaviour
{
public static NormalUnitDataManager Instance;
public float Attack { get; set; }
public float Defense { get; set; }
public float SpawnTime { get; set; }
public float Speed { get; set; }
public float AttackDelay { get; set; }
public float Scale { get; set; }
private void Awake()
{
Instance = this;
Attack = 20.0f;
Defense = 1.0f;
SpawnTime = 5.0f;
Speed = 1.5f;
AttackDelay = 2.0f;
Scale = 0.35f;
}
}
}
사용 영상은 Forst Lizard AI 게시글에 있다
'유니티 엔진 > Fortress Craft' 카테고리의 다른 글
[Fortress Craft] ** Request Authority When Master Client Connection Exit ** / Monster Spawner (0) | 2025.02.06 |
---|---|
[Fortress Craft] Sound, FxSound (0) | 2025.02.06 |
[Fortress Craft] 맵 확장 (0) | 2025.02.06 |
[Fortress Craft] Normal Monster With Scriptable Object (0) | 2025.02.06 |
[Fortress Craft] Boss Monster - Frost Lizard AI (0) | 2025.02.06 |