gpt4 book ai didi

unity-game-engine - 为什么我对 OnCollisionEnter() 的定义没有被使用?

转载 作者:行者123 更新时间:2023-12-02 10:11:23 26 4
gpt4 key购买 nike

我有一个角色,它有一个 bool 标志,决定他是否正在跳跃(如果他正在跳跃,他就不能再跳跃)。当他跳跃时,跳跃标志设置为 true,当他与某物碰撞时,跳跃标志设置回 false(这样他就可以再次跳跃)。

但是,他只跳跃一次,并且即使应该重置为 false,跳跃仍保持 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;
}

enter image description here

最佳答案

您的 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;
}

希望这有帮助!如果您有任何疑问,请告诉我。

关于unity-game-engine - 为什么我对 OnCollisionEnter() 的定义没有被使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com