Reputation: 325
I'm currently developing a game in unity using c# scripts and I have a small problem. I'm trying to give one of my game objects a constant speed/velocity without it being affected by other gravity, drag or any other type of physics characteristic except velocity. I looked through the Unity manual to find any classes that would be able to help me with this and I seemed to have found one class that would do the job: https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html
I edited it in order to make it fit my game since this is a game object that doesn't have its velocity affected by the player but every time I run the game in the test screen nothing happens(The object stays static). I was wondering if anyone knows of a class in Unity or C# that deals with this problem or generally knows how I can make this happen. Both by having it affect all the game objects appearing on the screen at the same time or only a select few? And secondly, I was also wondering how I could convert the rigidbody velocity vector2 into from a world point into a screen point?
Thanks alot.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallSpeed : MonoBehaviour
{
public Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
rb.velocity = new Vector2(0, 100);
}
}
Expected result: The game object moves upwards with a speed of 100.
Actual result: Nothing happens.
Upvotes: 0
Views: 1685
Reputation: 529
Be sure to check that your Rigidbody2D
is set to dynamic in the inspector, as Kinematic and Static rigidbodies do not have physics. If you don't want it to be dynamic, just use rb.Translate()
instead. However, NEVER translate a static rigidbody, as it messes with the optimizations the engine does to them, use kinematic rigidbodies for transforming instead.
Upvotes: 0
Reputation: 317
If you are trying to make your object move at a constant speed, there is no need for a rigidbody reference.
public float upSpeedPerSecond = 100f;
void Update() {
transform.translate(new Vector3(0, upSpeedPerSecond*time.deltaTime, 0));
}
Upvotes: 0