我正在Unity的一个小型学校项目中为我的IT课程。 我在Unityscript中创建了一个脚本,当光线投射命中并使用特定标记对象时,该脚本显示特定的GUI。我还希望它在光线投射到物体对撞机时立即将材质颜色更改为黄色。这是我设法做的部分。 现在我希望我的脚本在光线投射停止撞击对象colider时将颜色更改为白色,但我想不出有任何方法可以做到这一点。
有人可以帮我吗?提前谢谢!
这是我的代码 - 我知道它很乱,但这是我第一次编写任何更复杂的代码。
啊,因为我只测试它,所以材料更改只在“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 ");
}
}
答案 0 :(得分:1)
在Update函数中,您可以将当前对象以黄色保存在变量highlightGameObject中,并将其与最后突出显示的游戏对象进行比较。如果它们不同,请将最后一个变为白色;通过将highlightedGameObject保存在变量lastHighlightedGameObject中来结束该函数。
var highlightedGameObject;
var lastHighlightedGameObject;
function Update () {
[...]
highlightedGameObject = hit.collider.gameObject;
highlightedGameObject.renderer.material.color = Color.yellow;
[...]
if (highlightedGameObject != lastHighlightedGameObject && lastHighlightedGameObject != null) {
lastHighlightedGameObject.renderer.material.color = Color.white;
}
lastHighlightedGameObject = highlightedGameObject;
}
我希望帮助=)