为什么没有使用我对 OnCollisionEnter() 的定义?
Why isn't my definition for OnCollisionEnter() being used?
我有一个布尔标志的角色,它决定了他是否在跳跃(如果他在跳跃,他就不能再次跳跃)。当他跳跃时,跳跃标志设置为 true,当他与某物发生碰撞时,它被设置回 false(因此他可以再次跳跃)。
然而,他只跳了一次,即使它应该重置为 false,jump 仍然是 true。为什么会这样?我对 OnCollisionEnter()
的定义应该重置标志。
var trump;
var jump = false;
function Start() {
// Assigns the Rigidbody to a variable
trump = GetComponent(Rigidbody2D);
// Variable Switches:
}
function OnCollisionEnter() {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
function FixedUpdate() {
trump.velocity.x = Input.GetAxis("Horizontal") * 10;
if ((Input.GetKeyDown(KeyCode.UpArrow)) && (jump == false)) {
trump.AddForce(Vector2(0, 10), ForceMode2D.Impulse);
jump = true;
}
}
编辑: 根据给出的答案,我尝试将 Collision
参数添加到 OnCollisionEnter()
,但它看起来仍然不像函数在我在其中添加 Debug.Log()
进行检查后被调用。还有什么问题吗?
function OnCollisionEnter(collision: Collision) {
jump = false;
Debug.log("He Hit The Wall");
trump.velocity.y = 0;
trump.velocity.x = 0;
}
您 OnCollisionEnter()
的函数签名不正确。在定义这些特定于 MonoBehaviour 的函数时,函数的名称和参数必须与文档中显示的相匹配。否则,MonoBehaviour 将无法识别它们并且函数将不会在预期时被调用。
在这种情况下,OnCollisionEnter()
需要一个 Collision
参数:
function OnCollisionEnter(collision: Collision) {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
注意:以上内容是在编辑问题以实施建议之前编写的 - 之前,OnCollisionEnter()
是在没有参数的情况下定义的。
但是,在您的情况下,这不是唯一的问题 - 您使用的是 Unity 的 2D 物理,这意味着您实际上应该使用函数的 2D 变体:OnCollisionEnter2D
,它也需要Collision2D
.
的参数略有不同
所以你需要:
function OnCollisionEnter2D(collision: Collision2D) {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
希望对您有所帮助!如果您有任何问题,请告诉我。
我有一个布尔标志的角色,它决定了他是否在跳跃(如果他在跳跃,他就不能再次跳跃)。当他跳跃时,跳跃标志设置为 true,当他与某物发生碰撞时,它被设置回 false(因此他可以再次跳跃)。
然而,他只跳了一次,即使它应该重置为 false,jump 仍然是 true。为什么会这样?我对 OnCollisionEnter()
的定义应该重置标志。
var trump;
var jump = false;
function Start() {
// Assigns the Rigidbody to a variable
trump = GetComponent(Rigidbody2D);
// Variable Switches:
}
function OnCollisionEnter() {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
function FixedUpdate() {
trump.velocity.x = Input.GetAxis("Horizontal") * 10;
if ((Input.GetKeyDown(KeyCode.UpArrow)) && (jump == false)) {
trump.AddForce(Vector2(0, 10), ForceMode2D.Impulse);
jump = true;
}
}
编辑: 根据给出的答案,我尝试将 Collision
参数添加到 OnCollisionEnter()
,但它看起来仍然不像函数在我在其中添加 Debug.Log()
进行检查后被调用。还有什么问题吗?
function OnCollisionEnter(collision: Collision) {
jump = false;
Debug.log("He Hit The Wall");
trump.velocity.y = 0;
trump.velocity.x = 0;
}
您 OnCollisionEnter()
的函数签名不正确。在定义这些特定于 MonoBehaviour 的函数时,函数的名称和参数必须与文档中显示的相匹配。否则,MonoBehaviour 将无法识别它们并且函数将不会在预期时被调用。
在这种情况下,OnCollisionEnter()
需要一个 Collision
参数:
function OnCollisionEnter(collision: Collision) {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
注意:以上内容是在编辑问题以实施建议之前编写的 - 之前,OnCollisionEnter()
是在没有参数的情况下定义的。
但是,在您的情况下,这不是唯一的问题 - 您使用的是 Unity 的 2D 物理,这意味着您实际上应该使用函数的 2D 变体:OnCollisionEnter2D
,它也需要Collision2D
.
所以你需要:
function OnCollisionEnter2D(collision: Collision2D) {
jump = false;
trump.velocity.y = 0;
trump.velocity.x = 0;
}
希望对您有所帮助!如果您有任何问题,请告诉我。