안녕하세요. unity 독학 이제 이주차입니다.
간단한 횡스크롤 슈팅게임을 제작하고 있는데 적 스폰에서 막혀 3일째 고민하다가 질문드립니다.
public void SpawnEnemy()
{
if(curenemycount < midenemycount)
{
int ranEnemy = Random.Range(0, 2);
int ranPoint = Random.Range(0, 5);
GameObject enemy = Instantiate(enemyObjs[ranEnemy], spawnPoints[ranPoint].position, spawnPoints[ranPoint].rotation);
Rigidbody2D rigid = enemy.GetComponent<Rigidbody2D>();
Enemy enemyLogic = enemy.GetComponent<Enemy>();
curenemycount++;
enemyLogic.player = player;
enemyLogic.gameManager = this;
}
else if(curenemycount == midenemycount)
{
GameObject A = Instantiate(BossA, bosspoint.position, bosspoint.rotation);
Rigidbody2D rigid = A.GetComponent<Rigidbody2D>();
curbossA_count++;
}
else if (curenemycount > midenemycount && curenemycount < maxenemycount)
{
int ranEnemy = Random.Range(0, 3);
int ranPoint = Random.Range(0, 5);
GameObject enemy = Instantiate(enemyObjs[ranEnemy], spawnPoints[ranPoint].position, spawnPoints[ranPoint].rotation);
Rigidbody2D rigid = enemy.GetComponent<Rigidbody2D>();
Enemy enemyLogic = enemy.GetComponent<Enemy>();
curenemycount++;
enemyLogic.player = player;
enemyLogic.gameManager = this;
}
else if(curenemycount == midenemycount)
{
GameObject B = Instantiate(BossB, bosspoint.position, bosspoint.rotation);
Rigidbody2D rigid = B.GetComponent<Rigidbody2D>();
curbossB_count++;
}
BossA가 스폰된 이후 health가 0이 되어도 다음으로 넘어가지 않습니다 ㅠ
참고로 health는 다른 스크립트에 있어서 health<=0일 경우 bool bossdie = true로 하여 bool 값을 받아오는것도 시도해보았는데
public void SpawnEnemy()
{
if(curenemycount < midenemycount)
{
int ranEnemy = Random.Range(0, 2);
int ranPoint = Random.Range(0, 5);
GameObject enemy = Instantiate(enemyObjs[ranEnemy], spawnPoints[ranPoint].position, spawnPoints[ranPoint].rotation);
Rigidbody2D rigid = enemy.GetComponent<Rigidbody2D>();
Enemy enemyLogic = enemy.GetComponent<Enemy>();
curenemycount++;
enemyLogic.player = player;
enemyLogic.gameManager = this;
}
else if(curenemycount == midenemycount)
{
BossASpawn();
}
else if(bossADie == true)
curenemycount++;
else if (curenemycount > midenemycount && curenemycount < maxenemycount)
{
int ranEnemy = Random.Range(0, 3);
int ranPoint = Random.Range(0, 5);
GameObject enemy = Instantiate(enemyObjs[ranEnemy], spawnPoints[ranPoint].position, spawnPoints[ranPoint].rotation);
Rigidbody2D rigid = enemy.GetComponent<Rigidbody2D>();
Enemy enemyLogic = enemy.GetComponent<Enemy>();
curenemycount++;
enemyLogic.player = player;
enemyLogic.gameManager = this;
}
else if(curenemycount == midenemycount)
{
BossBSpawn();
}
}
void BossASpawn()
{
if(curbossA_count == maxbossA_count)
if(bossADie == true)
curenemycount++;
else
return;
else
{
GameObject A = Instantiate(BossA, bosspoint.position, bosspoint.rotation);
Rigidbody2D rigid = A.GetComponent<Rigidbody2D>();
curbossA_count++;
}
}
void BossBSpawn()
{
if(curbossB_count == maxbossB_count)
if(bossBDie == true)
SceneManager.LoadScene("Clear");
else
return;
else
{
GameObject B = Instantiate(BossB, bosspoint.position, bosspoint.rotation);
Rigidbody2D rigid = B.GetComponent<Rigidbody2D>();
curbossB_count++;
}
}
bool값이 읽어지지 않고 잘 되지 않았습니다
코드를 어떻게 고치면 좋을지 알려주시면 감사하겠습니다 ㅠㅠ
무슨 동작을 하게 하려는 건지 잘 이해가 안가는뎅
curenemycount를 0으로 하고 한마리 나올때마다 ++ 해서 midenemycount=50으로 설정해둬서 처음에 랜덤으로 몬스터들을 생성하고 50마리가 생성되면 보스A가 나오게 합니다. 그리고 bossA가 죽으면 다시 랜덤으로 적을 스폰하려고 하는데 bossA가 죽어도 사라지질 않아요 ㅠ
지금 올린 코드만 봐서는 구조파악이 전혀 안됨 bossA가 죽었다는 것은 어떤식으로 판정하고 애초에 SpawnEnemy()함수가 어디에서 어떻게 작동하는지도 몰갯슴
두번째 사진 코드에서 else if(bossADie == true)가 진행을 막고잇는거 아님??
SpawnEnemy()함수가 Update나 FixedUpdate()에 들어있고 적이 죽어도 curenemycount가 감소하지 않는다고 추측하면 1번 사진에서는 보스가 죽을 때 curenemycount를 증가시켜줘야겠고 2번사진에서는 else if(bossADie == true) curenemycount++코드를 바로 위 else if블록 내부에 넣으면 해결될거갓은데???
혹시 ekdrns2_913@naver.com 로 메일 보내주실 수 있으실까요? 스크립트 전부 올리면 너무 길어질 것 같아서요
메일확인함
enemy코드에서 GameManager의 bossADie변수를 건드리는 부분이 전혀없음 enemy의 void BossADie(bool BossADie) 함수는 어디서도 실행시키는 부분을 찾아볼 수가 없고 심지어 자기한테 들어온 매개변수BossADie에 값을 넣는 아무 의미 없는 짓까지 하고 잇슴
한마디로 bossADie의 값이 처음 Awake에서 false로 설정한 뒤로 바뀔 일이 없다는거임
넵 그래서 어떻게 하면 enemy 코드에서 bool bossADie를 바꿀 수 있을지를 몰라서 질문드렸습니다 ㅠ
enemy에 public GameManager gameManager;변수 있으니 health가 0이 되면 gameManager.bossADie = true 이렇게 실행하면 되지 않겟슴??
히히 제가 다른 부분에서도 뭔가 잘못하고 있나보네요 잘 안되네요 ㅠ 그래도 알려주셔서 감사합니다.
델리게이트나 유니티이벤트 사용해봐
넵 공부해서 한번 해보겠습니당 감사합니다
일단 지금 핸드폰이라 코드가 잘 안 보이긴 하는데, 코드 자체를 이렇게 짜면 안됌. 보스 하나 정도는 괜찮지만 보스 나오는거 보면 쫄병들도 이렇게 짰을텐데 Instantitiate 로 스폰 시키면 메모리 과부하 걸려서 겜 터짐. 오브젝트 풀링 공부해서 코드 재사용 하는법 배워야함. 일부로 이렇게 짰을 수도 있지만 2주차면 몰라서 이렇게 짰을거 같아서 말함
나도 instantitiate 로 겜 중간에 생성해봤는데 1~2마리는 괜찮아도 여러 마리 생산사면 바로 핑 다운 돌더라. 그래서 오브젝트 삭제랑 생성은 절대 게임 중간에 안하게 코드 짰음.
넵 오브젝트 풀링 공부해서 다시 짜보겠습니다!
오브젝트 풀링 했더니 이번엔 보스가 공격도 안하는데 한번 봐주실 수 있으실까요? ㅠ