- Home /
Continuously move ball on screen
For my 2D game, I want to move ball continuously on screen. At present, I have following code to work.
public class BallMovement : MonoBehaviour
{
private bool isStartMoving;
private Vector3 direction;
private float speed = 20f;
void Start ()
{
InitializeValues ();
ScaleUpAnimation ();
}
private void InitializeValues ()
{
float xDirection = Random.Range (0, 2) * 2 - 1;
float yDirection = Random.Range (0, 2) * 2 - 1;
direction = new Vector3 (xDirection * speed, yDirection * speed, 0f);
}
private void ScaleUpAnimation ()
{
iTween.ScaleTo (gameObject, iTween.Hash ("x", 2f, "y", 2f, "time", 1f, "delay", 0.5f, "oncomplete", "ScaleDownAnimation",
"oncompletetarget", gameObject, "easetype", iTween.EaseType.linear));
}
private void ScaleDownAnimation ()
{
iTween.ScaleTo (gameObject, iTween.Hash ("x", 1f, "y", 1f, "time", 1f, "oncomplete", "ScaleDownComplete",
"oncompletetarget", gameObject, "easetype", iTween.EaseType.linear));
}
private void ScaleDownComplete ()
{
rigidbody2D.velocity = direction;
isStartMoving = true;
}
void FixedUpdate ()
{
if (isStartMoving) {
rigidbody2D.velocity = direction * speed * Time.deltaTime;
}
}
void OnCollisionEnter2D (Collision2D otherCollision)
{
Vector3 normal = otherCollision.contacts [0].normal;
direction = Vector3.Reflect (direction, normal);
}
}
Using above code, I can able to move ball continuous on screen but it showing some what jerk in its movement. I want to use ball in collision detection also. If I use transform then it might possible that it didn't reply correctly in collision detection. Not looking smooth moving. I want some suggestions to move ball smoothly on screen.
Answer by kwmx · Dec 28, 2014 at 08:00 PM
Try using Update instead and tell us how it turns out (::
public class BallMovement : MonoBehaviour
{
private bool isStartMoving;
private Vector3 direction;
private float speed = 20f;
void Start ()
{
InitializeValues ();
ScaleUpAnimation ();
}
private void InitializeValues ()
{
float xDirection = Random.Range (0, 2) * 2 - 1;
float yDirection = Random.Range (0, 2) * 2 - 1;
direction = new Vector3 (xDirection * speed, yDirection * speed, 0f);
}
private void ScaleUpAnimation ()
{
iTween.ScaleTo (gameObject, iTween.Hash ("x", 2f, "y", 2f, "time", 1f, "delay", 0.5f, "oncomplete", "ScaleDownAnimation",
"oncompletetarget", gameObject, "easetype", iTween.EaseType.linear));
}
private void ScaleDownAnimation ()
{
iTween.ScaleTo (gameObject, iTween.Hash ("x", 1f, "y", 1f, "time", 1f, "oncomplete", "ScaleDownComplete",
"oncompletetarget", gameObject, "easetype", iTween.EaseType.linear));
}
private void ScaleDownComplete ()
{
rigidbody2D.velocity = direction;
isStartMoving = true;
}
void Update ()
{
if (isStartMoving) {
rigidbody2D.velocity = direction * speed * Time.deltaTime;
}
}
void OnCollisionEnter2D (Collision2D otherCollision)
{
Vector3 normal = otherCollision.contacts [0].normal;
direction = Vector3.Reflect (direction, normal);
}
}
Your answer
Follow this Question
Related Questions
Moving 2D Sprite Object in Curve path. 4 Answers
Movement script breaks colliders 1 Answer
how can i move a ball like in rolling sky game using mobile touch and reach the same physics ? 0 Answers
Player falls through rising platform? 4 Answers
Top-down space flight physics - AddForce - Object moves off center the faster it goes 0 Answers