Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我进入Unity中的立方体时尝试加载新场景_C#_Unity3d - Fatal编程技术网

C# 当我进入Unity中的立方体时尝试加载新场景

C# 当我进入Unity中的立方体时尝试加载新场景,c#,unity3d,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; voi

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

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

    }

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

我使用的角色是一个名为“西服男人”的统一资产,但我选择了它的标签为“玩家”。任何建议都很好

不会调用触发器的处理程序 正如allready所指出的,您需要修复输入错误

  void OnTriggerEnter(Collider other) {
    if (other.CompareTag ("Player")) {
        SceneManager.LoadScene (loadLevel);
    }
}
确保在生成设置中包含并选中场景 正如您在下面的屏幕截图中所看到的,我在构建设置中添加了一个SampleScene。有两种方法可以将场景添加到构建中

  • 通过单击“添加打开的场景”,可以添加以下场景: 目前对该列表开放
  • 将场景从ProjectView拖放到列表中(&D)
  • 确保场景名称设置正确 在我的例子中,您的loadLevel字段需要具有值“Scenes/SampleScene”

    玩家需要一个对撞机 当您使用OnTiggerEnter方法时,您的播放器对象需要附加某种碰撞器。这可以是BoxCollider、SphereCollider或其他一些对撞机。请注意,需要选中“是触发器”复选框。否则它就不会充当触发器

    编辑:谢谢您纠正我的错误。有关触发器的更深入解释,请参见答案

    通过编程确保在LoadScenes组件旁边有一个BoxCollider组件 可以在类中添加属性。它基本上确保将给定类型作为组件添加。当您添加此脚本时,这也会自动将长方体碰撞器添加到对象

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

    如果这不能解决问题呢? 如果所有这些都没有帮助,请提供您的Playerobject检查器的屏幕截图。这样,我们可以看到哪些组件连接到该对象,以及它们是如何“配置”的 要使用SceneManager加载场景,必须确保场景处于生成设置中(根据Tobias的回答)

    触发 在所有的软件开发中,案例都很重要,而且非常重要
    ontriggenter
    ontriggenter
    不同,还请注意
    ontriggenter(碰撞列)
    ontriggenter(碰撞列)

    要使用任何触发方法,必须有三件事:

  • 两个对象都必须有碰撞器
  • 必须将其中一个对撞机标记为触发器
  • 其中一个物体必须有一个刚体

  • 触发器事件被发送到带有刚体的对象和触发器的任何对象,在两个对象都是触发器的情况下,两个对象都将收到它。

    我注意到的第一件事是
    onTriggerEnter
    应更改为
    onTriggerEnter
    @JamesRees如果您单击播放器,您将查看检查器并查看它是否有碰撞。您还应验证您尝试加载的场景是否在建筑中设置。下面有一个很好的答案,请查看。我建议在Build settings>scenes in Build中通过索引加载场景,这样更显式,更不容易出错。这是一个完整的答案。一个简单的添加我们可以添加
    [RequireComponent(typeof(BoxCollider))]公共类加载场景:MonoBehavior{
    将自动向游戏对象添加组件好主意!我添加了这一点玩家不需要作为触发器的碰撞器(只是碰撞器)。为了命名OnTiggerEnter,两个物体都需要一个对撞机,其中一个必须是触发器,另一个必须有一个刚体。这是根据文档:谢谢更正。我对触发器的解释投赞成票:)我试图更正答案中的错误
    [RequireComponent(typeof(BoxCollider))]
    public class LoadScenes : MonoBehaviour {
    /// your other code is here
    }