- Home /
player movement using ui buttons
still struggling to do this and cant figure out why! My character moves fine on pc so now i want to have a mobile interface so ive set up some ui buttons and called my movement functions from a set of bools that tell the button what to do when set in the inspector. And ive put my bools in the pointer down and pointer up event triggers of the button but no joy can anyone help, this was my attempt using these bools in my playerControl script,
//movement for buttons
if (moveLeft && !moveRight)
{
movingLeft();
animationClips();
Debug.Log("move left");
}
if (moveRight && !moveLeft)
movingRight();
animationClips();
Debug.Log("move right");
if (myPlayerJump)
{
jump();
animationClips();
Debug.Log("jump");
}
if (!myPlayerJump)
{
}
and then turn them on and off
public void StopMeLeft()
{
moveLeft = false;
}
public void MoveMeRight()
{
moveRight = true;
}
public void StopMeRight()
{
moveRight = false;
}
public void playerJump()
{
myPlayerJump = true;
}
public void playerJumped()
{
myPlayerJump = false;
}
there all set up on the ui buttons in the inspector but the only one that works is jump? but it catapults me into a wall and i cant get down and the sound is like its scratching on a wall. heres my jump(); method
public void jump()
{
playerRigidbody.AddForce(0, jumpSpeed, 0);
source.PlayOneShot(jumpNoise, 1f);
isJumping = true;
}
my left and right use getAxis like this
public void movingLeft()
{
moveHorizontal = Input.GetAxis("Horizontal");
Vector3 movement = new Vector3(moveHorizontal, 0, 0);
playerRigidbody.AddForce(movement * speed);
if (moveHorizontal < 0)
{
jumpDirection = false;
moveDirection = false;
}
}
and you can ignore jumpDirection and moveDirection as they just control the animator. I set this in my player control attached to my player so on the button ive added a pointer up for moveMeLeft and a pointer down for stopMeLeft etc so as doing this didnt work i found a seperate script online that looked good but again it works (i can add debug logs that affect the player and see them firing) but it doesnt move my player, this script here
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class rightMovement : MonoBehaviour, IEventSystemHandler
{
public GameObject character;
public float maxSpeed = 10f;
bool buttonHeld = false;
playerControl playerScript;
float moving;
public void pressed(BaseEventData eventData)
{
buttonHeld = true;
}
public void notpressed(BaseEventData eventData)
{
buttonHeld = false;
}
void Start()
{
playerScript = character.GetComponent<playerControl>();
// moving = playerScript.moveHorizontal;
}
public void Update()
{
if (buttonHeld)
{
// Do stuff
Debug.Log("click" + playerScript.moveHorizontal);
// Move Character
}
else
Debug.Log("not click");
}
}