2017-03-27 8 views
0

SteamVR 컨트롤러와 raycast를 클릭하고 드래그하여 UI 요소의 y 위치를 로컬 영역으로 이동하려고합니다. 나는 예측할 수없는 결과를 낳고있다.Raycast를 사용하여 객체 이동

나는 드래그 시작 시점에 레이 캐스트의 위치를 ​​얻으 려하고 드래그하는 동안 어디에서 시작했는지와 거리를 이동하려고합니다.

if (hit.transform.name == "Content" && scrollSet == false) 
{ 
    content = hit.transform; 
    scrollSet = true; 
    scrollPos = hit.transform.position ; 
} 

if (scrollSet == true) 
{ 
    if (rController.triggerPressed) 
    { 
     y = hit.transform.position.y - scrollPos.y; 
     content.transform.localPosition = new Vector3(content.transform.localPosition.x, content.localPosition.y + y, content.transform.localPosition.z); 
    } 
    else 
    { 
     scrollSet = false; 
    } 
} 

답변

0

당신이 .MoveTowards에 .MovePosition을 변환 할 수 있습니다

여기 내 코드입니다. 그러나 그것은 아직도 뛰어 들었다. 코드가 마우스 오른쪽 버튼으로 클릭 한 프레임 중에 만 실행 중이므로 if 문 밖으로 이동하십시오.

다음은 주 카메라에 배치 된 전체 스크립트입니다. 항상 대상을 선택해야하므로 오류가 발생하지 않도록 강체가있는 gameObject를 "bTarg"에 넣어야합니다.

public class ClickTarget : MonoBehaviour { 

private GameObject target; private Vector3 destination; private float distance; private Vector3 tTrans; 

public GUIText targetDisplay; public float speed; public GameObject bTarg; 

void Start() { targetDisplay.text = ""; distance = 0.0f; target = bTarg; } 

void Update() { if(Input.GetButtonDown("Fire1")){ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit)){ if(hit.collider != null){ if(hit.collider.tag == "Unit"){ target = hit.collider.gameObject; targetDisplay.text = "Unit: " + hit.collider.gameObject.name; destination = target.transform.position; target.rigidbody.freezeRotation = false; } if(hit.collider.tag == "Building"){ target = hit.collider.gameObject; targetDisplay.text = "Building: " + hit.collider.gameObject.name; } } } } } 

void FixedUpdate(){ if (Input.GetButtonDown ("Fire2") && target.tag == "Unit" && GUIUtility.hotControl == 0) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray,out hit)){ destination = hit.point; } } 

tTrans = target.transform.position; 
distance = Vector3.Distance (tTrans, destination); 
if(target.tag == "Unit"){ 
    if (distance > .2f) { 
     target.transform.LookAt (destination); 
     target.transform.position = Vector3.MoveTowards (target.transform.position, destination, speed); 
     target.rigidbody.freezeRotation = true; 
    } 
} 
} } 
+1

마우스가 아닌 게임 객체에서 나오는 레이 캐스트로 처리하려고합니다. 특히 SteamVR 컨트롤러. 나는 방아쇠를 누르고 그 안에있는 객체를 y 축인 로컬 공간으로 드래그하려고합니다. – OT2O

+0

안녕하세요. OT2O, StreamVR을 설치하고 돌아 가자. –

+0

행운이 있었나요? – OT2O