객체지향 프로그래밍 특강
TopDownShooting 구현
minzep 개발
오늘 하루 집중력 부족했음.
다시 마음 잡아가도록 하자.
[내일 목록]
캐릭터 선택 구현 (01:55:00)
public class Character
{
public ChararcterType chararcterType;
public Transform transform;
public Sprite sprite;
public RuntimeAnimatorController Animator;
}
[기억해둘 로직&메소드]
[하위 컴포넌트까지 확대해서 가져옴]
//내 하위에 있는 모든 스프라이트를 가져오기
foreach (SpriteRenderer renderer in transform.GetComponentsInChildren<SpriteRenderer>())
{
Color color = renderer.color;
color.a = 0.3f;
renderer.color = color;
}
[Behaviour끄기]
// 모든 스크립트는 Behaviour를 상속 받기 때문에 이것을 꺼두면 아무 작동 안됨
foreach (Behaviour component in transform.GetComponentsInChildren<Behaviour>())
{
component.enabled = false; //Behaviour 상속 끄기
}
[코루틴]
IEnumerator StartNextWave() //코드를 일정부분 멈추거나 다시 시작하는게 용이
{
while (true)
{
if (currentSpawnCount == 0)
{
UpdateWaveUI();
yield return new WaitForSeconds(2f);
if (currentWaveIndex % 20 == 0)
{
//RandomUpgrade();
}
if (currentWaveIndex % 10 == 0) //생성하는 포지션을 늘림
{
//더 이상 만들수 없을때는
waveSpawnPosCount = waveSpawnPosCount + 1 > spawnPostions.Count ? waveSpawnPosCount : waveSpawnPosCount + 1;
waveSpawnCount = 0;
}
if (currentWaveIndex % 5 == 0)//아이템드랍
{
CreateReward();
}
if (currentWaveIndex % 3 == 0) //한번에 만들어지는 몬스터 수 증가
{
waveSpawnCount += 1;
}
for (int i = 0; i < waveSpawnPosCount; i++) //만들어지는 곳
{
int posIdx = Random.Range(0, spawnPostions.Count);
for (int j = 0; j < waveSpawnCount; j++)
{
int prefabIdx = Random.Range(0, enemyPrefebs.Count);
GameObject enemy = Instantiate(enemyPrefebs[prefabIdx], spawnPostions[posIdx].position, Quaternion.identity); //생성한거 바로 초기화
enemy.GetComponent<HealthSystem>().OnDeath += OnEnemyDeath; //죽을 경우 같이 실행
currentSpawnCount++;
yield return new WaitForSeconds(spawnInterval);
}
}
currentWaveIndex++;
}
yield return null;
}
}