Препятствия и фон не прокручиваются одновременно - PullRequest
0 голосов
/ 27 августа 2018

У меня и друга из колледжа есть идея игры, в которой препятствия объединяются в пул объектов, а затем прокручиваются по экрану (справа налево) с той же скоростью, а фон прокручивается (справа налево), чтобы создать иллюзиюперсонаж игрока бежит.Пока это работает.

Однако мы хотим сделать так, чтобы фон и препятствия постепенно увеличивались со временем, оставаясь на той же скорости, что и друг для друга, чтобы сделать игру более сложной для пользователя.

У нас было множество проблем с реализацией этого.Первоначально мы пытались добавить модификатор скорости к обеим базовым скоростям, но это привело к совершенно разным скоростям.Я считаю, что это как-то связано с тем, что мы используем смещение текстуры для перемещения фона, но для препятствий мы используем скорость.Если это помогает, все (кроме фона, камеры, 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;
    }
}
}

1 Ответ

0 голосов
/ 27 августа 2018

используйте это:

public class GameControl : MonoBehaviour
{
private static float speedFactor = 1.0f; // you can set this to canvas scale
private static float speed = 1.0f;

public static float ScaledSpeed
{
    get
    {
        return speed * speedFactor;
    }
}

void FixedUpdate()
{
    speed += 0.01f * Time.deltaTime;
}
}

и это:

public class Background : MonoBehaviour
{
private Vector2 savedOffset;
private Vector2 offset;
private Renderer rndrer;
private float conversionFactor = 0.1f;

private void Start()
{
    rndrer = GetComponent<Renderer>();
    savedOffset = rndrer.material.GetTextureOffset("_MainTex");
    offset = savedOffset;
}

private void FixedUpdate()
{
    offset += new Vector2(GameControl.ScaledSpeed * conversionFactor, 0);
    this.rndrer.material.SetTextureOffset("_MainTex", offset);
}
}

и это:

public class ObstacleScrolling : MonoBehaviour
{
void FixedUpdate()
{
    this.transform.Translate(Vector3.right * GameControl.ScaledSpeed);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...