[240122]TIL

응징·2024년 1월 22일
0

TIL

목록 보기
20/36
post-thumbnail

학습목록

객체지향 프로그래밍 특강

  • 객체지향

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;
        }
    }
profile
Unity 개발 위주로 정리합니다

0개의 댓글