게임클라이언트 프로그래밍/Guns N Rachel's

아이템 생성(플레이어 인벤토리 버리기) 버그 수정

Game Client Lee Hwanguk 2023. 5. 15. 02:03

# 플레이어가 인벤토리에서 아이템을 버릴때 플레이어 주위 3f 에서 랜덤한 위치로 생성되게 했다.

랜덤한 위치이다 보니 플레이어 위치로 떨어지고 버리자마자 먹게되는 버그가 있었다.

아이템이 서로 같은 같은 위치에 떨어지는 것도 버그로 보여졌다.

 

로직에 수정이 필요했다. 플레이어or아이템과 겹치는 위치에 생성되면 다시 랜덤한 위치로 생성이되어야함,

오브잭트의 콜라이더 범위 (0.2,0.2) 보다 멀리 생성되어야함 (간격추가 필요)

 

콜라이더들의 충돌체크가 필요했다 

Collider2D[] colliders = Physics2D.OverlapCircleAll 를 이용하여 체크했다.

 

이 메서드는 주어진 중심과 반지름으로 원을 정의하고 원 안에 모든 콜라이더를 배열로 반환한다.

이때 검출 대상은 layermask에 콜라이더로 제한된다.

 

Layer를 item, player로 설정한 후 원 안에 해당 레이어가 있다면 다시 랜덤한 위치를 잡게 수정했다.

 

*수정한 코드

private void MakeItemForInventory(string discaredItemName)
    {
        Debug.Log("인벤토리가 아이템 만들래"); //Inventory
        Debug.LogFormat("버린 이름 : {0}", discaredItemName);
        
        var playerTrans = GameObject.FindWithTag("Player").transform;
        var dropGo=Instantiate(this.dropItem, playerTrans.parent);
        dropGo.tag = "Equipment";

        Vector3 playerPosition = playerTrans.position;
        float radius = 2.5f;
        Vector3 randomPosition;

        // 겹치는 아이템 체크
        do
        {
            randomPosition = playerPosition + Random.insideUnitSphere * radius;
            randomPosition += new Vector3(0.4f, 0.4f, 0f); //간격 추가

            // (item, player)와 겹치면 다시 반복
            Collider2D[] colliders = Physics2D.OverlapCircleAll(randomPosition, 1.5f, LayerMask.GetMask("Items", "Player"));
            if (colliders.Length > 0)
            {
                continue;
            }
            break;
        } while (true);

        dropGo.transform.position = randomPosition;// +new Vector3(1f, 1f, 1f); ;

        Debug.Log(dropGo.transform.position);
        var resultSpriteAtlas = AtlasManager.instance.GetAtlasByName("UIEquipmentIcon");
        var resultSp = resultSpriteAtlas.GetSprite(discaredItemName);
        dropGo.GetComponent<SpriteRenderer>().sprite= resultSp;

        dropGo.transform.localScale = new Vector3(3f, 3f, 3f);
        dropGo.name = resultSp.name.Replace("(Clone)", "");

    }

 

*구현 영상