在Unity中输入多维数据集时尝试加载新场景

2 c# unity-game-engine

所以我有这段代码进入一个新的场景:

using System.Collections;

using UnityEngine;
// add this line to use the SceneManagment library
using UnityEngine.SceneManagement;

public class LoadScenes : MonoBehaviour {

    [SerializeField] private string loadLevel;

    void onTriggerEnter(Collider other) {
        if (other.CompareTag ("Player")) {
            SceneManager.LoadScene (loadLevel);
        }

    }

} 
Run Code Online (Sandbox Code Playgroud)

然后,我将此脚本添加到多维数据集并选择一个触发器。然后我输入我希望它也发送给我的场景,但是当我走进它时,什么也没有发生。我尝试了不同的变体,但它似乎没有用。

我正在使用的角色是一个称为“穿西装的男人”的统一资产,但我已将其标签选择为“玩家”。任何建议都很好!

Tob*_*eel 5

您的触发器的处理程序将不会被调用

正如Sunimal早已指出的那样,您需要纠正错字。

  void OnTriggerEnter(Collider other) {
    if (other.CompareTag ("Player")) {
        SceneManager.LoadScene (loadLevel);
    }
}
Run Code Online (Sandbox Code Playgroud)

确保您的场景包括在内并在“构建设置”中进行了检查

正如您在下面的屏幕截图中所看到的,我已经在我的构建设置中添加了SampleScene。有两种向场景中添加场景的方法

  1. 通过单击“添加打开的场景”,可以将当前打开的场景添加到该列表中。
  2. 将场景从ProjectView拖放到列表中

构建设置的屏幕截图

确保您的SceneName设置正确

在我的情况下,您的loadLevel字段需要具有“ Scenes / SampleScene”值。

 [SerializeField] private string loadLevel;
Run Code Online (Sandbox Code Playgroud)

玩家需要一个对撞机

使用OnTriggerEnter方法时,Player对象需要附加某种Collider。这可以是BoxCollider,SphereCollider或其他某些Collider。请注意,需要选中“触发”复选框。否则,它将不会触发。

编辑:感谢Eddge纠正我。有关触发器的更详细说明,请参见此答案。

对撞机组件的图像

以编程方式确保在LoadScenes组件旁边有一个BoxCollider组件

您可以在类中添加RequireComponent属性。基本上可以确保您将给定类型添加为组件。添加此脚本时,这还将自动向对象添加盒碰撞器。

[RequireComponent(typeof(BoxCollider))]
public class LoadScenes : MonoBehaviour {
/// your other code is here
}
Run Code Online (Sandbox Code Playgroud)

感谢Sunimal的提示!

如果那不能解决问题怎么办?

如果所有这些都无济于事,请提供PlayerObject检查器的屏幕快照。这样,我们可以看到哪些组件已附加到该对象以及如何对其进行“配置”

  • 玩家不需要作为触发器的对撞机(只需一个对撞机)。为了调用OnTriggerEnter,两个对象都需要一个碰撞器,其中之一必须是触发器,一个必须具有刚体。根据文档:https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html (2认同)