我正在制作一個 2D 節奏游戲,我想要它,所以當箭頭與按鈕碰撞并按下右鍵時,一個點將被添加到我的分數系統中。現在,無論箭頭是否與按鈕碰撞,都會在按下鍵時添加一個點。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Unity.VisualScripting;
using UnityEngine.UIElements;
public class NoteObject : MonoBehaviour
{
public bool canBePressed;
public KeyCode keyToPress;
public ScoreManager scoreManager;
private void Start()
{
}
void Update()
{
if (Input.GetKeyDown(keyToPress))
{
if (canBePressed)
{
gameObject.SetActive(false);
}
}
}
void OnTriggerEnter2D(Collider2D other)
{
GameObject tempObject = other.GameObject();
if(tempObject.tag == "Activator")
{
Debug.Log("collided(:");
canBePressed = true;
ScoreManager.Instance.AddPoint();
}
}
void OnTriggerExit2D(Collider2D other)
{
GameObject tempObject = other.GameObject();
if (tempObject.tag == "Activator")
{
canBePressed = false;
}
}
} ```
uj5u.com熱心網友回復:
關于“現在,無論箭頭是否與按鈕相撞,只要按下鍵,就會添加一個點。” 兩個考慮:
1.- 根據代碼,行為是如果箭頭與按鈕碰撞,則添加分數,無論是否在第一次碰撞中按下鍵。因為分數是加在OnTriggerEnter2D.
2.- 然后你gameObject.SetActive(false);在Update所以OnTriggerExit2D不會發生并且canBePressed被留給true。“注意:觸發事件將被發送到禁用的 MonoBehaviours,以允許啟用 Behaviors 以回應沖突。” 從檔案中。因此,您將為每個 keyPress 禁用游戲物件,但不會根據顯示的代碼添加更多點,因為ScoreManager.Instance.AddPoint();在OnTriggerEnter2D中不會再發生。
所以請讓我們知道代碼行為的解釋是否正確。
據我了解,您需要在滿足兩個條件時添加分數,
1.- 發生碰撞時 ( canBePressed == true)
2. 按鍵被按下 ( Input.GetKeyDown(keyToPress) == true) 所以ScoreManager.Instance.AddPoint();在Update
使用 System.Collections.Generic; 使用 UnityEngine;使用 UnityEngine.UI;使用 Unity.VisualScripting;使用 UnityEngine.UIElements;
公共類 NoteObject:MonoBehaviour {
public bool canBePressed;
public KeyCode keyToPress;
public ScoreManager scoreManager;
private void Start()
{
}
void Update()
{
if (Input.GetKeyDown(keyToPress))
{
if (canBePressed)
{
gameObject.SetActive(false);
ScoreManager.Instance.AddPoint(); //put here
}
}
}
void OnTriggerEnter2D(Collider2D other)
{
GameObject tempObject = other.GameObject();
if(tempObject.tag == "Activator")
{
Debug.Log("collided(:");
canBePressed = true;
//ScoreManager.Instance.AddPoint(); //removed
}
}
void OnTriggerExit2D(Collider2D other)
{
GameObject tempObject = other.GameObject();
if (tempObject.tag == "Activator")
{
canBePressed = false;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385444.html
