【问题标题】:Move the player and then change the scene移动播放器,然后改变场景
【发布时间】:2015-05-21 07:59:28
【问题描述】:

我有问题。 我希望如果玩家点击 StudyOutDoor,首先对象向门移动,然后在 Unity 中更改场景。 这是我的代码:

if (Physics.Raycast (clickPoint, out hitPoint)) {
                    if (hitPoint.collider.name == "StudyOutDoor") {
                        target.y = transform.position.y;
                        target.z = transform.position.z;
                        transform.position = Vector3.MoveTowards (transform.position, target, playerSpeed * Time.deltaTime);
                        sceneNumber = 3;
                        Application.LoadLevel("Corridor");
                    }

但它只是改变场景,而不是朝着我说的位置移动。 请帮忙。

【问题讨论】:

  • 是的,调用 MoveTowards 会在调用时将您的玩家移动到数据中。但是视觉效果只会在当前帧结束后更新。这永远不会发生,因为您会立即加载下一个场景。似乎您想将玩家平稳地移动到目标。现在你的玩家在大约 0.016 秒内移动到目标。使用协程可能是最有效的解决方案。

标签: c# unity3d move scene


【解决方案1】:

对象确实向门移动,您只是看不到它,因为您在同一帧中加载了新关卡。详细情况:

  1. 新框架开始
  2. 射线被投射并命中
  3. 您指定目标位置
  4. 您将变换位置更改为目标位置
  5. 关卡开始加载
  6. 新框架开始

你想做什么:

  1. 新框架开始
  2. 射线被投射并且
  3. 您指定目标位置
  4. 您将变换位置更改为目标位置
  5. 新框架开始
  6. 您重复第 4 步。直到对象到达目标位置(这会持续很多帧)
  7. 当对象到达目标位置时,您会加载新关卡

要实现这一点,您应该设置一个布尔标志,该标志仅在光线被击中时移动对象

伪代码:

update()
{
    if( ray cast hit )
    {
        calculate target position
        set flag to true
    }
    if( flag )
    {
        move object to target position
        if( object reached target position )
        {
            load new level
        }
    }
}

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多