当玩家与另一个物体碰撞并按下按键时,有没有办法加分?
Is there a way to add points when a player collides with another object and key pressed?
我正在制作一个 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;
}
}
} ```
关于“现在无论箭头是否与按钮碰撞,只要按下键就会添加一个点。”两点考虑:
1.- 根据代码,如果箭头与按钮发生碰撞,则无论是否在第一次碰撞中按下键 ,都会添加分数.因为分数加在OnTriggerEnter2D
.
2.- 然后你在 Update
中 gameObject.SetActive(false);
所以 OnTriggerExit2D
不会发生并且 canBePressed
留给 true
。
“注意:触发事件将发送到禁用的 MonoBehaviours,以允许启用行为以响应碰撞。”来自 documentation。因此,您将为每个按键禁用 gameObject,但不会根据显示的代码添加更多点,因为 ScoreManager.Instance.AddPoint();
在 OnTriggerEnter2D
中,不会再发生。
所以请让我们知道代码行为的解释是否正确。
据我了解,您需要在满足两个条件时添加分数,
1.- 碰撞发生时 (canBePressed == true
)
2. 按键被按下 (Input.GetKeyDown(keyToPress) == true
)
所以 ScoreManager.Instance.AddPoint();
在 Update
中更有意义
使用System.Collections.Generic;
使用统一引擎;
使用 UnityEngine.UI;
使用 Unity.VisualScripting;
使用 UnityEngine.UI 元素;
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);
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;
}
}
}
我正在制作一个 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;
}
}
} ```
关于“现在无论箭头是否与按钮碰撞,只要按下键就会添加一个点。”两点考虑:
1.- 根据代码,如果箭头与按钮发生碰撞,则无论是否在第一次碰撞中按下键 ,都会添加分数.因为分数加在OnTriggerEnter2D
.
2.- 然后你在 Update
中 gameObject.SetActive(false);
所以 OnTriggerExit2D
不会发生并且 canBePressed
留给 true
。
“注意:触发事件将发送到禁用的 MonoBehaviours,以允许启用行为以响应碰撞。”来自 documentation。因此,您将为每个按键禁用 gameObject,但不会根据显示的代码添加更多点,因为 ScoreManager.Instance.AddPoint();
在 OnTriggerEnter2D
中,不会再发生。
所以请让我们知道代码行为的解释是否正确。
据我了解,您需要在满足两个条件时添加分数,
1.- 碰撞发生时 (canBePressed == true
)
2. 按键被按下 (Input.GetKeyDown(keyToPress) == true
)
所以 ScoreManager.Instance.AddPoint();
在 Update
使用System.Collections.Generic; 使用统一引擎; 使用 UnityEngine.UI; 使用 Unity.VisualScripting; 使用 UnityEngine.UI 元素;
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);
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;
}
}
}