#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