본문 바로가기

유니티

[유니티] 내 주변을 원 모양으로 퍼지는 탄환 생성

특정 오브젝트를 기준으로 원 모양으로 퍼지는 탄환을 생성하는 방법이다.

       int n = 10;
        int speed = 150;
        for(int i = 0; i <n; i++)
        {
         GameObject boltObj = Instantiate(boltPrefebs, player.transform.position + new Vector3(0, 0.3f),
         Quaternion.Euler(0,0, (360*i / (n-1))+180)); //투사체의 각도가 자연스럽게 회전값을 넣었다.
         Vector2 dirVec = new Vector2(Mathf.Cos((Mathf.PI)*2*i / (n-1)), Mathf.Sin((Mathf.PI) * i*2 / (n-1)));
         //원을 기준으로 각각의 투사체마다 벡터를 정리
         boltObj.GetComponent<Rigidbody2D>().AddForce(dirVec*speed);
        }

위의 함수에서 n은 탄환의 갯수, speed는 탄환이 날라가는 속도를 뜻한다.

이를 조정할 경우

n을 30으로, speed를 50으로 변경했을때의 모습

이러한 모습을 보인다.

또한 반원과 같은 형태로 퍼지게 하고싶으면 위의 코드에서 조금 수정하면 되는데,

        int n = 30;
        int speed = 50;
        for(int i = 0; i <n; i++)
        {
         GameObject boltObj = Instantiate(boltPrefebs, player.transform.position + new Vector3(0, 0.3f),
         Quaternion.Euler(0,0, (180*i / (n-1))+180)); //투사체의 각도가 자연스럽게 회전값을 넣었다.
         Vector2 dirVec = new Vector2(Mathf.Cos((Mathf.PI)*i / (n-1)), Mathf.Sin((Mathf.PI) * i / (n-1)));
         //원을 기준으로 각각의 투사체마다 벡터를 정리
         boltObj.GetComponent<Rigidbody2D>().AddForce(dirVec*speed);
        }

Math.Pi*2에서 2를 없애면 반원의 형태가 된다.

이처럼 코드를 짜고 진행하면

반원의 형태로 잘 나온다!!

이런식으로 적용이 된 것을 볼 수 있다.