[英]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.