2014-07-21 4 views
0

개체를 특정 장소로 ​​끌어오고 싶습니다. 해당 특정 영역에 도달하기 전에 드래그 한 개체를 놓을 경우 개체가 드래그를 시작하는 원래 위치로 이동해야합니다. 어떻게 가능할까요? 이에 대한 구체적인 움직임이 있습니까?개체를 unity3d에 드래그하십시오.

void OnMouseDown() 
{ 

drag = true; 
//Debug.Log("haii "); 
} 
void OnMouseDrag() 
{ 
if(drag) 
{ 
    var pos =Input.mousePosition; 
    pos.x =Mathf.Clamp(pos.x,0,Screen.width); 
    pos.y =Mathf.Clamp(pos.y,0,Screen.height); 
    if(zdist>0) 
    { 
    zdist=Vector3.Distance(Camera.main.transform.position,transform.position); 
     pos.z=zdist; 
     pos = Camera.main.ScreenToWorldPoint(pos); 
     transform.position =pos; 

    } 
} 
} 

답변

0

귀하의 경우에는 OnMouseUp()을 사용할 수 있습니다.
아이디어는 특정 영역 내에 객체가 있는지 확인하는 것입니다. 언제 사용자가 클릭을 해제합니다.

OnTriggerEnter()을 사용하여 개체가 해당 영역에 도달했는지 확인할 수 있습니다.
개체가 여전히 영역 밖에있을 경우 원래 위치로 돌아갑니다. 개체에 대한

스크립트 :

void OnTriggerEnter(Collider collider){ 
    // detect if the object enters the area 
    if(collider.GameObject.name == "Your Object"){ 
     // get object's script and modify its variable 
     ObjectScript obj = collider.GameObject.GetComponent<ObjectScript>(); 
     obj.areaReached = true; 
    } 
} 

void OnTriggerExit(Collider collider){ 
    // set it back to false if the object leaves the area before OnMouseUp 
    if(collider.GameObject.name == "Your Object"){ 
     ObjectScript obj = collider.GameObject.GetComponent<ObjectScript>(); 
     obj.areaReached = false; 
    } 
} 
: 지역에 대한

void OnMouseDown(){ 
    // save the original position for later use 
    originalPosition = gameObject.transform.position; 
    .... 
} 

void OnMouseUp(){ 
    if(drag){ 
     if(!areaReached) 
      gameObject.transform.position = originalPosition; 
     // i don't see you set drag to false in your code, 
     // when user has released his click, he cannot drag anymore 
     // set it to false 
     drag = false; 
    } 
} 

스크립트