如何在Unity 3D中平滑滚动对象

时间:2017-12-22 02:36:08

标签: ios unity3d vector translate side-scroller

所有。

我在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; 
        }

    }

}

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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