2010-04-26 5 views
2

나는 유니티 3D를 천천히 배웠습니다. 나는 미로를 만들기 위해 노력하고 있고, 그들이 마무리 지역에 도착할 때 일어날 사건이 필요하다.유니티 3D에서 객체 위치를 알아 내기

개체 위치를 가져 와서 대상 영역에 있는지 어떻게 확인합니까? 자바 스크립트 사용하기.

도움 주셔서 감사합니다.

답변

4

최종 영역을 상자로 처리 할 수있는 경우 마감 영역 주변의 장면에 BoxCollider를 추가하고 isTrigger 속성을 true로 설정할 수 있습니다. 그런 다음 엔티티에서 영역에 들어올 때 OnTriggerEnter으로 콜백을 받게되며, 이후에 레벨을 종료하는 데 사용할 수 있습니다.

+0

감사합니다. – Befall

+0

+1 - 편집기를 사용하는 코드가 적고 논리적 인 조직이 적은 건물이 더 적합합니다. 세계 건물 도구만으로는 할 수없는 것을 표현하기 위해 통일 된 코드를 사용하십시오. – dwerner

2

states on Unity Answers 피터 G로 : 당신은 강체가있는 경우이 문자 컨트롤러를 사용하는 경우 강체가

을 자고 경우

는, 당신은 검사에 Rigidbody.IsSleeping()를 할 수있는, 다음을 확인하십시오. CharacterController.velocity == Vector3.zero;

또는 마지막 위치를 기억하는 모든 프레임에서 수동으로 Vector3을 저장할 수 있습니다. 뭔가처럼 : 잘

function Update() { 
curPos = position; 
if(curPos == lastPos) { 
    print("Not moving"); 
} 
lastPos = curPos; 
} 
0

그런 다음 마무리 지역을 의미 대상 지역으로 당신은 당신이 사용할 수있는 몇 가지 방법

에서이 작업을 수행 할 수 있습니다 경우는 간단한 방법으로

를 충돌 : (1) 비행기를 만들고 "finish"라는 태그를 만듭니다 (2) 그런 다음 플레이어를 선택하고 속성에서 드롭 다운 "태그"를 클릭하십시오. "finish"를 검색하고 그것을 선택하십시오. 또한 게임 객체에 충돌기를 추가해야합니다.

는이 방법을

장소 플레이어에이 스크립트를 새로운 자바 스크립트를 생성하고

function OnCollisionEnter(collision : Collision){ 
    if(collision.gameObject.tag == "finish"){ 

//"STOP GAMEOBJECT FROM MOVING" 
} 

} 

에이 코드를 추가하거나 사용합니다. 이 스크립트는 현재 수행중인 작업에 대해 콜리 더를 사용하는 것과 마찬가지로 신이기도합니다.

var other : Transform; 
    function Update() 
    { 

    var dist = Vector3.Distance(other.position, transform.position); 

    if (dist < 100) 
    { 
    //stop player movent here 
// move player to exact finish position over time 

    } 

    } 
관련 문제