public class PlayerControler : MonoBehaviour
{
public GameObject MoveToPosion;
private Vector3 newpos;
private Quaternion LookDirForwrd;
private Quaternion LookDirBack;
private Quaternion LookDirRight;
private Quaternion LookDirLaft;
private void Start()
{
LookDirForwrd = Quaternion.Euler(0, 0, 0);
LookDirBack = Quaternion.Euler(0, 180, 0);
LookDirRight = Quaternion.Euler(0, 90, 0);
LookDirLaft = Quaternion.Euler(0, -90, 0);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.W) && gameObject.transform.rotation == LookDirForwrd) // Move Forwrd
{
newpos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z + 3);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.W) && gameObject.transform.rotation == LookDirRight)
{
newpos = new Vector3(gameObject.transform.position.x + 3, gameObject.transform.position.y, gameObject.transform.position.z);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.W) && gameObject.transform.rotation == LookDirLaft)
{
newpos = new Vector3(gameObject.transform.position.x - 3, gameObject.transform.position.y, gameObject.transform.position.z);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.W) && gameObject.transform.rotation == LookDirBack)
{
newpos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z -3 );
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
if ((Input.GetKeyDown(KeyCode.S)) && gameObject.transform.rotation == LookDirForwrd)// Move Back
{
newpos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z - 3);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.S) && gameObject.transform.rotation == LookDirLaft)
{
newpos = new Vector3(gameObject.transform.position.x + 3, gameObject.transform.position.y, gameObject.transform.position.z);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.S) && gameObject.transform.rotation == LookDirRight)
{
newpos = new Vector3(gameObject.transform.position.x - 3, gameObject.transform.position.y, gameObject.transform.position.z);
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
else if (Input.GetKeyDown(KeyCode.S) && gameObject.transform.rotation == LookDirBack)
{
newpos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z +3 );
GameObject ghost = Instantiate(MoveToPosion, newpos, gameObject.transform.rotation);
DoTask(ghost);
}
if (Input.GetKeyDown(KeyCode.A))// turn left
{
gameObject.transform.Rotate(0, -90, 0);
}
if (Input.GetKeyDown(KeyCode.D))// turn rghit
{
gameObject.transform.Rotate(0, 90, 0);
}
}
private void DoTask(GameObject ghost)
{
if (ghost.GetComponent<CapsuleCollider>().CompareTag("Wall"))
{
Debug.Log("cant move");
Destroy(ghost);
}
else
{
gameObject.transform.position = ghost.transform.position;
Destroy(ghost);
}
}`Preformatted text`
}`Preformatted text`
I am trying to make a movement system like in “inscryption” when you can move in the cabin in act 1.
now I am new to euler and quaternion and I have a problem that after the player dose a 270 turn the code is not working until he dose another 270.
Just to explain the rest of the code:
I make a collider to check if there is anything in the way before I move the player.
This is my first poste so I would love to know if next time I need to poste my question in any other way/format