[이븐아이 게임톤] 개발 - 서브 캐릭터, UI
서브 캐릭터 기획
- 서브 햄찌에 해당하는 기획에 따른 작업 진행
- 서브 햄찌는 일반적인 타워 디펜스 게임의 설치형 타워를 의미하고, 인게임 내에서 획득하는 해바라기 씨(인게임 재화)로 설치가 가능하다
서브 햄찌
- SpawnPoint 2개의 지점 RuleTile로 지정 (Tag “Tile”을 가짐)
- 마우스 RayCast가 Tag와 일치할 때, TowerUI(타워 설치용 UI)를 불러온다
- PopUpWindow 스크립트를 부착하여 PopUpManager의 구조를 사용하여 TowerUI 프리팹을 불러오고, 각각 버튼을 눌렀을 때, 설치형 햄찌를 Instantiate 한다
- 프리팹 Tower01 (for Test) 게임 씬 하이어라키에 생성됨 : 설치형 햄찌 인스턴스
TowerSpawner
- 타워 스폰 함수 가짐
이는 추후에 ObjectPool을 이용한 구조로 변경 할 수도 있다 (참고용)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TowerSpawner : MonoBehaviour
{
[SerializeField]
private GameObject towerPrefab;
public void SpawnTower(Transform tileTransform)
{
Tile tile = tileTransform.GetComponent<Tile>();
if (tile.IsBuildTower == true) return; // 현재 타워 건설되어 있으면 타워건설 X
tile.IsBuildTower = true; // 타워 건설되어 있음으로 설정
Instantiate(towerPrefab, tileTransform.position, Quaternion.identity); // 테스트 임시
// GameManager.Inst.pool.Get(2); // 풀매니저 활용
// 포지션, 위치 매개변수로 넘겨줄 필요 있음
}
}
ObjectDetector
- 서브햄찌와 설치가 가능한 지점을 확인하기 위한 디텍터 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectDetector : MonoBehaviour
{
[SerializeField] TowerSpawner towerSpawner;
Camera mainCamera;
Ray ray;
RaycastHit hit;
private Transform hitTransform;
private void Awake()
{
mainCamera = Camera.main;
}
void Update()
{
if(Input.GetMouseButtonDown(0))
{
// 카메라 위치에서 화면의 마우스 위치를 관통하는 광선 생성
ray = mainCamera.ScreenPointToRay(Input.mousePosition);
// 2D 모니터를 통해 3D 월드의 오브젝트를 마우스로 선택하는 방법
// 광선에 부딪히는 오브젝트를 검출해서 hit에 저장
if(Physics.Raycast(ray, out hit, Mathf.Infinity))
{
if (hit.transform.CompareTag("Tile"))
{
hitTransform = hit.transform;
PopUpManager.Inst.CreatePopup(PopUpManager.Inst.PopUpNames.strTowerUI);
//towerSpawner.SpawnTower(hit.transform);
}
}
}
}
public Transform GetHitTransform()
{
return hitTransform;
}
}
Tile
- 같은 타일에 재생성을 막는 스크립트 ```cs using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Tile : MonoBehaviour { // 타일에 타워가 건설되어 있는지 검사하는 변수 public bool IsBuildTower { get; set; }
private void Awake()
{
IsBuildTower = false;
} } ```
TowerUI
- 타워 설치 가능한 지점을 눌렀을 때, 생성되는 타워 설치 UI
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TowerUI : MonoBehaviour
{
public Button buttonArrow;
public Button buttonBomb;
public Button buttonBlack;
public Button buttonTank;
public Button buttonHeal;
TowerSpawner spawner;
ObjectDetector objectDetector;
PopUpWindow popUpWindow;
private void Awake()
{
objectDetector = FindObjectOfType<ObjectDetector>();
spawner = FindObjectOfType<TowerSpawner>();
popUpWindow = GetComponent<PopUpWindow>();
}
private void Start()
{
Init();
}
void Init()
{
if (objectDetector == null || spawner == null)
{
Debug.LogError("ObjectDetector or TowerSpawner not assigned!");
return;
}
if (buttonArrow != null)
{
buttonArrow.onClick.AddListener(() =>
{
Transform hitTransform = objectDetector.GetHitTransform();
if (hitTransform != null)
{
spawner.SpawnTower(hitTransform);
StartCoroutine(ClosePopUpAfterDelay());
}
});
}
// 나머지도 적용 최적화 필요
}
IEnumerator ClosePopUpAfterDelay()
{
yield return new WaitForSeconds(0.3f); // 원하는 대기 시간 설정
popUpWindow.OnClose();
}
}
UI
- ScoreUI
- Bg 교체
- CardUI
- 스크롤 이미지 수정완료
- CardUI 전체 크기 1.3배 확대
- 배경 이미지 삭제 (전체 패널이 투명하게 보임)