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