- Home /
Converted PC player controls to Mobile not working
Hi all,
You may have seen my other question in which i have still not found a solution. However i have made a test scene for pc development and it worked first time ¬¬ here is my code for animating and moving the character right on the pc ..
using UnityEngine;
using System.Collections;
public class runright : MonoBehaviour {
public Animator anim;
public GameObject Player;
// Use this for initialization
void Start () {
anim = gameObject.GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.D)){
anim.SetBool ("run_right", true);
Player.transform.Translate(Vector3.right * 8 * Time.smoothDeltaTime); // Player slowly moves to the right
}else{
anim.SetBool ("run_right", false);
}
}
}
OK and this works just as well with my left movement and animation too, not going to bother posting that as its only a few changes. Here is my script for the mobile equivalent...
using UnityEngine;
using System.Collections;
public class right_Movement : MonoBehaviour {
public Texture2D button1; // Inital texture for the button
public Texture2D button2; // Once pressed texture
public GameObject Player; // Declares the player from a gameobject
public int speed;
public Animator anim;
void Start ()
{
guiTexture.texture = button1; // gui texture is made into button1
anim = gameObject.GetComponent<Animator>();
}
void Update () // If the screen is touched
{
foreach (Touch touch in Input.touches)
{
if (guiTexture.HitTest(touch.position) && touch.phase != TouchPhase.Ended) // If the gui texture is touched then
{
guiTexture.texture = button2; // The button changes to button2
Player.transform.Translate(Vector3.right * speed * Time.smoothDeltaTime); // Player slowly moves to the right
anim.SetBool ("run_right", true);
}
else if (guiTexture.HitTest(touch.position) && touch.phase == TouchPhase.Ended) // until the player stops touching the screen
{
guiTexture.texture = button1; // gui texture reverts back to the original
anim.SetBool ("run_right", false);
}
}
}
}
When i play the game on my device, the idle animation is fine, 'pob' is doing his thing then i click on the right texture and he moves right still in the idle animation. Not like the pc port where it works perfectly.
This little 'bug' has taken more time to solve than i can afford haha ive coded all the game including ai which took long, but this little thing is driving me mad.
I really do appreciate all the help, thanks so much guys!
Answer by Dblfstr · Mar 21, 2014 at 07:31 PM
Try touchCount
if (guiTexture.HitTest(touch.position) && Input.touchCount > 0) // If the gui texture is touched then {
No luck, this does the exact same thing im afraid :( Thanks though!
Answer by koyima · Mar 22, 2014 at 12:03 AM
So the fix here is 1. Switch anim = gameObject.GetComponent();
becomes
anim = Player.GetComponent();
The foreach loop goes into an if statement based on the number of touches as Dblfstr suggests and the code in the else if goes into and else after that, so:
void Update () // If the screen is touched {
if ( Input.touchCount > 0 ) {
if (guiTexture.HitTest(touch.position)) // If the gui texture is touched then {
foreach (Touch touch in Input.touches) { guiTexture.texture = button2; // The button changes to button2
Player.transform.Translate(Vector3.right speed Time.smoothDeltaTime); // Player slowly moves to the right
anim.SetBool ("run_right", true);
}
} else // until the player stops touching the screen {
guiTexture.texture = button1; // gui texture reverts back to the original
anim.SetBool ("run_right", false); } } }