341 lines
12 KiB
C#
341 lines
12 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.UI;
|
|||
|
|
using DG.Tweening;
|
|||
|
|
using TMPro;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine.SceneManagement;
|
|||
|
|
using DarkTonic.MasterAudio;
|
|||
|
|
using System.Collections;
|
|||
|
|
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
// PackageManager <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
public class BattleManager : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
public GameObject HeroUnit;
|
|||
|
|
public Transform[] MonsterPositions = new Transform[3];
|
|||
|
|
|
|||
|
|
public GameObject HitEffectPrefab;
|
|||
|
|
public GameObject MissPrefab;
|
|||
|
|
public GameObject NumberPrefab;
|
|||
|
|
public GameObject CriticalPrefab;
|
|||
|
|
public TextMeshProUGUI stageClearText;
|
|||
|
|
public Image darkPanel; // <20><>ũ Ŀư <20>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
public float CriticalRate; // ġ<><C4A1>Ÿ Ȯ<><C8AE>(10000<30><30><EFBFBD><EFBFBD>)
|
|||
|
|
public float CriticalDamage; // ġ<><C4A1>Ÿ <20><><EFBFBD><EFBFBD>(10000<30><30><EFBFBD><EFBFBD>)
|
|||
|
|
public int HeroDamag; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>
|
|||
|
|
|
|||
|
|
private List<Transform> aliveMonsters = new List<Transform>();
|
|||
|
|
private bool stageCleared = false;
|
|||
|
|
private bool isHeroAttacking = false;
|
|||
|
|
public string playlistName = "Bgm";
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭 <20>߰<EFBFBD>
|
|||
|
|
private SpriteRenderer[] spriteRenderers;
|
|||
|
|
|
|||
|
|
|
|||
|
|
private void Start()
|
|||
|
|
{
|
|||
|
|
// ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD>
|
|||
|
|
foreach (Transform monsterPos in MonsterPositions)
|
|||
|
|
{
|
|||
|
|
aliveMonsters.Add(monsterPos);
|
|||
|
|
}
|
|||
|
|
// NumberPrefab<61><62> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ɴϴ<C9B4>.
|
|||
|
|
int childCount = NumberPrefab.transform.childCount;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭 <20>ʱ<EFBFBD>ȭ
|
|||
|
|
spriteRenderers = new SpriteRenderer[childCount];
|
|||
|
|
|
|||
|
|
// <20><> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>迭<EFBFBD><E8BFAD> <20>Ҵ<EFBFBD>
|
|||
|
|
for (int i = 0; i < childCount; i++)
|
|||
|
|
{
|
|||
|
|
Transform child = NumberPrefab.transform.GetChild(i);
|
|||
|
|
SpriteRenderer spriteRenderer = child.GetComponent<SpriteRenderer>();
|
|||
|
|
|
|||
|
|
if (spriteRenderer != null)
|
|||
|
|
{
|
|||
|
|
spriteRenderers[i] = spriteRenderer;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.LogError("SpriteRenderer component not found on child " + i + " of NumberPrefab.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MasterAudio.PlaylistsMuted = true;
|
|||
|
|
MasterAudio.PlaySound("BGM_DAILYDUNGEON", 0.7f);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void HeroAttack()
|
|||
|
|
{
|
|||
|
|
if (aliveMonsters.Count > 0 && !isHeroAttacking)
|
|||
|
|
{
|
|||
|
|
isHeroAttacking = true;
|
|||
|
|
HeroUnit.SetActive(true);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
Sequence attackSequence = DOTween.Sequence();
|
|||
|
|
attackSequence.Append(HeroUnit.transform.DOLocalMoveY(-700, 0.25f).SetEase(Ease.OutCubic));
|
|||
|
|
attackSequence.AppendCallback(() =>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD><CCBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD>ظ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
|
DealDamageToMonster();
|
|||
|
|
});
|
|||
|
|
attackSequence.Append(HeroUnit.transform.DOLocalMoveY(-1500, 0.15f).SetEase(Ease.OutCubic));
|
|||
|
|
attackSequence.OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
// <20>ִϸ<D6B4><CFB8>̼<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
isHeroAttacking = false;
|
|||
|
|
HeroUnit.SetActive(false);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void DealDamageToMonster()
|
|||
|
|
{
|
|||
|
|
if (aliveMonsters.Count > 0)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
int randomMonsterIndex = Random.Range(0, aliveMonsters.Count);
|
|||
|
|
Transform targetMonster = aliveMonsters[randomMonsterIndex];
|
|||
|
|
|
|||
|
|
float randomNumber = Random.Range(0, HeroDamag); // 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ¸<DDB7>ŭ<EFBFBD><C5AD> <20><><EFBFBD>ظ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
float randomValue = Random.Range(0, 10000); // 0<><30><EFBFBD><EFBFBD> 9999<39><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
|||
|
|
bool isCritical = randomValue<= CriticalRate;
|
|||
|
|
int resultNumber = 0;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
int randomSoundIndex = Random.Range(1, 4); // 1<><31><EFBFBD><EFBFBD> 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
string soundName = "Hot_Type2_" + randomSoundIndex.ToString(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
MasterAudio.PlaySound(soundName, 0.7f, null);
|
|||
|
|
|
|||
|
|
int randomVoiceIndex = Random.Range(1, 13); // 1<><31><EFBFBD><EFBFBD> 12<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
string voiceName = "Voice_HERO_01_Combo_1_" + randomVoiceIndex.ToString(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
MasterAudio.PlaySound(voiceName, 0.7f, null);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (isCritical)
|
|||
|
|
{
|
|||
|
|
resultNumber = Mathf.RoundToInt((randomNumber * CriticalDamage) / 10000f);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
resultNumber = (int)randomNumber;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// HitEffectPrefab <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ǥ<><C7A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
GameObject hitEffectPosition = Instantiate(HitEffectPrefab, targetMonster.position, Quaternion.identity);
|
|||
|
|
hitEffectPosition.SetActive(true);
|
|||
|
|
Destroy(hitEffectPosition, 0.5f); // <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (resultNumber == 0)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20>̽<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><EFBFBD>
|
|||
|
|
ShowMissDamage(targetMonster.position + new Vector3(0, 1.4f, 0), targetMonster);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ShowNumberDamage(targetMonster.position + new Vector3(0, 1.4f, 0), targetMonster, resultNumber, isCritical);
|
|||
|
|
// HitEffectPrefab <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ǥ<><C7A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ShowMissDamage(Vector3 monsterPosition, Transform targetMonster)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20>̽<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
GameObject missObject = Instantiate(MissPrefab, monsterPosition, Quaternion.identity);
|
|||
|
|
missObject.SetActive(true);
|
|||
|
|
|
|||
|
|
// <20>̽<EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
missObject.transform.localScale = Vector3.one * 1.5f;
|
|||
|
|
missObject.transform.DOScale(Vector3.one * 0.3f, 0.4f).SetEase(Ease.OutCubic);
|
|||
|
|
missObject.transform.DOMoveY(missObject.transform.position.y + 1, 0.5f).SetEase(Ease.OutCubic).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
Destroy(missObject);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
private void ShowCriEffect(Vector3 monsterPosition, Transform targetMonster)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
GameObject CriObject = Instantiate(CriticalPrefab, monsterPosition, Quaternion.identity);
|
|||
|
|
CriObject.SetActive(true);
|
|||
|
|
|
|||
|
|
// ũ<><C5A9> <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
CriObject.transform.localScale = Vector3.one * 1.5f;
|
|||
|
|
CriObject.transform.DOScale(Vector3.one * 0.3f, 0.4f).SetEase(Ease.OutCubic);
|
|||
|
|
CriObject.transform.DOMoveY(CriObject.transform.position.y + 1, 0.5f).SetEase(Ease.OutCubic).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
Destroy(CriObject);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ShowNumberDamage(Vector3 monsterPosition, Transform targetMonster, int damage, bool isCritical)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> ȿ<><C8BF> <20>߰<EFBFBD>
|
|||
|
|
targetMonster.DOPunchPosition(new Vector3(10, 0, 0), 0.2f);
|
|||
|
|
|
|||
|
|
// damage<67><65> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><>ȯ
|
|||
|
|
string damageString = damage.ToString();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
float xOffset = 0;
|
|||
|
|
|
|||
|
|
if (isCritical)
|
|||
|
|
{
|
|||
|
|
xOffset+=2.3f;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
xOffset += 1.1f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
float totalWidth = ((damageString.Length-1) * xOffset); // <20><>ü <20>ʺ<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
GameObject digitObject = new GameObject("HitNumber");
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> monsterPosition<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
digitObject.transform.localPosition = new Vector3(monsterPosition.x, monsterPosition.y - 2f, monsterPosition.z);
|
|||
|
|
|
|||
|
|
// <20>ִϸ<D6B4><CFB8>̼<EFBFBD> <20><> <20><>ġ <20><><EFBFBD><EFBFBD>
|
|||
|
|
for (int i = 0; i < damageString.Length; i++)
|
|||
|
|
{
|
|||
|
|
int digit = int.Parse(damageString[i].ToString()); // <20>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if (digit >= 0 && digit < spriteRenderers.Length)
|
|||
|
|
{
|
|||
|
|
if (isCritical)
|
|||
|
|
{
|
|||
|
|
digit += 10;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
SpriteRenderer digitSpriteRenderer = spriteRenderers[digit];
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
GameObject digitImageObject = new GameObject("DigitImage"); // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
|
//digitImageObject.transform.position = digitObject.transform.position;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
|
SpriteRenderer newRenderer = digitImageObject.AddComponent<SpriteRenderer>();
|
|||
|
|
newRenderer.sprite = digitSpriteRenderer.sprite;
|
|||
|
|
|
|||
|
|
// Order <20><><EFBFBD><EFBFBD> 300<30><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
newRenderer.sortingOrder = 300;
|
|||
|
|
|
|||
|
|
// x <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>߾<EFBFBD> <20><><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20><>ġ
|
|||
|
|
float xPos = -totalWidth / 2 + i * xOffset;
|
|||
|
|
digitImageObject.transform.localPosition = new Vector3(xPos, 0, 0);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (ũ<><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>)
|
|||
|
|
digitImageObject.transform.localScale = Vector3.one * 1.0f;
|
|||
|
|
|
|||
|
|
// <20>θ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
digitImageObject.transform.SetParent(digitObject.transform);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning("Digit out of range: " + digit);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (isCritical)
|
|||
|
|
{
|
|||
|
|
ShowCriEffect(targetMonster.position + new Vector3(0, 1.8f, 0), targetMonster);
|
|||
|
|
digitObject.transform.localScale = Vector3.one * 0.5f; // ũ<><C5A9> <20><><EFBFBD><EFBFBD>
|
|||
|
|
digitObject.transform.DOScale(Vector3.one * 0.2f, 0.3f).SetEase(Ease.OutCubic);
|
|||
|
|
digitObject.transform.DOMoveY(digitObject.transform.position.y + 2, 0.5f).SetEase(Ease.OutCubic).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
Destroy(digitObject); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// digitObject<63><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
digitObject.transform.localScale = Vector3.one * 0.5f; // ũ<><C5A9> <20><><EFBFBD><EFBFBD>
|
|||
|
|
digitObject.transform.DOScale(Vector3.one * 0.3f, 0.3f).SetEase(Ease.OutCubic);
|
|||
|
|
digitObject.transform.DOMoveY(digitObject.transform.position.y + 2, 0.5f).SetEase(Ease.OutCubic).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
Destroy(digitObject); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
|||
|
|
MonsterHealth monsterHealth = targetMonster.GetComponentInChildren<MonsterHealth>();
|
|||
|
|
if (monsterHealth != null && !monsterHealth.IsDead)
|
|||
|
|
{
|
|||
|
|
monsterHealth.TakeDamage(damage); // damage <20><>ŭ <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP<48><50> 0 <20><><EFBFBD>ϸ<EFBFBD>
|
|||
|
|
if (monsterHealth.CurrentHealth <= 0)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
aliveMonsters.Remove(targetMonster);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> StageClear ȿ<><C8BF> ǥ<><C7A5>
|
|||
|
|
if (aliveMonsters.Count == 0 && !stageCleared)
|
|||
|
|
{
|
|||
|
|
stageCleared = true;
|
|||
|
|
MasterAudio.StopAllOfSound("BGM_DAILYDUNGEON");
|
|||
|
|
MasterAudio.PlaySound("BGM_VAILAGE", 0.7f);
|
|||
|
|
ShowStageClearAnimation();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private void ShowStageClearAnimation()
|
|||
|
|
{
|
|||
|
|
// <20>ؽ<EFBFBD>Ʈ Ȱ<><C8B0>ȭ <20><> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
stageClearText.gameObject.SetActive(true);
|
|||
|
|
HeroUnit.SetActive(false);
|
|||
|
|
stageClearText.transform.localScale = Vector3.zero;
|
|||
|
|
|
|||
|
|
// Scale <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
stageClearText.transform.DOScale(Vector3.one, 0.5f).SetEase(Ease.OutBack).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
// <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD>鸲 <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
stageClearText.transform.DOShakePosition(1.0f, new Vector3(0, 10, 0), 10, 90, false, true).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
// <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD>̵<EFBFBD> <20>ƿ<EFBFBD> <20>ִϸ<D6B4><CFB8>̼<EFBFBD>
|
|||
|
|
CanvasGroup canvasGroup = stageClearText.GetComponent<CanvasGroup>();
|
|||
|
|
canvasGroup.DOFade(0, 0.5f).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
// <20><>ũ Ŀư <20>̹<EFBFBD><CCB9><EFBFBD> Ȱ<><C8B0>ȭ
|
|||
|
|
darkPanel.gameObject.SetActive(true);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ο<EFBFBD> ȿ<><C8BF> <20>ִϸ<D6B4><CFB8>̼<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>)
|
|||
|
|
DOVirtual.Float(0, 1.0f, 1.0f, (fadeValue) =>
|
|||
|
|
{
|
|||
|
|
darkPanel.color = new Color(0, 0, 0, fadeValue);
|
|||
|
|
}).OnComplete(() =>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><> ȣ<><C8A3>
|
|||
|
|
MasterAudio.PlaySound("BGM_VAILAGE", 0);
|
|||
|
|
MasterAudio.PlaylistsMuted = false;
|
|||
|
|
SceneManager.LoadScene(4);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|