팀 과제 진행상황
나의 새로운 담당 임무 is
보스 라운드(디자인, 이미지, 패턴 etc) 만들기 !
저번 주말에 보스의 위치와 크기, HP bar 등
Scene 의 대략적인 틀 만들기를 진행하고,
오늘은 특정 HP 마다 랜덤 벽돌을 생성하는 것(보스의 방해스킬)을 작업했다.
금방 작업이 완료될 줄 알고 기분좋게 시작했는데,
중간중간 조원분들의 오류를 같이 해결하고
(도움이 되었을지는 모르겠지만😅 오류를 해결하는 과정에서 또 새롭게 배우는 것이 있어서 무조건 동참 필수 !)
아이디어 회의도 계속 하면서
추가로 오늘은 스탠다드반 수업도 있는 날이라
(이렇게 적고 보니 핑계 나열처럼 보이긴 하는데 기분탓입니다 하하하 ^.^)
시간이 너무나도 빠르게 흘러갔다..!
그리고 쉽게 완성되리라 예상했던 벽돌 랜덤 생성 파트에서
코드를 작성하려고 하는데 오늘따라 이상하게 뇌가 제대로 작동하지 않는 기분이었다. (물론 아는 것이 많이 없어서 그렇기도 하지만 !)
지금은 처음보단 확실히 조건문 & 반복문 친구들과 어색한 사이를 넘어 조오오오금이라도 친해진 것 같긴한데 아직 응용력이 부족한 것 같다.
그래도 함께하는 소중한 조원분들이 있기에
도움 찬스를 사용하여 구현 성공한 벽돌 랜덤 생성 !
NormalBoss.cs ↓
using UnityEngine;
public class NormalBoss : MonoBehaviour
{
float bossMovementX = 0.05f; // Boss 의 x 축 움직임
public int bossMaxHP = 10; // Boss 의 Max HP
int damageFromBall = 0; // 공의 공격력
public NormalBossBrickMaker nbBrickMaker;
// Start is called before the first frame update
void Start()
{
Time.timeScale = 1.0f;
}
// Update is called once per frame
void Update()
{
if (transform.position.x > 2.6f) // Boss 가 오른쪽 화면 끝까지 가면 왼쪽으로 방향 전환
{
bossMovementX = -0.05f;
}
if (transform.position.x < -2.6f) // Boss 가 왼쪽 화면 끝까지 가면 오른쪽으로 방향 전환
{
bossMovementX = 0.05f;
}
}
void FixedUpdate()
{
transform.position += new Vector3(bossMovementX, 0, 0);
}
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ball") // boss 와 Ball 이 만나면 Boss 가 데미지 입음.
{
damageFromBall += 1;
Debug.Log("damageFromBall~~");
// HPfront 컴포넌트 찾기
GameObject varOfHPfront = GameObject.Find("HPfront");
varOfHPfront.transform.localScale = new Vector3(1 - ((float)damageFromBall / bossMaxHP), 1.0f, 1.0f); // 나눌 때 자료형 주의 !
// RandomBrickSpawn
nbBrickMaker.RandomBrickSpawn(bossMaxHP - damageFromBall);
if (damageFromBall >= bossMaxHP) // boss 가 죽었을 때 - 시간을 0 으로 세팅해서 HP bar 변화와 boss 움직임 일어나지 않도록 세팅.
{
BossDead();
}
}
}
void BossDead()
{
// Boss 움직임 Stop 은 FixedUpdate() 에서 구현.
// Boss 죽었을 때 dead(붉은 색) 으로 췌인지
gameObject.transform.Find("alive").gameObject.SetActive(false);
gameObject.transform.Find("dead").gameObject.SetActive(true);
// 시간 0 으로 설정.
Time.timeScale = 0.0f;
}
// TODO 특정 HP 마다 item 드랍하도록
}
OnCollisionEnter2D() 에서 공과 충돌이 일어났을 때 벽돌 랜덤 생성 메서드인 RandomBrickSpawn() 이 작동하도록 구현했다.
RandomBrickSpawn() 에 대한 세부 내용은 아래 스크립트에 적혀있다.
NormalBossBrickMaker.cs
using UnityEngine;
public class NormalBossBrickMaker : MonoBehaviour
{
public GameObject brick;
public void RandomBrickSpawn(int bossMaxHP) // 매개변수로 boss 의 HP
{
if (bossMaxHP == 7)
{
for (int i = 0; i < 5; i++)
{
if (i % 2 == 1)
{
GameObject newBrick = Instantiate(brick);
newBrick.transform.parent = GameObject.Find("Bricks").transform;
float x = (i % 5) * 1.2f - 2.4f;
float y = 0.5f;
newBrick.transform.position = new Vector3(x, y, 0);
}
}
}
else if (bossMaxHP == 5)
{
for (int i = 0; i < 5; i++)
{
if (!(i % 2 == 1))
{
GameObject newBrick = Instantiate(brick);
newBrick.transform.parent = GameObject.Find("Bricks").transform;
float x = (i % 5) * 1.2f - 2.4f;
float y = 0.5f;
newBrick.transform.position = new Vector3(x, y, 0);
}
}
}
else if (bossMaxHP == 3)
{
for (int i = 0; i < 5; i++)
{
GameObject newBrick = Instantiate(brick);
newBrick.transform.parent = GameObject.Find("Bricks").transform;
float x = (i % 5) * 1.2f - 2.4f;
float y = 0.0f;
newBrick.transform.position = new Vector3(x, y, 0);
}
}
}
}
코드를 작성하는 과정에서 몸소 체험하며 배운 것들은 다음과 같다.
전에 배운 적도 있겠지만,
직접 맞닥뜨리며 배우게 된 이 부분들은 정말 잊지 못할 내용이다.
(내 기억력 파이팅 ~^_^)
추가로 기억할 것 :
추가 공부할 것s :