为什么我的对象没有填充

时间:2015-09-29 21:59:43

标签: unity3d unityscript

我正在尝试以统一方式创建一个选择对象脚本。

它应该做的是当我将鼠标悬停在一个物体上时,它会变成红色(并且确实如此),当我按下" 1" GameObject的targetHighlighted将填充我当时悬停的对象。在Debug.Log中,一切正常,targetHighlighted已填满。

当我按下" 1"但是targetHighlighted对象仍然是空的。如果我将鼠标悬停在物体上或远离物体时按下它并不重要。

我的完整代码比这更广泛。但是这部分代码包含了这个问题,所以我将其减少到了这一点。

任何人都可以向我解释当我按下" 1" Debug.Log没有显示targetHighlightedtargetSelected

基本上为什么mouseentermouseexit会记录正确的对象,但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);
    }
}

2 个答案:

答案 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);
}