C# 我如何知道使用Unity3D触碰了哪个游戏对象

C# 我如何知道使用Unity3D触碰了哪个游戏对象,c#,unity3d,augmented-reality,raycasting,C#,Unity3d,Augmented Reality,Raycasting,我正在使用Unity3D,我正在编程增强现实。如果我触摸屏幕,触摸的位置有一个物体,我会做一些事情。 其实我想“我怎么知道我碰了哪个游戏对象?” 我的代码在这里: using UnityEngine; using System.Collections; public class Atak : MonoBehaviour { private Animator anim; private GameObject kamera; // Use this for ini

我正在使用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);
        }
    }
}
使用UnityEngine;
使用系统集合;
公共类Atak:单一行为{
私人动画师;
私有游戏对象kamera;
//用于初始化
无效开始(){
anim=GetComponent();
kamera=GameObject.FindGameObjectWithTag(“kamera”);
}
//每帧调用一次更新
无效更新(){
多昆玛;
if(Physics.Raycast(kamera.transform.position,Input.mousePosition,10)&&
dokunma.collider.gameObject.tag==“Oyuncu”&&Input.GetMouseButtonDown(0)
){
anim.SetBool(“Bekle”,假);
anim.SetBool(“Saldir”,真);
}否则{
anim.SetBool(“Bekle”,真);
anim.SetBool(“Saldir”,假);
}
}
}
编辑给了我一个错误:

未赋值局部变量“dokunma”的使用


您没有为
dokunma
(RaycastHit)变量分配任何内容。请注意,您必须将
dokunma
变量传递给带有
out
关键字的
physical.Raycast
函数,以便对其进行初始化,并将光线投射的结果存储在其中

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);
            }
        }
    }
}

我发布的代码没有问题,我看不到您当前的代码。请将我的答案中新的
更新
功能复制到您的代码中,您的问题应该得到解决。谢谢您的回答,但我不使用主摄像头。我使用vuforia摄像头,但我无法使用camera.main.ScreenPointRoay。请检查我设置的启动功能e kamera.如果是这种情况,则将
Camera.main.ScreenPointToRay(Input.mousePosition)
替换为
kamera.GetComponent().ScreenPointToRay(Input.mousePosition);