0

全部。

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

    }

}

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

4

2 回答 2

1

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

于 2017-12-22T05:13:04.547 回答
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
于 2017-12-22T04:04:47.120 回答