首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动父GameObject中的移动子GameObject

移动父GameObject中的移动子GameObject
EN

Stack Overflow用户
提问于 2019-09-29 09:05:51
回答 1查看 977关注 0票数 0

我正试图制作一个2.5D的闪影式游戏,在这个游戏中,玩家的宇宙飞船和相机停留在原地,世界继续向前移动。这意味着,即使世界在移动,如果玩家的飞船在屏幕中央,它也会停留在那里。

为此,我创建了一个名为“移动世界”的空游戏对象,并附加了以下脚本:

代码语言:javascript
复制
public class movingWorldController : MonoBehaviour
{
    private float movementSpeed = 5f;

    void Update()
    {
        transform.position = transform.position + new Vector3(0, 0, movementSpeed * Time.deltaTime);
    }
}

然后我把相机和宇宙飞船作为孩子加入到这个物体中,结果,它们确实和这个移动的世界物体一起移动。然而,我也有一个脚本附加到飞船上,允许它根据玩家的输入移动,如果我启用上面的脚本,飞船将停止响应玩家的输入。这艘船的剧本是这样的:

代码语言:javascript
复制
public class ShipController : MonoBehaviour
{
    public Rigidbody rb;
    public float moveSpeed = 5f;
    private Vector3 movement;

    void Update()
    {
        movement.x = Input.GetAxisRaw("Horizontal");
        movement.z = Input.GetAxisRaw("Vertical");
    }

    private void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * moveSpeed * Time.deltaTime);
    }
}

当世界移动脚本被禁用时,船舶控制器工作得很好,所以我怀疑世界脚本是在某种程度上覆盖了宇宙飞船的位置。我该怎么解决这个问题?

有关POC示例,请参阅此视频:https://www.youtube.com/watch?v=-fVjWgfUKn4&t=282s (跳转到4:00查看游戏中的动作)。请注意,在视频游戏制造者是用来实现的效果,而我试图达到一个类似的效果使用的只是代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 08:10:53

我通过做以下事情达到了我想要达到的效果。首先,我删除了MovingWorld对象,并将以下脚本应用于摄像机:

代码语言:javascript
复制
public class movingWorldController : MonoBehaviour
{
    public float movementSpeed = 5f;

    void FixedUpdate()
    {
        transform.position = transform.position + new Vector3(0, 0, movementSpeed * Time.deltaTime);
    }
}

这将使相机不断向前移动。接下来,为了确保玩家的飞船与摄像机保持一致,并且同时具有可操作性,我将以下脚本应用于飞船的对象:

代码语言:javascript
复制
public class ShipController : MonoBehaviour
{
    public Rigidbody rb;
    private float shipVelocity = 5f;
    public float moveSpeed = 10f;
    private Vector3 movement;

   void Update()
   {
        movement.x = Input.GetAxisRaw("Horizontal") * moveSpeed;
        movement.z = Input.GetAxisRaw("Vertical") * moveSpeed + shipVelocity;
   }

    private void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * Time.deltaTime);
    }
}

两个重要的注意事项:

camera-speed.

  • Even引入了shipVelocity变量
  • ,以确保船舶继续在RigidBody上巡航,尽管相机不是RigidBody,但在FixedUpdate方法中必须进行位置更新,以确保它在与船舶相同的帧上移动。使用de-synchronization.

方法更新它将给船舶带来抖动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58153808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档