GameDev/Cubidom

Cubidom - 블렌더 오브젝트 시스템 연결시키기 및 버그수정

SMNNMN 2026. 4. 14. 23:14

블렌더에서 만든 오브젝트를 유니티 오브젝트에 연결시킬 것이다.

먼저 만든 두개의 블렌더 오브젝트를 Models 파일에 넣어준다. (FBX 파일)

 

이후 사용하는 오브젝트 프리팹의 Mesh Filter에 만든 오브젝트 모델을 넣어 모양을 적용시킨다.

 

오브젝트의 모델이 잘 적용되는 것을 볼 수 있다.

 

 

버그 수정

InputController

null 버그

    public void seleteBlock(int num)
    {
        if(hit.transform == null)
        {
            return;
        }
        if(isSeleting)
        {
            isSeleting = false;
            UIManager.Instance.InActiveSeleteBlock();

            switch (num)
            {
                case 1:
                    Debug.Log(hit.normal + " " + hit.transform);
                    cubeCreator.InsCube(hit.normal, hit.transform, this); // 큐브 생성하기
                    break;
                case 2:
                    cubeCreator.Conversion(hit.normal, hit.transform, this); // 큐브 생성하기
                    break;
                case 3:
                    cubeCreator.CreateCannon(hit.normal, hit.transform, this); // 큐브 생성하기
                    break;
                default: break;
            }
            seletePlane.DeletePlane();
        }

    }

hit가 존재하지 않을 때, 큐브를 생성하지 못하도록 처음에 hit의 존재유무를 판단한다.

 

PreviewManager

null 버그

    void TargetOff() // 타겟이 사라졌을 때,
    {
        if(PreviewDisplay != null)
        {
            PreviewDisplay.SetActive(false);
        }
        if(target != null)
        {
            target.GetComponent<Cube>().HpDown -= SetInfor;
        }
        Destroy(currentObject);
    }
    private void OnDisable()
    {
        TargetOff();
    }

간혹 게임을 Unity Editor에서 중단할 때, Preview의 nullReference가 뜨는데, 이를 체크해 방지했고 OnDisable에 TargetOff를 추가해주었다.target에도 null 판단이후 실행코드를 작성했다.

 

PreviewManager

게임 종료로 Time.deltaTime이 0이 될때, 계속해서 프리뷰 오브젝트가 회전하는 버그

    private void Update()
    {
        if (currentObject != null)
        {
            currentObject.transform.Rotate(new Vector3(0, 0.5f, 0) * Time.deltaTime * 50, Space.World);
        }
        // if(target == null)
        // {
        //     TargetOff();
        // }
    }

Time.deltaTime을 곱하여 시간이 0이 될시 회전을 멈추게 수정해 주었다. 임시적으로 회전 속도는 50

 

게임 재시작시, 기존 프리뷰가 유지되는 버그

       private void Start()
    {
        GameManager.Instance.reGame += ResetPreview;
    }
   private void OnDisable()
    {
        TargetOff();
        GameManager.Instance.reGame -= ResetPreview;
    }
    private void ResetPreview() // 게임 재시작이후 프리뷰 오브젝트 삭제
    {
        if(currentObject != null)
        {
            TargetOff();
        }
    }

GameManager의 reGame 델리게이트에 프리뷰 삭제기능을 넣은 코드를 추가해 게임이 재시작 될시, 프리뷰가 삭제되도록 한다.

 

다음 기능은 이펙트를 만들 것이다.