【发布时间】:2015-04-24 15:37:33
【问题描述】:
我正在 Unity 中为我的 IT 课程开展一个小型学校项目。 我在 Unityscript 中创建了一个脚本,当光线投射命中并带有特定标签的对象时,它会显示特定的 GUI。我还希望它在光线投射到对象对撞机后立即将材质颜色更改为黄色。这是我设法做到的部分。 现在我希望我的脚本在光线投射停止撞击物体碰撞器时将颜色改回白色,但我想不出任何方法来做到这一点。
谁能帮帮我?提前致谢!
这是我的代码 - 我知道它很乱,但这是我第一次编写更复杂的代码。
啊,因为我只是在测试它,所以材料变化只在“Wood”标签上。
感谢 Romain Soual 的工作代码:
#pragma strict
var rayLength : int = 2;
private var inventory : Inventory;
private var showGUI : boolean = false;
var bush : GameObject;
var player : GameObject;
var objHit : 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")
{
objHit = hit.collider.gameObject;
showGUI = true;
objHit.collider.gameObject.renderer.material.color = Color.yellow;
if(Input.GetKeyDown("e"))
{
inventory.wood++;
Destroy(hit.collider.gameObject);
showGUI = false;
}
}
else if(hit.collider.gameObject.tag == "Sticks")
{
showGUI = true;
if(Input.GetKeyDown("e"))
{
inventory.stick++;
Destroy(hit.collider.gameObject);
showGUI = false;
}
}
else if(hit.collider.gameObject.tag == "BushFull")
{
showGUI = true;
bush = (hit.collider.gameObject);
if(Input.GetKeyDown("e"))
{
inventory.berry += 5;
bush.GetComponent(BushController).berriesTaken = true;
showGUI = false;
}
}
else if(hit.collider.gameObject.tag == "Stones")
{
showGUI = true;
if(Input.GetKeyDown("e"))
{
inventory.stone++;
Destroy(hit.collider.gameObject);
showGUI = false;
}
}
else if(hit.collider.gameObject.tag == "Pickaxe")
{
showGUI = true;
if(Input.GetKeyDown("e"))
{
inventory.pickaxe++;
Destroy(hit.collider.gameObject);
showGUI = false;
}
}
else if(hit.collider.gameObject.tag == "Axe")
{
showGUI = true;
if(Input.GetKeyDown("e"))
{
inventory.axe++;
Destroy(hit.collider.gameObject);
showGUI = false;
}
}
else
{
objHit.collider.gameObject.renderer.material.color = Color.white;
showGUI = false;
}
}
else
{
objHit.collider.gameObject.renderer.material.color = Color.white;
showGUI = false; //jesli gracz oddali sie od obiektu to okienko "pick up" znika
}
}
function OnGUI()
{
if(showGUI == true)
{
GUI.Box(Rect(Screen.width / 2, Screen.height / 2, 100, 25), "Pick up ");
}
}
【问题讨论】:
标签: user-interface unity3d unityscript