- Home /
GameObject moving back and forth, moves slightly further left each time.
To explain better, the moving block gameobject will start at lets say X = 76. It will move left to X = 69. Then it will start to return towards X=76 but instead it will stop at around 75.9. Then it will move left to 68.9. So it will continuously move slightly more to the left with each pass. I don't want to use Mathf.PingPong.
public class MovingBlock : MonoBehaviour
{
public bool inTrigger = false;
private bool cR = true;
public bool left, right, up, down;
public float vel = 5;
public float timeToMove;
private bool currentPhase;
void Update()
{
if (inTrigger == true)
{
if (cR == true)
{
StartCoroutine(Move());
cR = false;
}
if(currentPhase == true)
{
if (down == true)
{
transform.Translate(Vector2.down * Time.deltaTime * vel);
}
if (left == true)
{
transform.Translate(Vector2.left * Time.deltaTime * vel);
}
if (right == true)
{
transform.Translate(Vector2.right * Time.deltaTime * vel);
}
if (up == true)
{
transform.Translate(Vector2.up * Time.deltaTime * vel);
}
}
if(currentPhase == false)
{
if (down == true)
{
transform.Translate(Vector2.up * Time.deltaTime * vel);
}
if (left == true)
{
transform.Translate(Vector2.right * Time.deltaTime * vel);
}
if (right == true)
{
transform.Translate(Vector2.left * Time.deltaTime * vel);
}
if (up == true)
{
transform.Translate(Vector2.down * Time.deltaTime * vel);
}
}
}
}
private IEnumerator Move()
{
currentPhase = true;
yield return new WaitForSeconds(timeToMove);
currentPhase = false;
yield return new WaitForSeconds(timeToMove);
cR = true;
}
void OnTriggerEnter(Collider other)
{
if (other.GetComponent<Collider>().tag == "Player")
{
inTrigger = true;
cR = true;
}
}
}
Answer by conman79 · Nov 09, 2016 at 01:01 AM
Your issue is caused by "floating point inaccuracy".
A workaround in your situation would be to check if the position is within a small range of your desired position, and if so then move to the desired position.
Your answer
Follow this Question
Related Questions
How can i get this Delay script to work? 1 Answer
How to implement a "wait" after an animation has finished? 2 Answers
How to make loop with call to IEnumerator actually pause? 2 Answers
WaitForSeconds Not Working 4 Answers
Problem with coroutine 2 Answers