다양한 기록

Parrying Sword #43 : [아트][개발][프로그래밍] Observer, 화염탄 날리는 눈알, 파이어구미 투명도 낮춤 본문

유니티 엔진/Parrying Sowrd

Parrying Sword #43 : [아트][개발][프로그래밍] Observer, 화염탄 날리는 눈알, 파이어구미 투명도 낮춤

라구넹 2024. 1. 3. 21:42

 

다섯개의 눈알이 있고, 범위 내에 있으면 플레이어 방향으로 화염탄을 날립니다.

 

public void fire()
    {
        if (!activeSts) return;
        if (!fireSphere) return;

        for (int i = 0; i < muzzleLength; i++)
        {
            go[i] = Instantiate(fireSphere, muzzles[i].transform.position, Quaternion.identity);
            Invoke("track", 1.0f);
            Destroy(go[i], 5.0f);
        }
    }

    private void track()
    {
        if (muzzleLength == 0) return;

        for (int i = 0; i < muzzleLength; i++)
        {
            float distanceX = player.transform.position.x - go[i].transform.position.x;
            float distanceY = player.transform.position.y - go[i].transform.position.y;
            float distance = Mathf.Sqrt(distanceX * distanceX + distanceY + distanceY);

            // 방향만 필요하니까 정규화 해야됨 
            Vector2 vector = new Vector2(distanceX / distance, distanceY / distance);
            rb = go[i].GetComponent<Rigidbody2D>();
            rb.velocity = new Vector2(vector.x * fireSpeed, vector.y * fireSpeed);
        }
    }

 

시간차를 두고, 플레이어를 향해 발사한다. 이것이 기본 시스템입니다.

 

저 fire 메소드를 애니메이션 이벤트로 발동하는 방식이고,

activeSts가 지정한 트리거형 BoxCollider2D 밖에 있으면 false로 되어있게 하여

멀리 있을 경우의 발동을 제한하였습니다.

 

플레이어와 각 화염탄의 위치를 기반으로 벡터를 만들고, 방향만 필요한 것이니 정규화한 다음

필요한 만큼 빠르기를 조절할 수 있도록 설계하였습니다.

 

화산에 어떤 생명체가 살까 하면 이미지가 잘 떠오르지 않습니다.

 

결국 노트에 남는 건 뭔가 기괴하게 생긴 디자인 뿐이라 아쉽습니다.

 

아마 다음 몬스터도 기괴할 것 같습니다.

 

파이어구미는 구미, 젤리답게 투명도를 조금 낮췄습니다.

 

뭔가 마음에 안든다 싶었는데 이러니 보기가 낫습니다.