【问题标题】:Unity restart script not activatingUnity重启脚本未激活
【发布时间】:2020-09-16 05:55:12
【问题描述】:

我正在制作一种统一的跑酷游戏,并且我正在尝试制作它,如果你从平台上摔下来,关卡会重新开始。我正在使用统一 2020.1.3,这里是我的代码

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class Restart : MonoBehaviour
{

private Scene scene;


void Start()
{
    scene = SceneManager.GetActiveScene();
}
void OnTriggerEnter(Collider other)
{
    if (gameObject.tag == "Player")
    {
        Application.LoadLevel(scene.name);
    }
    else
    {

    }
}
}

每当我运行我的场景时,我都会从平台上掉下来,什么也没有发生。我没有那么团结的经验,我不知道发生了什么。该脚本被分配给在整个关卡中扩展的立方体,并且应该在玩家与它发生碰撞时触发

【问题讨论】:

  • 你确定触发器被触发了吗?
  • 我不知道。我怎样才能检查它,如果它没有,我该怎么做才能解决?
  • 加入一些日志记录

标签: c# unity3d


【解决方案1】:

您的立方体是否附有刚体?

另外,勾选 isTrigger。

这是一个大纲:

https://www.binpress.com/unity-3d-collisions-basics/

【讨论】:

  • 在 StackOverflow 上,我们避免仅链接到答案,在答案中简要说明页面包含的内容。此外,这似乎不是一个完整的答案,可能更适合作为澄清的评论。
【解决方案2】:

首先,确保上面的对象有碰撞器并且至少有一个有刚体。 其次,为此替换您的 OnTriggerEnter:

void OnTriggerEnter(Collider other)
{
    if (other.tag == "Player")
    {
        Application.LoadLevel(scene.name);
    }
    else
    {

    }
}

使用“gameobject.tag”,您是在将该对象与自身进行比较。如果要比较碰撞对象的名称(Collider name)是否相等,则需要使用 Collider 类的参数名称。在你的情况下,是“其他”。顺便说一句,other.tag == "name" 已弃用,请使用other.CompareTag("something")

【讨论】:

  • 我不确定我是否真的理解这一点(我很抱歉,我真的很新,我需要有人在整个过程中握住我的手)你能说得更具体一点吗?我为我的玩家和立方体添加了对撞机和刚体,似乎没有发生任何事情。
  • 您正在调用参数 OnTriggerEnter(Collision other) 上要查看的对象是否碰撞为“其他”。所以,如果你想得到碰撞的对象,你应该做“other.something”而不是gameobject.something。 “gameobject”与“this”是一样的。此外,您正在使用 OnTriggerEnter,因此您必须在一个刚体上检查“isTrigger”。提示:触发只是为了查看碰撞,对象根本不会“变成墙”。如果要检查正常碰撞,请使用 OnCollisionEnter 而不是 OnTriggerEnter。
猜你喜欢
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2019-08-19
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多