유니티/실습

출시도전 (가제)"산적왕" - 1 - 마을 기획

파란색까마귀 2022. 2. 14. 15:23

2016. 9. 9. 23:29

https://blog.naver.com/nagne2011/220809195323

 

-Unity : 출시도전 (가제)"산적왕" - 1 - 마을 기획

아직 기획이 확실하지 않은 다른 씬 보다 기획이 먼저 잡힌 마을에 대한 기본틀을 만들어 보기로 했다. 대...

blog.naver.com

아직 기획이 확실하지 않은 다른 씬 보다

기획이 먼저 잡힌 마을에 대한 기본틀을 만들어 보기로 했다.

 

 

대략 이렇게 만들생각이다

 

아래의 지구?처럼 둥근 원이 있고,

그 위에 건물이 있으며 좌우측 화살표 버튼을 누르면 지구?가 빙글 돌아가면서 옆에 있던 건물이 가운데로 오는 개념이다

 

빙글빙글 돈다고 생각하면 된다

 

 

 

먼저 좌우측 버튼을 만들어준다

 

 

 

그다음 슬롯으로 사용할 이미지를 위 사진처럼 배치하면 끝

 

참 쉽죠?

 

....저렇게 배치하려고 온갖 수학공식을 다가져다 붙여서 겨우겨우..

 

못만들었다

 

 

 

그래서 위 사진처럼 가운데에 빈 오브젝트를 만들어두고

 

오브젝트를 120도 회전한후, 원점에 슬롯을 생성한뒤 빈오브젝트에 넣어주고, 다시 120도 돌리고 슬롯을 생성해서 넣어주고

3번 반복했다

 

 

같은 방법을 응용하면 5각형도 만들 수 있다

 

이제 위 방법을 이용해서 함수로 만들어보자

 

1
2
3
4
5
6
7
8
9
10
11
public int spinSlot = 0;
//슬롯은 몇개를 만들어줄까
 
public GameObject spinObject;
//빙글빙글 돌아갈 중심 오브젝트
 
public GameObject slotObejct;
//생성할 슬롯 오브젝트의 프리팹
 
public Quaternion Sangle = Quaternion.identity;
//돌아갈 각도
cs

 

먼저 선언을 해준뒤

 

중심 오브젝트와 슬롯으로 사용할 프리펩을 넣어준다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Awake () 
    {
        //돌아갈 각도를 초기화해준다
        Sangle.eulerAngles = new Vector3 (000);
 
        for (int i = 0; i < spinSlot; i++
        {//생성할 슬롯 갯수만큼 반복
            string str = string.Format ("slot_{0}", i);//빼도 상관없다. 슬롯의 이름을 이쁘게 만들생각이다
            GameObject obj = Instantiate (slotObejct, Vector3.zero, Quaternion.identity) as GameObject;
            //슬롯생성
            obj.name = str;//슬롯 이름정해주기
            obj.transform.SetParent (spinObject.transform);
            //슬롯을 중심오브젝트의 아들로 넣어주고 크기를 1로 초기화한다
            obj.transform.localScale = new Vector3 (111);
            spinObject.transform.Rotate (new Vector3 (00360/spinSlot));
            //그리고 중심 오브젝트를 360 / 슬롯갯수 만큼 회전한다
        }
    
        //즉, 슬롯 갯수만큼 생성,회전,생성,회전을 반복하는것
        //예를들어 슬롯이 3개라면, 생성후 회전하는걸 3번 반복하는거다
        spinObject.transform.Rotate (new Vector3 (000));
        //그다음 중심 오브젝트를 초기화해준다
    }
cs

 

 

테스트 용으로 5개를 생성해보면 깔끔하게 잘 나온다

 

이제 회전차례

 

회전은 간단하다

1
2
3
4
5
    void Update () 
    {
 
        spinObject.transform.rotation 
= Quaternion.Slerp (spinObject.transform.rotation, Sangle, Time.deltaTime * 5.0f);
    }
cs

 

프레임마다 중심 오브젝트의 각도를 아까 초기화해둔 Sangle 만큼 회전시켜준다

 

그리고 버튼함수를 만들어서

1
2
3
4
5
6
7
8
9
    public void bLeftButton()
    {
        Sangle.eulerAngles += new Vector3(0,0,360/spinSlot);
    }
 
    public void bRightButton()
    {
        Sangle.eulerAngles -= new Vector3(0,0,360/spinSlot);
    }
cs

매 

버튼 클릭시 마다  Sangle에다가 360/슬롯 숫자만큼 더해준다

 

그러면 아래와 같이 정상적으로 작동하게 된다

 

 

728x90