Проблема с проверкой на нахождение на земле. - Форум - Все для Unity3d

Все для Unity3d> Проблема с проверкой на нахождение на земле. - Форум>
Страница 1 из 11
Форум » Unity » Вопросы » Проблема с проверкой на нахождение на земле.
Проблема с проверкой на нахождение на земле.
artem231Дата: Воскресенье, 13.03.2016, 12:49 | Сообщение # 1
Новый писатель
Группа: Пользователи
Статус: Offline
Вот скрипт проверки:

Код
using UnityEngine;
using System.Collections;

public class Grounded : MonoBehaviour {
   
   public Controller player;

    void Start(){

   player = GameObject.FindWithTag("Player").gameObject.GetComponentInParent<Controller>();
      
    }

    void OnTriggerEnter(Collider col){
   
   player.Grounded = true;
   
    }   

    void OnTriggerStay(Collider col){
   
   player.Grounded = true;
   
    }

    void OnTriggerExit(Collider col){
   
   player.Grounded = false;
   
    }

}
Скрипт персонажа:

Код
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Controller : MonoBehaviour {

    public float speed;
    public Text countText;
    public Text winText;
    public float fallSpeed;
    public bool Grounded;

    private Rigidbody rb;
    private int count;

    void Start ()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText ();
        winText.text = "";
    }

    void FixedUpdate ()
    {
         float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");
        
        float jumpHeight = 0;
        jumpHeight = Mathf.Lerp(jumpHeight, 0, fallSpeed);
        if(Input.GetButtonDown("Jump") && jumpHeight == 0 && Grounded == true)
              jumpHeight += 50;

        Vector3 movement = new Vector3 (moveHorizontal, jumpHeight, moveVertical);

        rb.AddForce (movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag ( "Pick Up"))
        {
            other.gameObject.SetActive (false);
            count = count + 1;
            SetCountText ();
        }
    }

    void SetCountText ()
    {
        countText.text = "Count: " + count.ToString ();
        if (count >= 1)
        {
            winText.text = "You Win!";
        }
    }

}
Я сделал проверки на нахождение персонажа на земле с помощью триггера, но когда я добавляю на сцену другой триггер, то код конфликтует и персонаж вечно на земле, иногда не конфликтует и всё работает. Как только я добавляю второй триггер для второй поверхности, чтобы проверять и там на нахождение на земле, и кидаю туда скрипт проверки, то опять происходит конфликт и персонаж вечно на земле и бесконечно можно прыгать. Может я не правильно скрипт написал. Прошу помочь решить проблему. Заранее благодарю. Я вот думаю просто с помощью триггера не лучший способ проверять.


Сообщение отредактировал artem231 - Воскресенье, 13.03.2016, 13:01
 
OkAyДата: Воскресенье, 13.03.2016, 15:45 | Сообщение # 2
Новый писатель
Группа: Пользователи
Сообщений: 35
Статус: Offline
А зачем тебе триггеры? Используй CharacterController. Там есть чем проверять находится ли игрок на земле:

Код
gameObject.GetComponent<CharacterController>().isGrounded
 
artem231Дата: Воскресенье, 13.03.2016, 17:19 | Сообщение # 3
Новый писатель
Группа: Пользователи
Статус: Offline
В том и дело, что я не использую CharacterController. У меня игра идёт про сферу. Я могу тупить, простите.
 
Форум » Unity » Вопросы » Проблема с проверкой на нахождение на земле.
Страница 1 из 11
Поиск:
Свернуть
Развернуть
Необходима авторизация
0
ТОП-5 САЙТА
НОВЫЕ ИГРЫ
ГОРЯЧИЕ ТЕМЫ
СЛУЧАЙНЫЕ ФАЙЛЫ