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

时间:2018-03-08 17:00:25

标签: c# unity3d

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

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);
        }

    }

} 

然后我将此脚本添加到多维数据集并选择它作为触发器。然后我输入我希望它发送给我的场景,但是当我走进它时,根本没有任何事情发生。我尝试了不同的变化,但它似乎没有用。

我使用的角色是一个名为man in a suit的统一资产,但我选择了它的标签为“玩家”。任何建议都会很棒!

2 个答案:

答案 0 :(得分:4)

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

正如Sunimal已经注意到你需要修复错字。

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

确保您的场景包含在“构建设置”

中并进行了检查

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

  1. 点击"添加公开场景"你可以添加场景 目前对该名单开放。
  2. 拖动&将项目中的场景放入列表
  3. Screenshot of the build settings

    确保您的SceneName设置正确

    在我的情况下,你的loadLevel字段需要具有值" Scenes / SampleScene"。

     [SerializeField] private string loadLevel;
    

    玩家需要对手

    当您使用OnTriggerEnter方法时,您的Player对象需要附加某种Collider。这可以是BoxCollider,SphereCollider或其他一些Collider。 注意" Is Trigger"需要选中复选框。否则它不会成为触发器。

    修改:感谢Eddge纠正我。有关触发器的更深入说明,请参阅this答案。

    image of collider component

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

    您可以在班级中添加RequireComponent属性。它基本上确保您将给定类型添加为组件。当您添加此脚本时,这也会自动为对象添加一个盒子对撞机。

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

    感谢Sunimal提示!

    如果没有解决问题该怎么办?

    如果这一切都没有帮助,请提供您的Playerobject检查员的屏幕截图。通过这种方式,我们可以看到哪些组件附加到该对象以及它们如何配置"

答案 1 :(得分:1)

SceneManagement

要使用SceneManager加载场景,必须根据Tobias的答案确保场景处于构建设置中。

触发器

在所有软件开发案例中都很重要,这非常重要。 OnTriggerEnteronTriggerEnter不同,注意OnTriggerEnter(Collider col)OnTriggerEnter(Collision col)

不同

为了使用任何触发方法,有三件事是必须的:

  1. 两个物体都必须有碰撞器。
  2. 必须将其中一个碰撞器标记为触发器。
  3. 其中一个物体必须有一个刚体。
  4. 触发事件被发送到具有刚体的对象,并且任何对象都是触发器,在两个对象都是触发器的情况下都将接收它。