проблемы с джойстиком для Android

#c#

#c#

Вопрос:

Я создаю 2D платформер для Android. Я хотел добавить джойстик. Я сделал это, но мой персонаж не может прыгать, только летать. Как я могу изменить это в своем скрипте? Итак, я пытаюсь найти хороший учебник, в котором объясняется, как управлять персонажем в 2D-игре. Но все они устарели и не работают.Я новичок в gamedev, так что…

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class joystick : MonoBehaviour {
[SerializeField]
private GameObject circle, dot;
private Rigidbody2D rb;
private float moveSpeed;
private Touch oneTouch;
private Vector2 touchPosition;
private Vector2 moveDirection;
public Transform cirTarg;
public float radCir=0.3f;


// Use this for initialization
void Start () {
    rb = GetComponent<Rigidbody2D>();
    circle.SetActive (false);
    dot.SetActive (false);
    moveSpeed = 3f;

}

// Update is called once per frame
void Update () {
    if (Input.touchCount > 0){
        oneTouch = Input.GetTouch (0);
        touchPosition = Camera.main.ScreenToWorldPoint (oneTouch.position);
        switch (oneTouch.phase) {
        case TouchPhase.Began:
            circle.SetActive (true);
            dot.SetActive (true);
            circle.transform.position = touchPosition;
            dot.transform.position = touchPosition;
            break;
        case TouchPhase.Stationary:
            MovePlayer ();
            break;
        case TouchPhase.Moved:
            MovePlayer ();
            break;
        case TouchPhase.Ended:
            circle.SetActive (false);
            dot.SetActive (false);
            rb.velocity = Vector2.zero;
            break;
        }
    }
}
private void MovePlayer(){
        dot.transform.position = touchPosition;
        dot.transform.position = new Vector2 (
            Mathf.Clamp (dot.transform.position.x,
                circle.transform.position.x - 0.9f,
                circle.transform.position.x   0.9f),
            Mathf.Clamp (dot.transform.position.y,
                circle.transform.position.y - 0.9f,
                circle.transform.position.y   0.9f));
        moveDirection = (dot.transform.position - circle.transform.transform.position).normalized;
    if (dot.transform.localPosition.x != 0) {
        rb.velocity = moveDirection * moveSpeed;
    } else if (dot.transform.localPosition.y > 0) {
            jump ();
        }
}
bool isGround(){
    Collider2D[] gh=Physics2D.OverlapCircleAll (cirTarg.position,radCir);
    int j = 0;
    for (int i = 0; i < gh.Length; i  ) {
        if (gh [i].gameObject != gameObject)
            j  ;
    }
    return j > 0;
}
void jump(){
    if (isGround())
        rb.AddForce (transform.up * 10f, ForceMode2D.Impulse);
}
 

}

Комментарии:

1. разве вы не можете просто поднять его вверх, и сила тяжести опустит его? это выполнит ваш прыжок

2. @MohammadAli как я могу это сделать?

3. попробуйте это rb.velocity = new Vector3(0, 10, 0);

Ответ №1:

Вместо того, чтобы придавать ему силу, попробуйте придать ему скорость вверх, а гравитация сделает все остальное, и он выполнит нужный вам прыжок

Для этого замените

 rb.AddForce (transform.up * 10f, ForceMode2D.Impulse);
 

С

 rb.velocity = new Vector3(0, 10, 0); //with 10 here the upward speed you need