2017-12-31 69 views
0

내 장면의 여러 영역에 적용되는 스크립트가 있습니다. 장면에 붙이고 화면 위로 드래그하여 개별적인 구체를 움직일 수 있기를 바랍니다. 내 첫 번째 문제는 어떤 구체를 만져서 드래그해도 모든 구체가 함께 움직인다는 것입니다. (같은 조립식의 일부이지만 다른 구체의 자식은 아닙니다). 두 번째 문제는 화면의 아무 곳이나 터치하고 드래그하면 구체 중 하나를 터치 할 때 반응하는 대신 구체가 반응한다는 것입니다.하나의 객체를 터치하여 드래그하는 경우

Touch touch = Input.GetTouch(0); 
    for (int i = 0; i < Input.touchCount; i++) 
    { 
     if (touch.phase == TouchPhase.Began) 
     { 
      screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); 
      offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, screenPoint.z)); 
     } 
     else if (touch.phase == TouchPhase.Moved) 
     { 
      Vector3 cursorPoint = new Vector3(touch.position.x, touch.position.y, screenPoint.z); 
      Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset; 
      transform.position = cursorPosition; 
     } 
    } 

나는 모든 구체의 문제가 함께 이동하는 대신 특정 영역의 같은 스크립트가 모든 분야에 적용하고, screenpointoffestgameObject.transform.position에서 파생되고 있다는 사실에서 유래하는 느낌이 만졌어. 이 문제를 해결하기 위해 루프 위에 for 루프 위에 다음 코드를 넣으려고했지만이 방법이 올바르지 않을 수도 있습니다. 나는 이것에 초보적이다.

RaycastHit hit = new RaycastHit(); 
    Physics.Raycast(touch.position, touch.position, out hit); 
    if (hit.collider == GameObject.FindGameObjectWithTag("Sphere0")) 
    { 
     selectedObject = GameObject.FindGameObjectWithTag("Sphere0"); 
    } 

나는 내 태그를 적절히 설정하고, 그 첫 번째 영역 (Sphere0) 근무 만약 내가 다른 구체에 대한 코드를 작성했을 수 있습니다. 하지만, 전혀 작동하지 않는 것 같습니다. 내 프로젝트는 ARCore 프로젝트이지만 장면의 이러한 측면에 대해 코드화해야하는 부분을 변경해야한다고 생각하지 않습니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

1

터치 및 구형 제어에서 레이캐스팅을 수행하기 위해 하나의 마스터 스크립트를 여러분과 구별하면됩니다. 그런 다음 모든 분야에 동일한 태그 (예 : "구")를 붙입니다.

void Update() 
{ 
    Touch touch = Input.GetTouch(0); 
    if (touch.phase == TouchPhase.Began) // when screen is touched... 
    { 
     RaycastHit hit; 
     if (Physics.Raycast(Camera.main.ScreenToWorldPoint(touch.position), Vector3.forward, out hit)) // ...cast a ray... 
     { 
      if (hit.collider.tag == "sphere") //...and check if ray hits a sphere 
      { 
       selectedObject = hit.collider.gameObject; 
      } 
     } 
    } 

    // add touch controls here and apply to selectedObject for movement 
} 
+0

해피 뉴 이어에 감사드립니다. 그것은 그것이 작동해야하는 것처럼 들린다. 프리 플랍 내에 sphereMovementController 스크립트를 저장할 구체가 들어있는 빈 게임 객체를 만들었는데,이 객체는 여기에서 볼 수 있습니다 (너무 긴 주석입니다) : https://pastebin.com/V9REEN4p 놀랍게도, 이제 모든 구체를 터치하고 드래그하십시오. 내 코드에 문제가 있거나 설치가 기술되었다고 생각하십니까? – nerk

+0

일부 Debug.Log를 코드의 다른 부분에 배치하고 도달하지 않는 부분을 확인하십시오. 어쩌면 레이 캐스트를 조정해야 할 수도 있습니다. 시도하지도 않았고 테스트도하지 않았습니다. – ryeMoss

+0

무슨 소리 조언 : 나는 그렇게했고 내 레이 캐스트를 변경했다 :'Physics.Raycast (Camera.main.ScreenToWorldPoint (touch.position), Camera.main.transform.forward, out hit)'. 그런 다음 마지막 줄에서'transform.position = touchPosition; '을 설정한다는 것을 알았지 만 스크립트가 각 구체 객체에있을 때부터 였으므로 이제이를 selectedObject.transform.position = touchPosition;으로 변경했습니다. 구체가 만졌을 때 주위를 움직이지만 여전히 문제가 있습니다. – nerk

관련 문제