본문 바로가기

개발자_뉴비일지

내일배움캠프 Unity 25일차 TIL - 타겟

string keyword="타겟";

 

1. Team Project : CodingPlease

 

(1) 몬스터 랜덤 생성

 

>>양쪽에서 나타날 몬스터들 프리팹화

 

<MonsterManager>

 public GameObject monsterRight;
 public GameObject monsterLeft;
 

 // Start is called before the first frame update
 void Start()
 {
     Instantiate(monsterRight);
     Instantiate(monsterLeft);
     
 }

>> MonsterManager를 만들어서 소환시켜준다.

결국 하나의 명령으로 몬스터를 양쪽에서 생성할 수 있게는 못하고 왼쪽, 오른쪽 몬스터를 따로 만들어줬다ㅜㅠ

일단 이렇게 진행하고 나중에 수정해봐야겠다.

 

(2) 총알 복제

 

몬스터에게 총알을 들려줬다.

 

<MonserMoveLeft>

void ShootingBullet()
{
    float x = this.transform.position.x;
    float y = this.transform.position.y;
    Instantiate(bullet, new Vector3(x, y, 0), Quaternion.identity);
}

>>총알 생성 후 InvokeRepeating("ShootingBullet", 0.0f, 0.5f);를 start함수에 추가해서 총알이 복제가 될 수 있게 만들었다.

>>몬스터가 가진 총알이 복제가 된다.

 

(3) 총알 발사

 

오늘 거의 하루종일 고민을 한 부분...

타겟을 플레이어의 좌표로 잡고 그 부분으로 총알이 날라가게 하고 싶은데,

도무지 어찌 해야할 지 감도 안와서 튜터님에게 왔다갔다 하면서 이것 저것 작성하며 건드려보았다.

 

튜터님의 조언대로 코드를 쳐보려 했지만 내 실력으론 한계인건지 계속 빨간 줄뜨고..실패ㅜㅠ

 

그러다가 우리 팀원분이 한방에 해결해 주셨다.

 

<BulletShootingToTarget>

 GameObject target;
 public float speed = 5.0f; // 이동 속도를 public 변수로 설정하여 에디터에서 조절 가능하게 함

 void Start()
 {
     target = GameObject.Find("Player");
     transform.eulerAngles = new Vector3(0f, 0f, getAngle(transform.position.x, transform.position.y, target.transform.position.x, target.transform.position.y));
 }

 void Update()
 {
     transform.Translate(Vector2.right * speed * Time.deltaTime);
 }

 float getAngle(float x1, float y1, float x2, float y2)
 {
     float dx = x2 - x1;
     float dy = y2 - y1;
     float rad = Mathf.Atan2(dy, dx);
     float degree = rad * Mathf.Rad2Deg;
     return degree;

>>target으로 임시로 만들어놓은 오브젝트인 Player를 찾은 다음 총알과의 거리의 각도를 계산하여 보내는....

넙죽 받아먹은 코드다.

 

마무리

진짜.........거의 고민만 하다가 오늘 하루가 다 간것같다.

제일 고민거리였던 총알발사 부분을 팀원분의 도움으로 일단은 해결했지만 나중에 튜터님의 조언대로도 한번 만들어봐야겠다.

 

.

.

.

with 요비