2017-02-24 9 views
0

こんにちは皆私はKinect MovmementとCsharp言語をベースにしたサッカーゲームに取り組んでいます。制限方法3Dマップでカーソルのように機能するボタンUnity3D

私はUIボタンを持っており、スタジアムである3Dモデルにあるキャンバス キャンバスの下に円のようにしています。

ボタンはカーソルのように機能し、キネクトを再生するプレーヤーの右手とオリジナルのボタンであるカーソルとの間で同期するスクリプトで翻訳します。

大丈夫この2Dの他のシーンから3Dのシーンに移動しているときはちょうど良いことですが、この位置でカーソルが動いているのを見つけました-12125.34 , -3132.932 , -1、 先例にあったあなたは私を理解していない場合は、ちょうどあなたがKinectの前方にあなたの右手を動かし、あなたが同じ手でオブジェクトを移動すると思い -616 , 288 , -1

この位置に2Dのあるシーンは 私はそのistrictionのために書いたコードは、ということです

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class HandController : MonoBehaviour { 

    public static HandController Instance; 

    private Vector2 initialPosition;//body initial position 

    public GameObject cursorObject; 
    private bool cursorEnter = false; 

    private float delay ; 
    private float timeing; 
    private float firstContactTime; 
    private string[] flagsTable = new string [] { 
     "Tunisia", "Maroco","Austria", "Belgium", "cameroon", 
     "cote_d_ivoire", "Egypt","france", "guini", "jordan", 
     "liberia", "madagascar","mali", "mauritius", "moldova", 
     "romanie", "Slovakie","Spain", "United_kingdom", "Vanuatu", 
     "polgne" 
    }; 


    private bool checkingFlagsTableDone = false; 
    public static bool flagsFound = false; 
    public static string countryChoosingName = ""; 
    public Button btnSelected; 
    public string buttonSelected = ""; 
    public Button myCursor; 
    public Image myCursorImage; 

    void Awake() 
    { 
     Instance = this; 

    } 
    void Start() { 

     DontDestroyOnLoad(transform.root.gameObject); 
     // var vertExtent = Camera.main.camera.orthographicSize; 
     //var horzExtent = vertExtent * Screen.width/Screen.height; 

    } 
    public int offstX= 937; 
    public int offstY= 520; 

    bool isInited=false; 

    void Update() { 
     float initialXposition = transform.localPosition.x; 
     float initialYposition = transform.localPosition.y; 
     float nextXposition=0; 
     float nextYposition=0; 

     KinectManager manager = KinectManager.Instance; 

     if (DepthImageViewer.Instance.jointColliders != null) 
     { 
      if (manager.Player1Calibrated && isInited == false) 
      { 
       isInited = true; 
       nextXposition = transform.localPosition.x; 
       nextYposition = transform.localPosition.y; 
       if (initialXposition != nextXposition && initialYposition != nextYposition) 
       { 
        // Debug.Log("I moved the cursor the the initial pisition"); 
       } 
       //else 
        // Debug.Log("Sorry I didn't translate the cursor"); 
      } else if (manager.Player1Calibrated && isInited == true) 
      { 
       float XvalueAre = DepthImageViewer.Instance.jointColliders[11].transform.localPosition.x * 192.0f + 184430.4f + offstX; 
       float YvalueAre = DepthImageViewer.Instance.jointColliders[11].transform.localPosition.y *108.0f + 58832.1f + offstY; 


      Vector2 newPos = new Vector2(XvalueAre - offstX, YvalueAre - offstY); 
       transform.position = new Vector3(newPos.x,newPos.y,-1); 
      } 
     } 
     else { Debug.Log("Erreur remplir joints colliders "); } 
     /////////////////////////////////////////////Delay Time Over Button ///////////////////////////////////////////// 


     if (cursorEnter == true) { 
      delay = Time.time - firstContactTime; 
      //Debug.Log("waiting time is => " + delay); 
      myCursorImage .fillAmount = 1 - (delay/3) ; 
      if (delay > 3) { 

       if (currentBtn != null) { 
        CheckOnOverButtonName(currentBtn.name); 

        Debug.Log("Button Name => " + currentBtn.name); 
        if (flagsFound == true) 
        { 
         Debug.Log("the country choose is => " + countryChoosingName); 
         currentBtn.onClick.Invoke(); 
         myCursorImage.fillAmount = 1; 
         cursorEnter = false; 
         buttonSelected = countryChoosingName; 
        } 
        Debug.Log("the country choose is => " + currentBtn.name); 
        currentBtn.onClick.Invoke(); 
        myCursorImage.fillAmount = 1; 
        cursorEnter=false; 
       } 
      } 
     } 

    } 

    Button currentBtn; 
    void OnTriggerEnter2D(Collider2D coll) 
    { 
     firstContactTime = Time.time; 
     cursorEnter = true; 
     currentBtn = coll.GetComponent<Button>(); 
    } 

    void OnTriggerExit2D(Collider2D other) 
    { 
     cursorEnter = false; 
     flagsFound = false; 
     countryChoosingName = ""; 
     checkingFlagsTableDone = false; 
    } 


    void CheckOnOverButtonName(string buttonName) 
    { 
     for(int i = 0 ; i < flagsTable.Length ; i++){ 
      if (string.Compare(flagsTable[i],buttonName) == 0) { 
       flagsFound = true; 
       countryChoosingName = flagsTable[i]; 
       if (i == flagsTable.Length) { 
        checkingFlagsTableDone = true; 
       } 
      } 
     } 
    } 
} 
+0

こんにちはを使用した後、問題をsloveが、私はまだ...あなたが持っている何が起こっているか理解するトラブルを抱えています2dで、あなたのKinectムーブメントと同期して移動するUIボタン?また、「制限」とはどういう意味ですか? – Maakep

+0

私はあなたが2Dと同じサイズを持っている直交カメラを使用したと仮定します。 3Dに切り替えるときは、カメラから遠ざかるほど大きなずれがあると考える必要があります。 –

答えて

0

こんにちは、私は私はそれをもう少し明確にするためにあなたは非常に頻繁に書いたテキストを編集し、Mathf.Clamp

float XvalueAre = DepthImageViewer.Instance.jointColliders[11].transform.localPosition.x * 192.0f + 184430.4f + offstX; 
        float YvalueAre = DepthImageViewer.Instance.jointColliders[11].transform.localPosition.y * 108.0f + 58832.1f + offstY; 

        float x = Mathf.Clamp(XvalueAre, 0.0f,1024.0f); 
        float y = Mathf.Clamp(YvalueAre, 0.0f,768.0f); 
        transform.position = new Vector3(x, y, -1); 
関連する問題