2013-05-08 5 views
5

में बॉक्स कोलाइडर के अंदर है या नहीं, कृपया नीचे दी गई छवियां देखें।यह जांचना कि एक टच प्वाइंट एकता

enter image description here

enter image description here

पहली छवि में आप देख सकते है कि वहाँ बॉक्स कोलाइडर। दूसरी छवि कोड है जो खेल खेलते हैं से जुड़ा हुआ है (इसकी एक 3 डी पाठ)

using UnityEngine; 
using System.Collections; 

public class PlayButton : MonoBehaviour { 

    public string levelToLoad; 
    public AudioClip soundhover ; 
    public AudioClip beep; 
    public bool QuitButton; 
    public Transform mButton; 
    BoxCollider boxCollider; 

    void Start() { 
     boxCollider = mButton.collider as BoxCollider; 
    } 

    void Update() { 

     foreach (Touch touch in Input.touches) { 

      if (touch.phase == TouchPhase.Began) { 

       if (boxCollider.bounds.Contains (touch.position)) { 
        Application.LoadLevel (levelToLoad); 
       } 
      }     
     } 
    } 
} 

मैं अगर स्पर्श बिंदु के अंदर है देखना चाहता हूँ है जब मैं एंड्रॉयड डिवाइस

यहाँ पर कोड चलाने है कोलाइडर या नहीं। मैं ऐसा इसलिए करना चाहता हूं क्योंकि अभी अगर मैं दृश्य पर किसी भी स्थान पर क्लिक करता हूं। लोडलोड (स्तर टोलोड); कहा जाता है।

अगर मैं केवल PLAY गेम टेक्स्ट पर क्लिक करता हूं तो मैं इसे कॉल करना चाहता हूं। क्या कोई मुझे कोड के इस टुकड़े से मदद कर सकता है या मुझे मेरी समस्या का एक और समाधान दे सकता है ?? Heisenbug के तर्क

void Update() { 

foreach(Touch touch in Input.touches) { 

    if(touch.phase == TouchPhase.Began) { 

     Ray ray = camera.ScreenPointToRay(new Vector3(touch.position.x, touch.position.y, 0)); 
     RaycastHit hit; 

     if (Physics.Raycast(ray, out hit, Mathf.Infinity, 10)) { 
      Application.LoadLevel(levelToLoad);    
     }   
    } 
} 
} 

उत्तर

5

टच की स्थिति प्रणाली (एक Vector2) समन्वय स्क्रीन स्थान में व्यक्त किया है का पालन करके


हाल कोड। दृश्य में वस्तुओं के अन्य 3 डी स्थानों के मुकाबले इसकी तुलना करने की कोशिश करने से पहले आपको उस स्थिति को विश्व अंतरिक्ष समन्वय प्रणाली में परिवर्तित करने की आवश्यकता है।

Unity3D ऐसा करने की सुविधा प्रदान करता है। चूंकि आप एक BoundingBox अपने पाठ आसपास के प्रयोग कर रहे हैं, तो आप निम्न कर सकते हैं:

  • एक Ray जो मूल स्पर्श बिंदु स्थिति में है बनाएँ और किस दिशा में कैमरा आगे अक्ष (Camera.ScreenPointToRay) के समानांतर है।
  • जांचें कि क्या किरण आपके GameObject (Physic.RayCast) के BoundingBox को छेड़छाड़ करती है या नहीं।

कोड ऐसा ही कुछ लग सकता है:

Ray ray = camera.ScreenPointToRay(new Vector3(touch.position.x, touch.position.y, 0)); 
RaycastHit hit; 
if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerOfYourGameObject)) 
{ 
    //enter here if the object has been hit. The first hit object belongin to the layer "layerOfYourGameObject" is returned. 
} 

यह अपने "प्ले खेल" GameObject के लिए एक विशिष्ट परत जोड़ने के लिए, क्रम रे केवल यह के साथ टकराने बनाने के लिए सुविधाजनक है।


संपादित

कोड और ऊपर स्पष्टीकरण ठीक है। यदि आपको उचित टक्कर नहीं मिलती है तो आपने सही परत का उपयोग नहीं किया है। इस समय मेरे पास टच डिवाइस नहीं है। निम्नलिखित कोड माउस के साथ काम करेगा (परतों का उपयोग किए बिना)।

using UnityEngine; 
using System.Collections; 

public class TestRay : MonoBehaviour { 

    void Update() { 

     if (Input.GetMouseButton(0)) 
     { 
      Vector3 pos = Input.mousePosition; 
      Debug.Log("Mouse pressed " + pos); 

      Ray ray = Camera.mainCamera.ScreenPointToRay(pos); 
      if(Physics.Raycast(ray)) 
      { 
       Debug.Log("Something hit"); 
      } 

     } 
    } 

} 

यह आपको सही दिशा में रखने का एक उदाहरण है। अपने मामले में क्या गलत हो रहा है या SSCCE पोस्ट करने का प्रयास करने का प्रयास करें।

+0

मैंने जो किया वह यह है कि, चयनित 3 डी टेक्स्ट और इंस्पेक्टर में निर्दिष्ट परत को चुना गया।परत संख्या 8 थी। इसके बाद मैंने पैरामीटर layerOfYourGameObject को 8 के रूप में पास कर दिया और कोड चलाया लेकिन फिर भी टक्कर नहीं हो रही है। मैंने ऊपर दिए गए प्रश्न में कोड संलग्न किया है। –

+0

अगर मुझे 3 डी टेक्स्ट में परत जोड़ने के बारे में गलत है तो कृपया मुझे सही करें। 1) 3 डी टेक्स्ट का चयन करें। 2) इंस्पेक्टर में AddLayer गया और PlayGameLayer में यूनिटी लेयर 10 नाम दिया। 3) इंस्पेक्टर टैग = अनगैग और लेयर = PlayGameLayer में। 4) उपरोक्त कोड वाली स्क्रिप्ट PlayGame 3d टेक्स्ट से जुड़ी है। क्या यह सही तरीका है? यदि हां तो क्या गलत हो सकता है? –

+0

@ जवाद अमजद: क्या आपने उसी गेम ऑब्जेक्ट पर बाउंडिंग बॉक्स संलग्न किया है जिसने टेक्स्ट घटक संलग्न किया है? – Heisenbug

संबंधित मुद्दे