@PanLipton

Что делать если игрок не хочет прыгать Unity2D, C#?

Доброго времени суток, не знаю что делать, в коде ошибок нету, юнити не жалуется, вроде бы сделал всё правильно, персонаж двигается по горизонтали, но отказывается прыгать(вообще).
Это код игрока с проверкой касания спрайта.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

        public class PlayerController : MonoBehaviour
{
	Joystick joystick;
	Rigidbody2D rb;
	public bool ground;
	[SerializeField] int speed = 5;
	// Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D> (); 
        joystick = GameObject.Find("joystick").GetComponent<Joystick>();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    void FixedUpdate(){
    	transform.Translate(transform.right * joystick.Horizontal * speed * Time.fixedDeltaTime);
    	if(joystick.Vertical > 0.5f)
    	   Jump();
    	
    }
    void Jump()
    {
    	if(ground == true)
    		rb.AddForce(transform.up * 10, ForceMode2D.Impulse);
    	
    }
}


Это сам код проверки земли под ногами.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DetectGround : MonoBehaviour
{
	void OnTriggerStay2D(Collider2D collision){
    	if (collision.gameObject.tag == "ground")
    	GetComponentInParent<PlayerController>().ground = true;

    }
	void OnTriggerExit2D(Collider2D collision){
    	if (collision.gameObject.tag == "ground")
    	GetComponentInParent<PlayerController>().ground = false;
    }
}
  • Вопрос задан
  • 923 просмотра
Решения вопроса 1
@realmadness
Зачем вы написали через OnTrigger? У вас персонаж триггерный? Или платформа?
Попробуйте сделать проверку земли вот так :
private void OnCollisionEnter2D(Collision2D collision)
private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground")
            ground = true;
    }
    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground")
            ground = false;
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
DanielMcRon
@DanielMcRon
C# && Unity
Отдебажьте код, посмотрите где он не проходит. Легко же это. Поставьте вывод в консоль там где ontrigger2d, если там не выводится - значит ошибка там. Может вы тег на землю не поставили
Ответ написан
Griboks
@Griboks Куратор тега C#
Советую вам использовать Raycast вместо проверки земли.

void Jump()
    {
    	if(physics2d.Raycast()) //Тут уточнить в документации
    		rb.AddForce(transform.up * 10, ForceMode2D.Impulse);
    	
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы