Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从RaycastHit获取游戏对象_C#_Unity3d_Unityscript - Fatal编程技术网

C# 从RaycastHit获取游戏对象

C# 从RaycastHit获取游戏对象,c#,unity3d,unityscript,C#,Unity3d,Unityscript,我正在使用此代码,但不幸的是,我遇到了以下错误: CS1061:类型UnityEngine.RaycastHit'不包含gameObject'的定义,并且找不到类型UnityEngine.RaycastHit'的扩展方法gameObject'(是否缺少using指令或程序集引用 选择公共浮动; 公共游戏对象[]处理程序; 公开浮动[]价格; 公共游戏对象磁砖; 私人资金; //用于初始化 无效开始(){ mon=GameObject.Find(“Gamelogic”).GetComponent(

我正在使用此代码,但不幸的是,我遇到了以下错误:

CS1061:类型
UnityEngine.RaycastHit'不包含
gameObject'的定义,并且找不到类型
UnityEngine.RaycastHit'的扩展方法
gameObject'(是否缺少using指令或程序集引用

选择公共浮动;
公共游戏对象[]处理程序;
公开浮动[]价格;
公共游戏对象磁砖;
私人资金;
//用于初始化
无效开始(){
mon=GameObject.Find(“Gamelogic”).GetComponent();
}
//每帧调用一次更新
无效更新(){
Ray-Ray=Camera.main.screenpointoray(输入.鼠标位置);
雷卡斯特击中;
if(Physics.Raycast(光线,外击,20))
{
if(hit.transform.tag==“tiles”)
{
Tile=hit.gameObject;
}
其他的
{
Tile=null;
}
}
if(Input.GetMouseButtonDown(0)&&Tile!=null)
{
}
}
}

这是我使用的一个函数,您应该能够轻松地调整它

GameObject GetClickedGameObject() 
{ 
    // Builds a ray from camera point of view to the mouse position 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 
    // Casts the ray and get the first game object hit 
    if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) 
    {

        Instantiate (clickMarker,hit.point,Quaternion.identity); //places clickMarker at hit.point. This isn't needed, just there for visualisation. 
        return hit.transform.gameObject;
    }
    else 
        return null; 
}
我认为你的基本问题是

Tile = hit.gameObject;
需要

Tile = hit.transform.gameObject;
此外:


请注意这种方式,它有一个内置的layerMask,因此您不需要执行if(hit.transform.tag==“tiles”)

更简单、更简短,您始终可以执行以下操作:

hit.collider.gameObject.name
它将返回您击中的对象的名称标签。 然后,你可以做逻辑检查和任何你想做的信息

更多文档请点击此处:


错误消息很清楚:在
Tile=hit.gameObject
行中,
hit
对象的类型(
RaycastHit
)不包含名为
gameObject
的字段、属性或方法。请查看文档以查看该类的可用公共成员。我检查了它,但在这件事上找不到任何内容。我认为您需要
hit.transform.gameObject
而不是
hit.gameObject
。顺便说一句,这里有几乎相同的问题蒂安:@FalconUA你是冠军
if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) 
hit.collider.gameObject.name