我怎么知道用Unity3D触摸了哪个游戏对象

时间:2016-10-05 22:50:31

标签: c# unity3d augmented-reality raycasting

我正在使用Unity3D,我编程增强现实。如果我触摸屏幕并且触摸的位置有一个物体,我会做一些事情。 其实我想要“我怎么知道触摸了哪个游戏对象?”

我的代码在这里:

    using UnityEngine;
using System.Collections;

public class Atak : MonoBehaviour {
    private Animator anim;
    private GameObject kamera;

    // Use this for initialization
    void Start () {
        anim = GetComponent<Animator> ();
        kamera = GameObject.FindGameObjectWithTag ("Kamera");
    }

    // Update is called once per frame
    void Update () {
        RaycastHit dokunma;
        if (Physics.Raycast(kamera.transform.position,Input.mousePosition,10)&&
            dokunma.collider.gameObject.tag=="Oyuncu" && Input.GetMouseButtonDown(0)
        ){

            anim.SetBool ("Bekle", false);
            anim.SetBool ("Saldir", true);
        } else{
            anim.SetBool ("Bekle", true);
            anim.SetBool ("Saldir", false);
        }
    }
}

编辑给了我错误:

  

使用未分配的局部变量'dokunma'

1 个答案:

答案 0 :(得分:1)

您没有为dokunma(RaycastHit)变量指定任何内容。请注意,您必须使用dokunma关键字将Physics.Raycast变量传递给out函数,以便初始化它并将光线投影的结果存储在其中。

void Update()
{
    Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit dokunma;
    if (Physics.Raycast(rayCast, out dokunma, 10) &&
        dokunma.collider.gameObject.tag == "Oyuncu" && Input.GetMouseButtonDown(0)
    )
    {

        anim.SetBool("Bekle", false);
        anim.SetBool("Saldir", true);
    }
    else
    {
        anim.SetBool("Bekle", true);
        anim.SetBool("Saldir", false);
    }
}

在执行光线投射之前先检查按键是否更有意义。始终使用CompareTag函数来比较标记。下面的内容应该这样做。

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit dokunma;
        if (Physics.Raycast(rayCast, out dokunma, 10))
        {
            if (dokunma.collider.CompareTag("Oyuncu"))
            {

                anim.SetBool("Bekle", false);
                anim.SetBool("Saldir", true);
            }
            else
            {
                anim.SetBool("Bekle", true);
                anim.SetBool("Saldir", false);
            }
        }
    }
}