Unity 3D 문열기/닫기 소스
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DoorScript : MonoBehaviour { public bool open = false; public float doorOpenAngle = 90f; public float doorCloseAngle = 0f; public float smoot = 2f; void Start() { } public void ChangeDoorState() { open = !open; } void Update() { if (open) { Quaternion targetRotation = Quaternion.Euler(0, doorOpenAngle, 0); transform.localRotation = Quaternion.Slerp(transform.localRotation, targetRotation, smoot * Time.deltaTime); } else { Quaternion targetRotation2 = Quaternion.Euler(0, doorCloseAngle, 0); transform.localRotation = Quaternion.Slerp(transform.localRotation, targetRotation2, smoot * Time.deltaTime); } } }
C#으로 스크립트 생성후 코드 작성
문에 스크립트를 추가
그리고 캐릭터(혹은 카메라)에 아래 스크립트를 추가해준다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class InteractScript : MonoBehaviour { public float interactDiastance = 5f; void Update() { if (Input.GetKeyDown(KeyCode.E)) { Ray ray = new Ray(transform.position, transform.forward); RaycastHit hit; if (Physics.Raycast(ray, out hit, interactDiastance)) { if (hit.collider.CompareTag("Door")) { hit.collider.transform.parent.GetComponent<DoorScript>().ChangeDoorState(); } } } } }
그리고 문에 Box Collider를 추가하고 크기와 충돌 범위를 설정해 준다.
두개를 생성 하고 하나는 Is Trigger에 체크하고 하나는 체크를 해제한다.
체크 안한거는 통과를 못하고, 체크를 한거는 통과가능, 그리고 체크한거는 스크립트 적용되는것
그리고 코드에서 if (hit.collider.CompareTag("Door")) 이부분은
박스 콜라이더를 넣은 오브젝트에 Tag를 Door로 추가하여 적용시켜주면 됩니다.
그리고 실행하여 문 근처에 가서 e버튼을 눌리면 문이 열리고 닫힙니다.
여기서도 키 변경은 가능합니다.
'휴지통 > Unity' 카테고리의 다른 글
Unity 3D 카메라 줌인/줌아웃 (0) | 2018.08.23 |
---|---|
유니티 캔버스 스케일러 (0) | 2018.06.07 |