2015-09-29 3 views
0

Я пытаюсь создать сценарий выбора объекта в единстве.Почему мой объект не заполнен

Что нужно сделать, когда я навешиваю на объект его красный цвет (и он делает), и когда я нажимаю «1», GameObject's 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

Поскольку ни одна клавиша не зарегистрирована под "1"

по этой причине, вы должны прибегнуть к помощи соответствующего KeyCode,

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

Благодарности к вы ответили, но это не так. Если я нажму 1, я получу debug.log в консоли, только не значение fortargetHighlighted – Derooie

+0

, что он регистрирует? – maksymiuk

+0

gameobject мыши входит и выходит. так как я только заполняю значение targetHighlighted и никогда не очищаю его (там только debug.log), я ожидаю, что gameobject будет возвращен также при нажатии «1». Добавлена ​​запись в журнал, но с пустым игровым объектом вместо заданного игрового объекта. – Derooie

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