【问题标题】:How to select and deselect in a crossword game如何在填字游戏中选择和取消选择
【发布时间】:2019-01-13 10:35:25
【问题描述】:

所以,我在 Unity Engine 中进行填字游戏,当我选择(用我的左键单击)一个单词时,白色的瓷砖应该变成绿色(发生这种情况),但是当我停止按住鼠标左键时,正如您在打印件上看到的那样,它不会再次变白

代码在这里:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using System; 

public class Selecionar : MonoBehaviour, ISelectHandler, IPointerClickHandler, IDeselectHandler {

private int acertos;
public static HashSet<Selecionar> todosMeusSelecionaveis = new HashSet<Selecionar>();
public static HashSet<Selecionar> selecionado = new HashSet<Selecionar>();

Renderer myRenderer;

[SerializeField]
Material materialNaoSelecionado;
[SerializeField]
Material materialSelecionado;


void Awake()
{
    todosMeusSelecionaveis.Add(this);
    myRenderer = GetComponent<Renderer>();
}

public void OnDeselect(BaseEventData eventData)
{
    myRenderer.material = materialNaoSelecionado;
}

public void OnPointerClick(PointerEventData eventData)
{
    if(Input.GetKeyDown(KeyCode.Mouse0)){
        DeselectAll(eventData);
    }
    OnSelect(eventData);
}

public void OnSelect(BaseEventData eventData)
{
    selecionado.Add(this);
    myRenderer.material = materialSelecionado;
}
public static void DeselectAll (BaseEventData eventData){
    foreach (Selecionar selecionavel in selecionado)
    {
        selecionavel.OnDeselect(eventData);
    }
    selecionado.Clear();
  }


}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我认为你应该在OnPointerClick 上的if 语句中使用return。当它进入时,它执行DeselectAll,后跟OnSelect

    要么做:

    public void OnPointerClick(PointerEventData eventData)
    {
        if(Input.GetKeyDown(KeyCode.Mouse0)){
            DeselectAll(eventData);
            return; // <----
        }
        OnSelect(eventData);
    }
    

    或:

    public void OnPointerClick(PointerEventData eventData)
    {
        if(Input.GetKeyDown(KeyCode.Mouse0)){
            DeselectAll(eventData);
        } else {
            OnSelect(eventData);
        }
    }
    

    【讨论】:

    • 不,它不起作用,遗憾的是,当我停止按住鼠标左键时,绿色瓷砖仍然呈绿色
    • 您有像MouseKeyUpMouseKeyDown 这样的事件处理程序吗?我会尝试处理它们而不是MouseClick。也许你的Input.GetKeyDown(KeyCode.Mouse0) 永远不会得到true
    • 事件处理程序?以及如何使用 MouseClick?
    • 顺便说一句,Input.GetKeyDown(KeyCode.Mouse0) 越来越真实,因为我用鼠标点击:P
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多