Question by
martlost · Oct 08, 2015 at 09:56 PM ·
unity 5movementgameobjecttransform
Object cordinates changing when game start
Guys I have a problem with my code. For example a object stay at 0,2,0(or something else) cordinates. and I move the script into the object. When game playing object go to 0,0,0 cordinates. I dont want to change the cordinates of my object when game start. How can i fix it. Here is my code
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MovementRD : MonoBehaviour {
public Button btnRight;
public Button btnDown;
public Text stepText;
//public GUIText stepText;
public static int step;
float lerpTime;
float currentLerpTime;
float perc = 1;
Vector3 startPos;
Vector3 endPos;
void Start()
{
btnDown = btnDown.GetComponent<Button> ();
btnRight = btnRight.GetComponent<Button> ();
//transform.rotation = Quaternion.Euler(0,0,0);
}
void Update ()
{
if ( Input.GetButtonDown("down")||Input.GetButtonDown("right"))
{
if(perc == 1)
{
lerpTime =1;
currentLerpTime=0;
}
}
if (Input.GetButtonDown ("right") && gameObject.transform.position == endPos) {
RightAction();
}
if (Input.GetButtonDown ("down") && gameObject.transform.position == endPos) {
DownAction();
}
currentLerpTime += Time.deltaTime * 5.5F;
perc = currentLerpTime / lerpTime;
gameObject.transform.position = Vector3.Lerp (startPos, endPos, perc);
}
/*
void OnCollisionEnter(Collision coll) {
if (coll.gameObject.tag == "dom") {
GetComponent<Rigidbody> ().constraints = RigidbodyConstraints.None;
}
}
*/
public void DownAction()
{
stepText.text = "STEP: " + step;
startPos = gameObject.transform.position;
endPos = new Vector3(transform.position.x, transform.position.y, transform.position.z -1);
step++;
if (gameObject.transform.rotation == Quaternion.Euler (90,0,0))
{
transform.rotation = Quaternion.Euler (0,0,0);
}
else if(gameObject.transform.rotation == Quaternion.Euler (0,0,0))
{
transform.rotation = Quaternion.Euler (90,0,0);
}
}
public void UpAction()
{
stepText.text = "STEP: " + step;
startPos = gameObject.transform.position;
endPos = new Vector3(transform.position.x, transform.position.y, transform.position.z +1);
step++;
if (gameObject.transform.rotation == Quaternion.Euler (90,0,0))
{
transform.rotation = Quaternion.Euler (0,0,0);
}
else if(gameObject.transform.rotation == Quaternion.Euler (0,0,0))
{
transform.rotation = Quaternion.Euler (90,0,0);
}
}
public void LeftAction()
{
stepText.text = "STEP: " + step;
startPos = gameObject.transform.position;
endPos = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z);
step++;
if (gameObject.transform.rotation == Quaternion.Euler (0,0,90))
{
transform.rotation = Quaternion.Euler (0,0,0);
}
else if(gameObject.transform.rotation == Quaternion.Euler (0,0,0))
{
transform.rotation = Quaternion.Euler (0,0,90);
}
}
public void RightAction()
{
stepText.text = "STEP: " + step;
startPos = gameObject.transform.position;
endPos = new Vector3(transform.position.x + 1, transform.position.y, transform.position.z);
step++;
if (gameObject.transform.rotation == Quaternion.Euler (0,0,90))
{
transform.rotation = Quaternion.Euler (0,0,0);
}
else if(gameObject.transform.rotation == Quaternion.Euler (0,0,0))
{
transform.rotation = Quaternion.Euler (0,0,90);
}
}
}
Comment
Best Answer
Answer by Denvery · Oct 09, 2015 at 08:52 AM
Hello!
As I can see you have line #69:
gameObject.transform.position = Vector3.Lerp (startPos, endPos, perc);
This line is performed every Update; at start of your script startPos == (0,0,0) and endPos == (0,0,0). So at the first Update() your object moves to (0,0,0) due to this line.