2017-06-21 103 views
0

我正在做一個對象跟隨我的手指的遊戲。但是如果我點擊屏幕上的任何地方,我不想讓對象跳到我的手指上。我正在使用光線投射來做到這一點。除非我的手指太快移動,物體會凍結,否則它會很好地工作。Raycast不工作​​在更新()Unity c#

我的理論是,因爲它在Update(),一旦我將手指從物體上移開,它就會檢測到我無法再拖動它。我不知道如何解決這個問題。

public GameObject Bigball; 
public GameObject Smallball; 

// Update is called once per frame 
void Update() 
    { 
    //lets ball follow finger 
     if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(0).phase 
     == TouchPhase.Stationary) 
    { 
     Touch touch = Input.GetTouch(0); 
     Vector3 fingerPos = touch.position; 
     RaycastHit hit; 
     Ray ray = Camera.main.ScreenPointToRay(fingerPos); 


     if (Physics.Raycast(ray, out hit) && (hit.collider.tag == "ball")) 
      { 
      Smallball.SetActive(false); 
      Bigball.SetActive(true); 
      Vector3 pos; 
      pos = new Vector3((Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)).x, 
      (Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)).y, 0); 
      Bigball.transform.position = pos; 
     } 
    } 

    else 
    { 
     Bigball.SetActive(false); 
     Smallball.SetActive(true); 
     Smallball.transform.position = new Vector3(Bigball.transform.position.x, Bigball.transform.position.y, 0); 
    } 


} 
+0

你可以使用ui拖拽,但也許只是給剛體增加速度有所幫助。 – Bijan

回答

0

當手指觸摸屏幕時,只有Raycast一次可能會更有意義。如果Raycast找到要拖動的對象,只要手指繼續觸摸屏幕,只需存儲該對象並將其移動到每個Update()的後面。

鬆開手指後,只要忘記物體,直到下一次觸摸找到要拖動的新物體。

另一種方法是根本不使用Raycast,而是建立在IBeginDragHandler,IDragHandler和IEndDragHandler上,正如Bijan已經提到的那樣。