Unity

[Unity] 유니티 오브젝트 터치 시 (레이캐스트 이용해서 판정) 부모, 자식 오브젝트 해제 하기. When touching object( judged using raycast ) Releasing parent and child objects.

정보처리마법사 2017. 4. 13. 16:51
반응형

 

 

[Unity] 유니티 오브젝트 터치 시 (레이캐스트 이용해서 판정) 부모, 자식 오브젝트 해제 하기. When touching object( judged using raycast ) Releasing parent and child objects.

 

 

유니티 레이캐스트를 이용한 터치 판정 및 부모, 자식 오브젝트 해제하기.

 

 

 

 

이모티콘・01・고양이 마멋 친구들 - Google Play 앱

이모티콘・01・고양이 마멋 친구들: 무료 이모티콘, 회원가입 없이! 카톡, SNS로 감정 표현이 쉬워져요. 귀여움 가득, 대화창을 더 풍성하게!

play.google.com

 

 

 

안녕하세요 정보처리마법사 입니다.

 

이번 포스팅의 주제는 오브젝트를 터치했을 시 부모, 자식 오브젝트로 구성되어있는 오브젝트의 서로간의 해제에 관한 내용입니다.

사용 용도는 게임 진행시 출현하는 터치하면 아이템을 떨어뜨리는다든지의 이벤트를 발생하는 어떤 오브젝트를 구현할 때 등 입니다.

 

ParentsAndChild 는 빈 GameObject 입니다.

하위에 큐브인 Parents 가 있고, 그 하위에 역시 큐브인 Child 가 있습니다.

 

 

 

 

Parents 와 Child는 충돌 판정 및 중력의 영향을 받는 등의 기능을 구현해야 하기 때문에

Collider 컴포넌트와 Rigidbody 컴포넌트를 추가했습니다.

 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
void Update()
    {
        if (Input.touchCount > 0)
        {
            // 싱글 터치.
            Touch touch = Input.GetTouch(0);
            Vector3 touchPos;
            Ray ray;
            RaycastHit hit;
 
            switch (touch.phase)
            {
                case TouchPhase.Began:
                    // 터치 시작 시.
                    Debug.Log("터치 시작");
 
                    Vector3 touchPosToVector3 = new Vector3(touch.position.x,touch.position.y,100);
                    touchPos = Camera.main.ScreenToWorldPoint(touchPosToVector3);
                    ray = Camera.main.ScreenPointToRay(touchPosToVector3);
                    GameObject childGo = GameObject.Find("Child");
 
                    if (Physics.Raycast(ray,out hit, 100))
                    {
                        Debug.DrawLine(ray.origin, hit.point, Color.red, 1.5f);
 
                        if(hit.collider.tag == "Child")
                        {
                            Debug.Log("Child 터치 ! ");
                            childGo.GetComponent<Rigidbody>().isKinematic = false;
                            if(childGo.GetComponent<Transform>().parent!=null)
                            {
                                childGo.GetComponent<Transform>().parent = null;
                            }
                        }
                        else if(hit.collider.tag == "Parents")
                        {
                            Debug.Log("Parents 터치 ! ");
                        }
                    }
                    else
                    {
                        Debug.DrawLine(ray.origin,touchPos, Color.yellow, 1.5f);
                    }
 
                    break;
                case TouchPhase.Moved:
                    // 터치 이동 시.
                    // Debug.Log("터치 이동");
                    break;
 
                case TouchPhase.Stationary:
                    // 터치 고정 시.
                    // Debug.Log("터치 고정");
                    break;
 
                case TouchPhase.Ended:
                    // 터치 종료 시. ( 손을 뗐을 시 )
                    // Debug.Log("터치 종료");
                    break;
 
                case TouchPhase.Canceled:
                    // 터치 취소 시. ( 시스템에 의해서 터치가 취소된 경우 (ex: 전화가 왔을 경우 등) )
                    // Debug.Log("터치 취소");
                    break;
            }
        }
    }
 
cs

 

 

터치했을 시 레이캐스트를 이용하여 터치 판정(충돌 판정) 을 하여 부모, 자식 오브젝트를 해제 시켰습니다.

그와 동시에 자식 오브젝트의 부모 오브젝트를 해제하여 물체가 아래로 떨어지게 구현하였습니다.

 

 

 

 

 

 

원하는 대로 작동이 잘 됩니다.

 

 

 

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

 

 

 

잘 못 된 정보가 있으면 말씀해주세요.

공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.

 

“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"

반응형