我正在尝试以统一方式创建一个选择对象脚本。
它应该做的是当我将鼠标悬停在一个物体上时,它会变成红色(并且确实如此),当我按下" 1" GameObject的targetHighlighted
将填充我当时悬停的对象。在Debug.Log
中,一切正常,targetHighlighted
已填满。
当我按下" 1"但是targetHighlighted
对象仍然是空的。如果我将鼠标悬停在物体上或远离物体时按下它并不重要。
我的完整代码比这更广泛。但是这部分代码包含了这个问题,所以我将其减少到了这一点。
任何人都可以向我解释当我按下" 1" Debug.Log
没有显示targetHighlighted
或targetSelected
?
基本上为什么mouseenter
和mouseexit
会记录正确的对象,但setTarget
函数没有?
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 Start() {
}
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);
}
}
答案 0 :(得分:0)
因为在"1"
因此,您必须使用适当的KeyCode
,
if (GetKeyDown(KeyCode.Alpha1))
SetTarget();
答案 1 :(得分:0)
尝试以下更改:
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);
}