【问题标题】:How to smooth a scrolling object in Unity 3D如何在 Unity 3D 中平滑滚动对象
【发布时间】:2017-12-22 02:36:08
【问题描述】:

所有。

我正在使用 Unity 制作一款手机游戏,它是一款横向卷轴游戏。我想要一个平台在屏幕上移动,直到它离开屏幕。然后,我将它的位置设置回起点,使滚动看起来无限。这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScrollingObject : MonoBehaviour
{
    public float speed;
    Vector3 startPos;

    void Start()
    {
        startPos = transform.position;
    }

    void Update()
    {

        transform.Translate ((new Vector3 (-1, 0, 0)) * speed * Time.deltaTime);

        if (transform.position.x < -22.71982) 
        {
            transform.position = startPos; 
        }

    }

}

这可行,但它看起来有点波涛汹涌,而且不流畅。有没有人有任何建议让这个平台移动得更顺畅一些?提前致谢。

【问题讨论】:

    标签: ios unity3d vector translate side-scroller


    【解决方案1】:

    创建预制件的两个或多个副本(根据您的要求)并维护一个对象池。池的目的是避免破坏对象并再次创建它们。只需禁用对象并在它出现在屏幕上时激活它们。滚动时不断交换或更改索引。这可以避免内存碎片和您在游戏对象的初始化步骤(在 start() 或 awake() 中)可能进行的任何计算。

    【讨论】:

      【解决方案2】:

      一个更好的主意是创建两个这样的游戏对象,一个是当前的,另一个将在运行时创建,当当前对象即将离开屏幕时。您可以创建一个预制件,然后在正确的时间实例化它:

      Instantiate(YourPrefab, new Vector3(0, 0, 0), Quaternion.identity); 
      

      新的预制实例进入视图后,将其保留为新的当前实例,并删除旧实例。

      --------------------- Time ----------------------->
      | Current (A) | Next Current (B) |
      -------------------------------------------------->
                    | 
                    v
               screen edge here
      
      
       --------------------- Time ----------------------->
      | Old Current (A) | Current (B) |
      --------------------------------------------------->
              |                       | 
              v                       v
         To be destroyed         screen edge here
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        相关资源
        最近更新 更多