簡體   English   中英

觸摸拖動 android UI

[英]Drag by touch android UI

我在 canvas 上的 UI 圖像有問題,android 統一,object 不遵循精確的觸摸坐標,它略微移動,但不足以實際發揮作用

我嘗試了一切,包括創建一個顯然按預期工作但沒有來自 UI 的圖像的新項目,僅通過將精靈移動到場景

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

public class DragScript : MonoBehaviour{

//offset dotkniecia objektu
float deltaX, deltaY;

//dostep do komponentu rigibody
Rigidbody2D rb;

//bool do dostepu poruszania pilki
bool moveAllowed = false;

void Start()
{
    rb = GetComponent<Rigidbody2D>();
}

void Update(){

    /// <summary>
    /// inicjowanie zdarzenia dotykowego
    /// jezeli ma miejsce zdarzenie dotykowe czyli jest > 0
    /// </summary>
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);

        // uzyskuje pozycje dotykowe
        Vector2 touchPos = Camera.main.ScreenToWorldPoint(touch.position);

        //przetwarzanie faz dotykowych
        switch (touch.phase)
        {
            //jezeli dotykasz ekranu
            case TouchPhase.Began:
                Debug.Log("DOTKNALES PALCEM WTFF");
                // jezeli dotkniesz elementu
                if (GetComponent<BoxCollider2D>() == Physics2D.OverlapPoint(touchPos)){

                    Debug.Log("DZIALA IF");
                    /// <summary>
                    /// pobierz offset pomiedzy pozycjami ktore dotkniesz
                    /// i srodek objektu gry
                    /// </summary>
                    deltaX = touchPos.x - transform.position.x;
                    deltaY = touchPos.y - transform.position.y;

                    /// <summary>
                    /// jezeli dotyk zaczyna sie w ciagu colidera obiektu
                    /// wtedy może się poruszać
                    /// </summary>
                    moveAllowed = true;

                    /// <summary>
                    /// ogranicza troche rigibody aby sie poruszał
                    /// bardziej płynnie i poprawnie
                    /// </summary>
                    //rb.mass = 1;
                    rb.freezeRotation = true;
                    //rb.velocity = new Vector2(0, 0);
                    rb.gravityScale = 0;
                    GetComponent<PolygonCollider2D>().sharedMaterial = null;
                }
                break;
            // Gdy przesuwasz palcem po ekranie
            case TouchPhase.Moved:
                // jezeli przesuwam obiekt i moveallowed = true
                if (GetComponent<BoxCollider2D>() == Physics2D.OverlapPoint(touchPos) && moveAllowed)
                {   
                    rb.MovePosition(new Vector2(touchPos.x - deltaX, touchPos.y - deltaY));
                }
                break;

            // puszczasz palce
            case TouchPhase.Ended:
                Debug.Log("KONIEC");
                moveAllowed = false;
                //rb.mass = 17;
                rb.freezeRotation = false;
                rb.gravityScale = 45;
                break;
        }
    }
}

}

它必須用手指移動 UI 圖像 沒有錯誤消息 它只是不能正確移動

該腳本附加到層次結構中的錯誤 object。 您需要將其附加到 Canvas 而不是圖像。 該腳本使用它所在的 object 的變換。 因此,如果您將其放在孩子身上,則父 object 將不會跟隨。

要解決此問題,請嘗試將腳本添加到 canvas。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM