我正在尝试创建一个脚本来“选择”Unity 中的对象。
当我将鼠标悬停在某个对象上时,它应该呈红色(确实如此),当我按 1 时,脚本的
targetHighlighted
将设置为我当时悬停在其上的对象。在 Debug.Log
中,这一切都正常,targetHighlighted
是正确的。
但是,当我按 1 时,
targetHighlighted
对象仍然为空。当我将鼠标悬停在对象上时是否按下它并不重要。
我的完整代码比这要广泛得多。但这段代码存在问题,所以我将其简化为:
using UnityEngine;
using System.Collections;
public class TargetSelectionScript : MonoBehaviour {
// Store the current selected gameobject
GameObject targetHighlighted;
Renderer rend;
Color initialColor = Color.white;
Color selectedColor = Color.red;
public GameControllerScript gameController;
void Update() {
if (Input.GetKeyDown("1")) {
SetTarget();
}
}
void OnMouseEnter() {
SelectTarget();
}
void OnMouseExit() {
ClearTarget();
}
void SelectTarget() {
RaycastHit hitInfo = new RaycastHit();
Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo);
targetHighlighted = hitInfo.transform.gameObject;
rend = targetHighlighted.GetComponent<Renderer>();
rend.material.color = selectedColor;
Debug.Log("Highlighted target: " + targetHighlighted);
}
void ClearTarget() {
Debug.Log(targetHighlighted);
}
void SetTarget() {
Debug.Log(targetHighlighted);
}
}
谁能向我解释为什么当我按“1”时
Debug.Log
不显示targetHighlighted
或targetSelected
?
基本上为什么
mouseenter
和 mouseexit
记录正确的对象,而 setTarget
函数却没有?
因为
"1"
下没有注册密钥
因此,您必须使用适当的
KeyCode
,
if (GetKeyDown(KeyCode.Alpha1))
SetTarget();
尝试这些改变:
GameObject targetHighlighted;
Renderer rend;
Color initialColor = Color.white;
Color selectedColor = Color.red;
public GameControllerScript gameController;
[SerializeField]
private bool targetSelected = false;
void Start() {
}
void Update() {
if (Input.GetKeyDown("1") && this.targetSelected == true) {
SetTarget();
}
}
void OnMouseEnter() {
SelectTarget();
}
void OnMouseExit() {
ClearTarget();
}
void SelectTarget() {
RaycastHit hitInfo;
Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo);
this.targetHighlighted = hitInfo.transform.gameObject;
rend = this.targetHighlighted.GetComponent < Renderer > ();
rend.material.color = selectedColor;
Debug.Log("Highlighted target: " + targetHighlighted);
this.targetSelected = true;
}
void ClearTarget() {
Debug.Log(this.targetHighlighted);
}
void SetTarget() {
Debug.Log(this.targetHighlighted);
}