https://github.com/Kimhyogyeom/ProjectA
GitHub - Kimhyogyeom/ProjectA: Unity-MOBA-Prototype
Unity-MOBA-Prototype. Contribute to Kimhyogyeom/ProjectA development by creating an account on GitHub.
github.com
안녕하세요.
오늘은 프로젝트의 전체 요약본 영상을 녹화해 보았습니다.
시간을 3~4분으로 줄여보려고 했지만.. 쉽지 않더라고요.
그래도 7분 이내로 세이브했습니다.🤣
추가로
Tap 키를 누르면 Score Board가 나오게 작업을 해주었습니다.
ScoreBoardController 스크립트
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class ScoreBoardController : MonoBehaviour
{
public int playerLevel = 1;
public int playerDeathCount = 0;
public int turretBreakCount = 0;
public int creepScore = 0;
[SerializeField] private TextMeshProUGUI playerLevelText;
[SerializeField] private TextMeshProUGUI playerDeathCountText;
[SerializeField] private TextMeshProUGUI turretBreakCountText;
[SerializeField] private TextMeshProUGUI creepScoreText;
[SerializeField] private GameObject scoreBoardUI;
private KeyCode keyCode = KeyCode.Tab;
void Update()
{
if (Input.GetKeyDown(keyCode))
{
playerLevelText.text = playerLevel.ToString();
playerDeathCountText.text = playerDeathCount.ToString();
turretBreakCountText.text = turretBreakCount.ToString();
creepScoreText.text = creepScore.ToString();
scoreBoardUI.SetActive(true);
}
if (Input.GetKeyUp(keyCode))
{
scoreBoardUI.SetActive(false);
}
}
}
PlayerLevel / DeathCount / TurretBreakCount / CreepScore
은 외부에서 추가를 해 줄 것이기에 public으로 선언을 해주었습니다.
다음은 Update()에서 keyCode인 Tab으로
GetKeyDown / GetKeyUp을 활용해
Board 오브젝트를 활성 / 비활성화해주었습니다.
Update()에서 즉시 Text에 동기화를 해줄 수도 있지만,
쓸데없는 비용을 줄이기 위함입니다.
다음으로는 FindGameObjectWithTag의 방식을 없애기입니다.
FindGameObjectWithTag는
비용이 매우 큰 작업으로 알고 있습니다.
그렇기에 기존에 만들어둔 EnemyManager 스크립트의 minions List를 활용하였습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
public static EnemyManager Instance;
public List<GameObject> minions = new List<GameObject>();
void Awake()
{
Instance = this;
}
public void RegisterMinion(GameObject minion)
{
if (!minions.Contains(minion))
minions.Add(minion);
}
public void UnregisterMinion(GameObject minion)
{
if (minions.Contains(minion))
minions.Remove(minion);
}
public List<GameObject> GetMinions()
{
return minions;
}
}
private void UpdateTarget()
{
// Transform closestMinion = GetClosestObjectInRadius(GameObject.FindGameObjectsWithTag(minionTag), aggroRange);
Transform closestMinion = GetClosestObjectInRadius(EnemyManager.Instance.minions, aggroRange);
if (closestMinion != null)
{
currentTarget = closestMinion;
}
else
{
// Transform closestTurret = GetClosestObject(GameObject.FindGameObjectsWithTag(turretTag));
Transform closestTurret = GetClosestObject(turretArray);
if (closestTurret != null)
{
currentTarget = closestTurret;
}
else
{
currentTarget = nexusObj != null ? nexusObj.transform : null;
}
}
}
private Transform GetClosestObject(GameObject[] objects)
{
float closestDistance = Mathf.Infinity;
Transform closestObject = null;
Vector3 currentPosition = transform.position;
foreach (var obj in objects)
{
if (obj != null)
{
float distance = Vector3.Distance(currentPosition, obj.transform.position);
if (distance < closestDistance)
{
closestDistance = distance;
closestObject = obj.transform;
}
}
}
return closestObject;
}
private Transform GetClosestObjectInRadius(List<GameObject> objects, float radius)
{
float closestDistance = Mathf.Infinity;
Transform closestObject = null;
Vector3 currentPosition = transform.position;
foreach (var obj in objects)
{
if (obj.tag == minionTag)
{
float distance = Vector3.Distance(currentPosition, obj.transform.position);
if (distance < closestDistance && distance <= radius)
{
closestDistance = distance;
closestObject = obj.transform;
}
}
}
return closestObject;
}
Enemy가 이동되는 탐색 로직을 위와 같이 변경시켜 주었으며,
Turret 또한 Enemy의 탐지 방식을 동일하게 적용시켜 주었습니다.
생성된 Enemy를 List로 관리함으로 인해
훨씬 더 비교적 손쉽게(?) 해결을 할 수 있었습니다.
마지막으로 플레이어의 대미지를 높게 올려 영상으로 살펴보겠습니다.
영상을 녹화하면서 뭔가
재미를 줄 수 있는 부분들이 뭐가 있을지 고민이 되었습니다.
현재 생각나는 것이
Mission 부여 / 펫 / 함정 / 설정 / Ctrl + 1~4 모션 등이 있는데요
현재 ProjectB 를 기획함에 있어
ProjectA의 작업은 블로그에 업로드 하지 않고,
ProjectB 프로젝트의 작업과 병행 하면서
Git에 Commit만 올리는 방식으로 진행하겠습니다.
감사합니다.