使用Physics.Raycast时无法获取击中物体

问题描述 投票:0回答:2

我正在尝试创建一个脚本来“选择”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
函数却没有?

c# unity-game-engine
2个回答
0
投票

因为

"1"

下没有注册密钥

因此,您必须使用适当的

KeyCode

if (GetKeyDown(KeyCode.Alpha1))
    SetTarget();

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.