[Unity][개발#5] 블록코딩, 함수 만들기

2021. 5. 14. 12:12PROJECT/VR 소프트웨어 코딩교육 플랫폼

3번째 기능

함수 만들기

 

실제로 함수를 만들때 사용자가 원하는 변수와 같은 것들을 지정해서 쓸 수 가 있다.

그래서 '함수 만들기' 쌓아논 블록을 저장하여 다른 새로운 블록(함수)에 기능을 이관하여 쓸 수 있도록 구현할 것이다.

Block3 : '함수 만들기'를 모두 담당하고 있는 오브젝트

Block3의 모습

중앙에 '함수만들기' 에 쓰일 블록들과 오른쪽중앙에 블록을 쌓을 빨간색 Panel이 보인다.

 

 public void MakeFunction() //함수 만들기
    {
        Fpanel.SetActive(true);
        //Fx.SetActive(true);
        CanvasGroup canvasGroup = Fx.GetComponent<CanvasGroup>();
        canvasGroup.alpha = 1;
        canvasGroup.blocksRaycasts = true;
        PML.SetActive(false);
        SaveFx.SetActive(true);
        Block.SetActive(true);
    }

MakeFx : 화면 중앙에 있는 만들기 버튼 > 버튼을 클릭할시 Block3의 하위 오브젝트 중 FPanel과 Block이 활성화 된다.

Fx는 블록을 담을 오브젝트이기 때문에 비활성화가 되면 코루틴이 실행이 정상적으로 작동되지 않아 CanvasGroup을 사용하였다.

MakeFx버튼을 누른 모습

 public void SaveFunction() //함수 저장하기
    {
        CanvasGroup canvasGroup = Fx.GetComponent<CanvasGroup>();
        Fpanel.SetActive(false);
        Block4.SetActive(true);
        PML.SetActive(true);
        GameObject CloneBlock = Instantiate(Fx, Block4.transform.position, transform.rotation) as GameObject; //Fx를 클론생성
        GameObject CloneBlock2 = Instantiate(ClassBlock, Block4.transform.position, transform.rotation) as GameObject; //ClassBlock를 블록생성
        //Fx.SetActive(false);
        canvasGroup.alpha = 0;
        canvasGroup.blocksRaycasts = false;
        CloneBlock2.transform.SetParent(Block4.transform);
        CloneBlock.transform.SetParent(CloneBlock2.transform); //Fx를 ClassBlock 자식 오브젝트로 넣음으로써 ClassBlock에 Fx 기능들을 전이 시킴
        CanvasGroup canvasGroup2 = CloneBlock.GetComponent<CanvasGroup>();
        canvasGroup2.alpha = 0; //CloneBlock.SetActive(false); 을 대신함
        canvasGroup2.blocksRaycasts = false; // 혹시 터치못하게끔 하기 위해
        //CloneBlock.SetActive(false); //Panel 상에서 보이지 않게끔 비활성화 시킴 > ClassBlock만 보여줌
        CloneBlock2.transform.localScale = new Vector3(1, 1, 1);
        Block3.SetActive(false);
        Block.SetActive(false);
    }

SaveFx : 좌측하단에 있는 완료 버튼 > 쌓아놓은 블록을 저장하고 새로운 블록을 만든다.

 

 GameObject CloneBlock = Instantiate(Fx, Block4.transform.position, transform.rotation) as GameObject; //Fx를 클론생성

Fx는 쌓아놓은 블록들은 오브젝트로써 클론을 생성하여 CloneBlock2의 하위 메뉴로 들어가게끔 구현했다.

하위 오브젝트로 들어간 모습이다
블록을 쌓고 완료 버튼을 누르는 모습

완료 버튼을 누르면 노란색 블록이 생성되고 이 노란색블록이 아까 쌓은 블록들의 기능을 가지고 있다.

 

최종 모습