Implementation of control TouchScreen
I realized on the Device Management for Android using objects UI Canvas. But the trouble is that the character does not move smoothly, but choppy, with all the keyboard is working properly. The canvas I used the image element component Ivent Trriger, inside added component Pointer down. I believe this is due to the fact that the keyboard keys can be clamped, and these elements are not responsive to clamping. Actually the question is how to make a control on the screenshot to touch the character could not move jerkily, and the finger is on the button is pressed?
I enclose code: [HideInInspector] public bool facingRight = true; [HideInInspector]public bool jump = false;
public float moveForce = 365f;
public float maxSpeed = 5f;
public float jumpForce = 1000f;
public Transform groundCheck;
float hInput = 0;
private bool grounded = false;
private Animator anim;
private Rigidbody2D rb2d;
// Use this for initialization
void Awake () {
anim = GetComponent<Animator> ();
rb2d = GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void Update () {
grounded = Physics2D.Linecast (transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
if (Input.GetButton ("Jump") && grounded) {
jump = true;
}
}
public void Jump()
{
grounded = Physics2D.Linecast (transform.position, groundCheck.position, 1 << LayerMask.NameToLayer("Ground"));
if (Input.GetButton("Jump") && grounded) {
jump = true;
}
}
void FixedUpdate()
{
float h = Input.GetAxis ("Horizontal");
Debug.Log (h.ToString ());
anim.SetFloat ("Speed", Mathf.Abs (h));
if (h * rb2d.velocity.x < maxSpeed)
rb2d.AddForce(Vector2.right * h * moveForce);
if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
rb2d.velocity = new Vector2 (Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);
if (h > 0 && !facingRight)
Flip ();
else if (h < 0 && facingRight)
Flip ();
if(jump)
{
anim.SetTrigger ("Jump");
rb2d.AddForce (new Vector2(0f, jumpForce));
jump = false;
}
}
public void Tjump()
{
Debug.Log ("push");
if ( grounded) {
jump = true;
}
if(jump)
{
anim.SetTrigger ("Jump");
rb2d.AddForce (new Vector2(0f, 100));
jump = false;
}
}
public void StartMoving(float h)
{
Debug.Log ("push"+" " + h.ToString());
anim.SetFloat ("Speed", Mathf.Abs (h));
if (h * rb2d.velocity.x < maxSpeed)
rb2d.AddForce(Vector2.right * h * moveForce);
if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
rb2d.velocity = new Vector2 (Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);
if (h > 0 && !facingRight)
Flip ();
else if (h < 0 && facingRight)
Flip ();
}
void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
Your answer
Follow this Question
Related Questions
Flipping sprite resets on no input 1 Answer
Help: My timed enemy attack is not attacking at all. 0 Answers
How to check for colliders when teleporting the player in a 2D game? 0 Answers
Using passed function parameters instead of if statements to manage inputs 0 Answers
Why are my characters broken when I open a previous level? 0 Answers