我正在为我的学校创建一个项目,到目前为止,这个项目进行得还不错。我已经搜索了将近一个小时的答案,但仍然找不到任何东西(错误的标签?)。
事情是,我想显示的项目的名字,球员是击中的射线广播。我试过了,但遗憾的是,它不起作用:
#pragma strict
var rayLength : int = 10;
private var inventory : Inventory;
private var guiShow : boolean = false;
var bush : GameObject;
var player : GameObject;
function Start()
{
inventory = GameObject.Find("First Person Controller").GetComponent(Inventory);
}
function Update()
{
var hit : RaycastHit;
var forward = transform.TransformDirection(Vector3.forward);
if(Physics.Raycast(transform.position, forward, hit, rayLength))
{
if(hit.collider.gameObject.tag == "Wood")
{
guiShow = true;
if(Input.GetKeyDown("e"))
{
inventory.wood++;
Destroy(hit.collider.gameObject);
guiShow = false;
}
}
else if(hit.collider.gameObject.tag == "Sticks")
{
guiShow = true;
if(Input.GetKeyDown("e"))
{
inventory.stick++;
Destroy(hit.collider.gameObject);
guiShow = false;
}
}
else if(hit.collider.gameObject.tag == "BushFull")
{
guiShow = true;
bush = (hit.collider.gameObject);
if(Input.GetKeyDown("e"))
{
inventory.berry += 5;
bush.GetComponent(BushController).berriesTaken = true;
guiShow = false;
}
}
else
{
guiShow = false;
}
}
else
{
guiShow = false;
}
}
function OnGUI()
{
if(guiShow == true)
{
GUI.Box(Rect(Screen.width / 2, Screen.height / 2, 100, 25), "Pick up" + hit.collider.gameObject);
}
}如果有人知道答案-请帮帮我。提前感谢!
发布于 2015-02-06 11:14:49
只需使用hit.collider.name检索游戏对象的名称。如果这不起作用(我99%肯定会起作用),请使用hit.collider.gameObject.name
发布于 2015-02-06 11:16:29
您的代码有点棘手,因为不使用OnGUI()方法可能是个更好的主意。当光线投射击中播放机时,从更新中调用自定义方法会更容易。
更容易实现的一个例子是:
function Update()
{
var hit : RaycastHit;
var forward = transform.TransformDirection(Vector3.forward);
if(Physics.Raycast(transform.position, forward, hit, rayLength))
{
Debug.Log (hit.collider.gameObject.name); //Shows the hittenGo in the console
drawColliderName(hit.collider.gameObject.name);
if (hit.collider.gameObject.tag == "Woods")
{
//do Woods tuff
}
else if (hit.collider.gameObject.tag == "Sticks")
{
//do Sticks stuff
}
else if (hit.collider.gameObject.tag == "BushFull")
{
//do BushFull stuff
}
}
}当然,您必须实现drawColliderName方法,在该方法中必须在GUI上绘制Collider名称。
如果您只想让代码工作,那么在OnGUI()中,您必须调用name变量,就像在我的代码的Debug.Log调用中一样,这只是调用hit.collider.gameObject.name而不是hit.collider.gameObject
https://stackoverflow.com/questions/28364063
复制相似问题