#c# #unity3d #events
Вопрос:
Я решил попробовать создать простую игру-кликер для файлов cookie в качестве своего первого сольного проекта без каких-либо уроков или курсов, мне удалось дойти до того, что я могу нажать на свой «Cookie», и он добавляет 1 в счетчик cookieCounter, однако unity, похоже, думает, что все мои файлы cookie…
Не уверен, что это мой код или что-то в unity настроено неправильно, но я уверен, что кто-то здесь мог бы указать мне правильное направление.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class cookieCounter : MonoBehaviour
{
public TextMeshProUGUI countText;
public GameObject Cookie;
private int count = 0;
private Rigidbody rb;
private string Object;
// Start is called before the first frame update
void Start()
{
count = 0;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0)) // On left click
{
Debug.Log(gameObject.name); //Returns the Object of which was clicked on
OnMouseOver();
countText.text = count.ToString("Cookies: 0"); // Updates the cookie counter on screen
Debug.Log(count); // Returns Final Count
}
}
private void OnMouseOver() // Looks at mouse and what it is hovering
{
Object = (gameObject.name); // Detects what the mouse is hovering over
if (Object == "Cookie") // Makes sure the object mouse is hovering is the "Cookie"
{
count ; // Adds 1 to the cookie counter.
}
}
}
Пожалуйста, игнорируйте неэффективный код, который я не делал раньше.
Ответ №1:
Вы проверяете , нажата ли мышь и есть ли текущий объект "Cookie"
, но не проверяете, где произошел щелчок. Если Cookie
объект использует те же Update
/ OnMouseOver
методы, что и в коде вопроса, он будет увеличиваться count
независимо от того, где был щелчок.
Вы можете исправить это, приняв во внимание положение мыши. Если файл cookie является пользовательским интерфейсом, вы можете позволить Button
классу обрабатывать все, что связано с обнаружением щелчка мыши(простой способ).
Если Cookie-это 2D SpriteRenderer
-объект(или 3D), то вы можете использовать EventSystem
(возможно, уже включенный в ваш проект) и реализовать IPointerClickHandler
в классе Cookie. Вы можете найти подробное решение в Интернете, например https://forum.unity.com/threads/solved-detecting-mouse-click-on-an-object-in-2d-game.478514/ .
Ответ №2:
Я думаю, что вместо этого вы можете использовать функцию OnMouseDown () (Ввод.GetMouseButtonDown(0)). https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html
Разница в том, что OnMouseDown будет вызываться при нажатии на объект (у объекта должен быть коллайдер). Ввод.GetMouseButtonDown(0) будет вызван, когда вы нажмете везде на экране.