본문 바로가기
IT Tip/유니티 강좌

[유니티강좌] 슬라이딩 도어

by 연꽃연못 2020. 11. 17.
반응형

이번에 모델하우스 실습을 하면서 익히게 된 슬라이딩 도어기능입니다. 3D 모델하우스의 화면전환이라든지 여러가지 유저의 기능추가 작업을 하면서 좀 애먹었던건데 의외로 쉽지만... 흡족하게 잘 되지 않아서 시간을 잡아먹기도 했어요. 

기능은 제목 그대로 슬라이딩 도어인데 한쪽만 열리는 거에요. 작업할때 문이 한쪽만 있는 까닭에 ... 반대쪽은 할필요가 없었어요. ㅋ

 

기능확인은 동영상을 참조해 주세요. 

 

 

동작실험을 위해서 유니티짱(© Unity Technologies Japan/UCL)이라는 3D 캐릭터를 불러들였어요. 

유니티짱이 슬라이딩 도어 일정영역에 들어가면 문이 열리고 일정영역에서 벗어나면 문이 닫히는 기능입니다.

 

먼저 슬라이딩 도어를 지정할 밑작업을 해줍니다.

 

전 새로운 프로젝트를 생성해서 작업을 했어요. 그전에 작업한 모델하우스는 공개할수 없는 거라서 아쉬운데로 유리문을 만들었어요. ^^

 

문틀과 문 두짝, 유니티짱이 딛고 설 밑바닥을 씬에 올려서 적당히 배치해 주세요. 

 

참고로 전 문은 어셋스토어에서 유리 메테리얼(Material)을 적용해서 간단하게 만들었어요. 

문틀은 같은 유리질감중 강하고 불투명한걸로 적용해서 느낌만 살려줘 봤어요. 

 

 

 

준비가 되었으면 Hierarchy > Create Empty (빈 오브젝트)를 생성해 주세요. 

 

이 빈오브젝트를 DoorController라고 이름을 변경해주고 여기에서 Box Collider를 추가한 다음에 In Trigger에 체크를 해주세요. 

 

1. 빈오브젝트 생성

    (Hierarchy에서 마우스 오른쪽 버튼 클릭 → Create Empty 선택 → [DoorController]Rename)

2. Box Collider 추가

    (Add Component → Physics →BoxCollider선택)

3. In Trigger 체크

    (Box Collider에서 두번째 In Trigger 체크박스 선택)

 

 

이제 In Trigger 영역을 지정해 줄거에요. 평소 이용하는 자동문의 센서라고 생각하시면 되요. ^^

 

크기를 지정해주는데 전 아래와 같이 수치를 줬지만 각자 화면에 맞게 크기를 주시면 되요. 

 

정면에서 보면 이런 느낌이에요. 영역이 대충하면 되긴하지만 너무 작거나 너무 커도 좀 곤란해요. 

센서라고 생각하시고 적당한 크기와 위치를 잡으시면 될거에요. 

 

옆면에서 보면 문 앞뒤로 충분하게 줬어요. 너무 짧으면 문이 빨리 닫혀버려서 좀 섭섭하거든요. ^^ 유니티짱이라서 그렇지.. 틀림없이 사람이면 가방이나 머리카락이 끼일수도 있으니 ㅋㅋ 넉넉하게 ..

백마디 말보다 한번 보는게 제일 정확하니.. ㅋㅋ 비스듬한 각도로 본거에요. 충분히 주되 옆쪽으로 너무 커도 곤란합니당.. ㅋ

 

스크립트 폴더를 만들어서 아래 코드를 작성해 주세요. 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Slidingdoor : MonoBehaviour
{
    // 도어를 제어하기 위해
    bool flag;

    public GameObject door;

    void Start()
    {
        // 닫혀있는 상태
        flag = false;
    }

    void Update()
    {

        // 문을 여는 처리
        if (flag == true)
        {
            if(door.transform.position.x >= 1.326f)
            {
                door.transform.Translate(-0.05f, 0, 0);
            }
        } 

        if (flag == false)
        {
            if(door.transform.position.x < 2.122f)
            {
                door.transform.Translate(0.05f, 0, 0);
            }
        } 
    }

    private void OnTriggerEnter(Collider other)
    {
        flag = true;
    }
    private void OnTriggerExit(Collider other)
    {
        flag = false;
    }
}

 

게임오브젝트 변수를 선언해 줬어요. 

 

public GameObject door;

 

Tag를 넣는것보다는 직접 지정해 주는게 전 좀 편해요. ^^
나중에 어느 문인지 지정해 줄거에요.

처음에는 문에 Box Collider줘서 작업을 했더니 얘가 문이 열리면 같이 딸려나가는 통에 ㅡㅡ 다시 빈오브젝트에 만들어서 문을 지정해 주는 걸로 정했어요. 

특별히 어려운 코드는 없어요. ^^ 작업을 할때 여러가지 제한이 많기도 해서 좀 복잡했어요. 

 

기능이 간단한데 무조건 문을 열고 닫아야 되는거에요. 열면 끝이 아니고 꼭 닫아줘야 되는 강제성이 있어요. ^^

 

이제 스크립트 저장하고 나오셔서 열고 닫을 문을 지정해주심 되요.

 

오른쪽 문을 끌어와서 넣어주세요. 

작업한 모델하우스 문 크기가 다 동일해서 위치조정을 할게 없었어요. 문 크기가 달라지면 조금 손봐야 되지만 문크기는 일정한거 같아요. 

 

의외로 간단해요. ^^ 실행해서 동작확인 해주세요. ㅋ 

전 유니티짱을 움직여 가며 좀 놀았어요. ㅎㅎ

반응형

댓글