Question by
rpthomps · Oct 26, 2017 at 05:49 PM ·
fixedupdatemoveposition
MovePosition works for keys but not from mouseclick
Hello,
I have a game object that can move via the keyboard, through getaxisraw and also can move by clicking some sprites on the gameboard via the mouse. When I use the keys, the object faces the new direction and moves in that direction. When I use the mouse it faces the new direction but doesn't move. It did before the last update of Unity but now doesn't. Any ideas?
void FixedUpdate () {
// Store the input axes.
float h = Input.GetAxisRaw ("Horizontal");
float v = Input.GetAxisRaw ("Vertical");
Move (h, v);
#if UNITY_EDITOR
if (Input.GetMouseButton(0) || Input.GetMouseButtonDown(0) || Input.GetMouseButtonUp(0)){
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit = new RaycastHit();
Debug.DrawRay(ray.origin, ray.direction * 1000, Color.green);
// Tell me what object is hit
if (Physics.Raycast(ray, out hit)) {
if (hit.collider.gameObject.name == "BuyButtonCylinder"){
}
if (hit.collider.gameObject.name == "DownButtonCylinder"){
Move(0,-1);
}
if (hit.collider.gameObject.name == "RightButtonCylinder"){
Move(1,0);
}
if (hit.collider.gameObject.name == "LeftButtonCylinder"){
Move(-1,0);
}
if (hit.collider.gameObject.name == "UpButtonCylinder"){
Move(0,1);
}
}
}
#endif
foreach (Touch touch in Input.touches) {
Ray ray = cam.ScreenPointToRay (touch.position);
RaycastHit hit = new RaycastHit ();
// Tell me what object is hit
if (Physics.Raycast (ray, out hit)) {
if (hit.collider.gameObject.name == "DownButtonCylinder") {
Move (0, -1);
}
if (hit.collider.gameObject.name == "RightButtonCylinder") {
Move (1, 0);
}
if (hit.collider.gameObject.name == "LeftButtonCylinder") {
Move (-1, 0);
}
if (hit.collider.gameObject.name == "UpButtonCylinder") {
Move (0, 1);
}
}
}
}
public void Move (float h, float v)
{
// Move the player around the scene.
if (m_amIdead || b_pauseMe) {
h = 0;
v = 0;
}
// Set the movement vector based on the axis input.
movement.Set (h, 0f, v);
// Normalise the movement vector and make it proportional to the speed per second.
movement = movement.normalized * speed * Time.deltaTime;
// Move the player to it's current position plus the movement.
playerRigidbody.MovePosition (transform.position + movement);
transform.forward = movement;
//transform.forward = Vector3.Normalize(new Vector3(h, 0f, v));
}
Comment
Answer by rpthomps · Oct 27, 2017 at 01:31 PM
I solved it by adding
if (h != 0 || v != 0)
transform.forward = Vector3.Normalize(new Vector3(h, 0f, v));