У меня и друга из колледжа есть идея игры, в которой препятствия объединяются в пул объектов, а затем прокручиваются по экрану (справа налево) с той же скоростью, а фон прокручивается (справа налево), чтобы создать иллюзиюперсонаж игрока бежит.Пока это работает.
Однако мы хотим сделать так, чтобы фон и препятствия постепенно увеличивались со временем, оставаясь на той же скорости, что и друг для друга, чтобы сделать игру более сложной для пользователя.
У нас было множество проблем с реализацией этого.Первоначально мы пытались добавить модификатор скорости к обеим базовым скоростям, но это привело к совершенно разным скоростям.Я считаю, что это как-то связано с тем, что мы используем смещение текстуры для перемещения фона, но для препятствий мы используем скорость.Если это помогает, все (кроме фона, камеры, EventSystem и GameController) находится в пределах холста, потому что это был единственный способ, которым мы знали, как масштабировать в то время.
Итак, что мы делаем неправильноздесь?
Код прокрутки фона:
using UnityEngine;
public class Background : MonoBehaviour
{
/*
*
* A script that's sole purpose is to create a scrolling, infinite background.
* Attached to: Brick
* Scene: Level0
*
*/
public float scrollSpeed;
private Vector2 savedOffset;
private Renderer rndrer;
private float conversionFactor = 0.1f;
public static Background instance;
private void Start()
{
rndrer = GetComponent<Renderer>();
savedOffset = rndrer.material.GetTextureOffset("_MainTex");
}
private void FixedUpdate()
{
this.rndrer.material.SetTextureOffset("_MainTex", new Vector2((GameControl.speed * conversionFactor), 0));
}
private void OnDisable()
{
rndrer.sharedMaterial.SetTextureOffset("_MainTex", savedOffset);
}
}
Код прокрутки препятствия:
using UnityEngine;
public class ObstacleScrolling : MonoBehaviour
{
/*
*
* A script which controls the movement of the Obstacles to make it look like the player is running towards them.
* Attached to: [All Obstacles in the Prefabs folder]
* Scene: Level0
*
*/
private Rigidbody2D rb2d;
public float scrollSpeed;
public float test;
GameObject canvasObj;
Canvas canvas;
// Use this for initialization
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
canvasObj = GameObject.Find("Canvas");
canvas = canvasObj.GetComponent<Canvas>();
test = -1280 * canvas.scaleFactor;
scrollSpeed = scrollSpeed * canvas.scaleFactor; //+ -(Time.timeSinceLevelLoad / 100);
}
// Update is called once per frame
void FixedUpdate()
{
this.transform.Translate(Vector3.right * GameControl.speed);
if (GameControl.instance.gameOver == true)
{
rb2d.velocity = Vector2.zero;
}
}
}