Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换
Posted
技术标签:
【中文标题】Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换【英文标题】:Unity OnTriggerEnter2d() Not working | Trying to switch between Scenes 【发布时间】:2021-11-24 01:16:27 【问题描述】:我对 Unity 很陌生,我一直在尝试让这个场景切换起作用,但是当玩家击中它时,触发器似乎没有被激活。 debug.Log 什么也没做,所以我很难过。我知道我的术语可能没有意义,所以让我展示一些图片。如果您能够提供帮助,那将非常有帮助。谢谢!
这是我要触发的对象的检查面板
这是播放器的检查员
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneChangeScript : MonoBehaviour
public int iLevelToLoad;
public string sLevelToLoad;
public bool useIntegerToLoadLevel = false;
void start()
void update()
private void onTriggerEnter2D(Collider2D other)
if(other.CompareTag("Player"))
Debug.Log("Somethings Being Triggered!");
LoadScene();
void LoadScene()
if(useIntegerToLoadLevel)
SceneManager.LoadScene(iLevelToLoad);
else
SceneManager.LoadScene(sLevelToLoad);
【问题讨论】:
您是否尝试将 debug.log 放在条件之外以查看它是否甚至进入方法?甚至更好.. 只需在 if 语句上放一个断点并在调试模式下运行? C# 也区分大小写。onTriggerEnter2D
与 OnTriggerEnter2D
不同。可能统一甚至没有开始使用这种方法。我看到你对start
和update
做了同样的事情
@OmarAbdelBari 非常感谢,我已经为这个问题困扰了大约一天。我需要确保我更加关注案例。
Visual Studio 有一些自动完成功能,您应该习惯于使用它。此外,以大写开头的方法是 C# 约定。我会花一些时间学习 VS 快捷方式。大大加快了工作流程..
一定会的,再次感谢您的快速响应。
【参考方案1】:
Unity Monobehavior Lifecycle methods 以大写字母开头,C# 方法区分大小写。因此,需要对以下方法进行更正以供 Unity 使用:
start
=> Start
update
=> Update
onTriggerEnter2D
=> OnTriggerEnter2D
由于 C# 约定方法以大写字母开头,因此如果假设方法以大写字母而不是小写字母开头,则不太可能遇到此问题。但最好确认一下!此外,如果您使用的是 Visual Studio,则可以通过花时间学习一些捷径来避免这些痛苦。
【讨论】:
这是一个约定,是的,但在这种情况下,这无关紧要。它需要大写,因为调用这些方法的 Unity 消息系统正在寻找具有该确切名称的它们;) 约定的要点是暗示“如果您使用大写字母,您可能不会经常遇到这个问题,因为这是约定”,但我会更明确地说明。【参考方案2】:嘿,我刚刚发现您将bool
useIntegerToLoadLevel
设置为false
,并且您正在使用此条件在if
语句中加载场景,并且bool
从未设置为@987654326 @。
尝试在输入触发器时将此bool
设置为true
,即在OnTriggerEnter2D
方法中,肯定可以工作。这是一个任何人都可以制造的小错误。
【讨论】:
是的,但他有一个 else 分支,用于加载场景;所以这不是一个真正的问题。以上是关于Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换的主要内容,如果未能解决你的问题,请参考以下文章
Unity OnTriggerEnter2D CompareTag ||比较标签不一致
碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)