- Home /
Why I am noticing frame drops during ball movement?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveBall : MonoBehaviour {
public float speed = 10f;
bool isKeyEnabled = true;
GameObject player;
Rigidbody2D rb2d;
Vector2 vel;
// Use this for initialization
void Start ()
{
rb2d = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
if(Input.GetKey(KeyCode.Space) && isKeyEnabled == true)
{
rb2d.isKinematic = false;
transform.SetParent(null);
isKeyEnabled = false;
rb2d.velocity = Vector2.up * speed;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "Player")
{
float x = HitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.x);
Vector2 dir = new Vector2(x, 1).normalized;
rb2d.velocity = dir * speed;
}
}
float HitFactor(Vector2 ballPos, Vector2 racketPos, float racketHeight)
{
return (ballPos.x - racketPos.x) / racketHeight;
}
}
I am making a 2D brick ball game but don't know why my game is dropping frame when I am testing. Is there any problem in above mentioned code? And can anyone please explain float x = HitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.x);
part of code as I have refered from another website and confused.
move these to Start():
rb2d.is$$anonymous$$inematic = false;
transform.SetParent(null);
They don't belong to FixedUpdate()
Answer by JAAMY · Jun 06, 2018 at 12:42 PM
I don't know if it helps but this is a link to an good article, about having smooth movements and rotations. In 3d it helped me a lot. hope it helps you to.
Timesteps and Achieving Smooth Motion in Unity
About hit factor you asked, as I can figure out, it is somehow finding out the direction which the ball should be forced after hit. for example if the rocket hit the ball from north west the ball should go to south east and … . But it won't have impact on the amount of this force, because later in code it gets normalized.