【问题标题】:OnCollisionEnter2D not calledOnCollisionEnter2D 未调用
【发布时间】:2021-06-21 18:54:34
【问题描述】:

我正在电梯上制作一个脚本,当玩家在电梯旁边时,它应该传送玩家并按下 e

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class interactible : MonoBehaviour
{
    public Transform player;
    public Transform pos;

    private bool collide;

    void Start()
    {
        collide = false;
    }

    void OnCollisionEnter2D(Collision2D collider)
    {
        collide = true;
    }

    void OnCollisionExit2D(Collision2D collider)
    {
        collide = false;
    }

    void Update()
    {
        if (Input.GetKeyDown("e") && collide)
        {
            player.position = pos.position;
        }
    }
}

我已经定义了 player 和 pos,并为电梯制作了一个 2d 盒子碰撞器,并将“is trigger”设置为 true
我做错了什么?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您的问题是 2 个触发器不能碰撞,只有触发器和碰撞器可以相互配合。

    更新:主要问题是当您处理触发器时,您需要使用OnTriggerEnter2D 而不是OnCollisionEnter2D

    【讨论】:

    • 什么意思?
    • 你的玩家必须是非触发器,触发器不能触发其他触发器,因为它们会寻找对撞机
    • 如果这是你所说的,我的播放器没有将“是触发器”设置为 true,但电梯可以,所以它应该可以工作。
    • 哦,我只是忘了我必须使用刚体,不是吗?
    • @swisscheez84 我会跳上我的电脑,我们会在聊天中解决它
    【解决方案2】:

    Input.GetKeyDown 接受枚举,所以它应该是

    if(Input.GetKeyDown(KeyCode.E) && collide)
    

    【讨论】:

    • 这不是因为我拿走了“&&碰撞”,当我按'e'时它起作用了
    • OnCollisionEnter() 在几分之一秒内触发,因此很难同时捕获按键,因此请尝试使用 OnTriggerStay 或使用 LineCast。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多