统一触摸控制与UI图像

问题描述 投票:0回答:2

我编写了一个多点触控系统,可以与具有 collider2d 的对象正常工作(将它们用作按钮),并且我可以在 Android 手机中移动播放器。

但是当我使用 UI 画布系统中的图像并将此代码添加到图像中时,它不会检测到任何内容。

这是我的代码:

using UnityEngine;
using System.Collections;

public class Jump : MonoBehaviour {

    public float jumpForce;
    private GameObject hero; 

    void Start () {
        hero = GameObject.Find("hero"); 
    }

    void Update () {

        if (Input.touchCount > 0)
        {
            Touch[] myTouches = Input.touches;
            for(int i = 0; i < Input.touchCount; i++)
            {
                if(Input.GetTouch(i).phase == TouchPhase.Began)
                {
                    CheckTouch(Input.GetTouch(i).position, "began");
                }
                else if (Input.GetTouch(i).phase == TouchPhase.Ended)
                {
                    CheckTouch(Input.GetTouch(i).position, "ended");
                }
            }
            
        }
    }

    void CheckTouch (Vector3 pos, string phase)
    {
        
        Vector3 wp = Camera.main.ScreenToWorldPoint (pos);
        Vector2 touchPos = new Vector2 (wp.x, wp.y);
        
        Collider2D hit = Physics2D.OverlapPoint(touchPos);

        if(hit.gameObject.name == "JumpButton" && hit && phase == "began")
        {
            hero.rigidbody2D.AddForce(new Vector2(0f, jumpForce));  //Add jump force to hero
            audio.Play ();
        }
    }
}
c# android unity-game-engine multi-touch
2个回答
2
投票

对于画布中的图形项目,您需要使用 GraphicRaycaster 而不是使用 UnityEngine.UI 的Physics2D


1
投票

您不再需要亲自处理触摸问题。只需实现 IPointerClickHandler 接口并确保场景中存在 EventSystem 和适当的光线投射器。

© www.soinside.com 2019 - 2024. All rights reserved.