首页 文章

如何检测游戏对象上的触摸

提问于
浏览
4

我正在使用Unity for iOS设备开发游戏 . 我已经实现了以下触摸代码:

void Update () {
    ApplyForce ();
}

void ApplyForce() {

    if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) {
        Debug.Log("Touch Occured");     
    }
}

我把这个脚本拖到我的游戏对象上,这是一个球体 . 但无论我触摸哪里,都会显示日志消息 . 我只想在用户触摸对象时检测触摸 .

2 回答

  • 2

    将代码粘贴在相机中,或其他会在您设计的级别中保留的代码 . 它可以是任何东西,甚至是空的游戏对象 . 唯一重要的是它只在你的关卡中存在ONCE,否则你将同时运行多个触摸检查,这将导致系统上一些严重的负载 .

    void Update () {
        if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) 
        {
            Ray ray = Camera.main.ScreenPointToRay( Input.GetTouch(0).position );
            RaycastHit hit;
    
            if ( Physics.Raycast(ray, out hit) && hit.transform.gameObject.Name == "myGameObjectName")
            {
                hit.GetComponent<TouchObjectScript>().ApplyForce();  
            }
        }
    }
    

    在上面的脚本中, hit.transform.gameObject.Name == "myGameObjectName" 可以替换为您要检查由光线投射命中的对象是您要应用力的对象的任何其他方法 . 一个简单的方法是使用标签 .

    另外要记住的是,光线投射将来自您的相机(相对于手指触摸的位置)并使用对撞机击中第一个物体 . 因此,如果您的对象隐藏在其他内容之后,您将无法触及它 .

    还将脚本放在您的触摸对象中(在此示例中,称为TouchObjectScript.cs)

    void Update () {
    }
    
    public void ApplyForce() {
    
            Debug.Log("Touch Occured");   
    }
    

    如果事情不明确,或者您需要任何进一步的帮助,请发表评论,我会回复您 .

  • 16

    最好的方法是添加:

    void OnMouseDown () {}
    

    到想要点击的游戏对象 . 这个问题是你不能同时按两件事 .

相关问题