smooth speed decrease
Good Evening,
I created a scrolling infinite background for my game and it offsets the material on a quad using this code: using UnityEngine; using System.Collections;
public class Scrolling : MonoBehaviour { public float speed = 0.0f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
GetComponent<Renderer>().material.mainTextureOffset = new Vector2 (Time.time * speed, 0);
}
}
my character is being shot out of cannon and i want speed to slow down over time. So I added this code to my game for when the game starts.
using UnityEngine; using System.Collections; using DG.Tweening;
public class GameStart : MonoBehaviour {
public float speed = 0.0f;
public float timer = 0.0f;
public float speed_timer = 0.0f;
public float reset_speed_timer = 0.0f;
public GameObject Background;
public GameObject Water;
public GameObject BackgroundTrees;
public GameObject ForegroundTrees;
public GameObject ForegroundClouds;
public GameObject MidGroundClouds;
public GameObject Knife;
private Scrolling BGScrollScript;
private Scrolling waterScrollScript;
private Scrolling BGTreeScrollScript;
private Scrolling FGTreeScrollScript;
private Scrolling FGCloudScrollScript;
private Scrolling MGCouldScrollSCript;
private Knife_Move knifeTween;
public GameObject parentGameobject;
// Use this for initialization
void Start ()
{
BGScrollScript = Background.GetComponent<Scrolling> ();
waterScrollScript = Water.GetComponent<Scrolling> ();
BGTreeScrollScript = BackgroundTrees.GetComponent<Scrolling> ();
FGTreeScrollScript = ForegroundTrees.GetComponent<Scrolling> ();
FGCloudScrollScript = ForegroundClouds.GetComponent<Scrolling> ();
MGCouldScrollSCript = MidGroundClouds.GetComponent<Scrolling> ();
knifeTween = Knife.GetComponent<Knife_Move>();
BGScrollScript.speed = 0.0f;
waterScrollScript.speed = 0.0f;
BGTreeScrollScript.speed = 0.0f;
FGTreeScrollScript.speed = 0.0f;
FGCloudScrollScript.speed = 0.0f;
MGCouldScrollSCript.speed = 0.0f;
GameObject.FindGameObjectWithTag ("Speed_Part").GetComponent<ParticleSystem> ().enableEmission = false;
}
// Update is called once per frame
void Update ()
{
timer -= Time.deltaTime;
speed_timer -= Time.deltaTime;
if (timer <= 0)
{
BGScrollScript.speed = 0.02f * speed;
waterScrollScript.speed = 0.09f * speed;
BGTreeScrollScript.speed = 0.05f * speed;
FGTreeScrollScript.speed = 0.09f * speed;
FGCloudScrollScript.speed = 0.027f * speed;
MGCouldScrollSCript.speed = 0.021f * speed;
knifeTween.startMove = true;
GameObject.FindGameObjectWithTag ("Speed_Part").GetComponent<ParticleSystem> ().enableEmission = true;
}
if (speed_timer <= 0)
{
if (speed > 0) {
speed -= 0.1f;
speed_timer = reset_speed_timer;
}
}
}
}
The problem is everytime my speed decreases by 1 the background kind of jumps instead of doing it smoothly. I tried changing the Time.Time to Time.deltatime and my background doesn't even move period. Any help would be appreciated to pointing me in the right direction.
Answer by swampman860912 · Feb 25, 2016 at 10:11 PM
I figured this out just encase anyone wants to know. I found this code on youtube and the deltaTime is so much smoother than Time.time.
using UnityEngine; using System.Collections; using DG.Tweening;
public class Scrolling : MonoBehaviour { public float speed = 0.0f;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
MeshRenderer mr = GetComponent<MeshRenderer> ();
Material mat = mr.material;
Vector2 offset = mat.mainTextureOffset;
offset.x += Time.deltaTime * speed;
mat.mainTextureOffset = offset;
}
}
Your answer
Follow this Question
Related Questions
Increase speed when object hits collider ? 0 Answers
Decreasing speed of background (of spaceshooter tutorial) 1 Answer
Acceleration problem with infinite scrolling background 0 Answers
Moving a parallax background automatically without moving the camera 0 Answers
Parallax Scrolling Performance Issue - Gets Laggy after a bit 0 Answers