A
A
Alex Kolyhov2020-05-17 01:24:18
C++ / C#
Alex Kolyhov, 2020-05-17 01:24:18

Why can't I do the action again?

I am new to Unity. The game has the ability, so to speak, to bite off trees, carry them and throw them. Android game. I have a problem. Everything works well until I drop the tree. After this action, I cannot "bite off" a new one. Please tell me what could be the problem and how it can be solved. I commented all the code as clearly as I could:

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Rigidbody))]

public class Bite : MonoBehaviour
{
  public BoxCollider up;						// Box Collider на голове модельки персонажа

  public Animator player_animator;			// Аниматор для персонажа
  
  public Transform playerTreePoint;			// Точка к которой цепляються деревья
  
  public Button biteButton;                   // Кнопка "Кусать"
  public Button dropButton;                   // Кнопка "Бросить"
  public GameObject dropButtonForEnabled;     // Кнопка "Бросить" для отключения
  public GameObject biteButtonForEnabled;     // Кнопка "Кусать" для отключения

  private float startTime = 0;				// Время начала таймера
  public float endTime;						// Время конца таймера

  private bool animationTimeLeft = false;     // Анимация укуса закончилась
  public bool treeInThePoint = false;         // Прикрепить дерево к точке на персонаже
  public bool biteTree = false;               // Персонаж возле дерева
  private bool biteKlick = false;             // Нажата кнопка "Кусать"

  private Collider tree;                      // ???

  void BiteTaskOnClick()                      // Кнопка "Кусать" нажата
  {
    biteKlick = true;
  }

  void DropTaskOnClick()                      // Кнопка "Бросить" нажата
  {
    treeInThePoint = false;
    up.enabled = false;
    biteTree = false;
    
    dropButtonForEnabled.SetActive(false);
    biteButtonForEnabled.SetActive(true);
  }

  void Start()                                // Вызывается при старте
  {
    dropButtonForEnabled.SetActive(false);	// Отключение кнопки бросить

    up = GetComponent<BoxCollider>();		// Делаем Box Collider up бокс колайдером для скрипта

    Button btn = biteButton.GetComponent<Button>();     // Делает кнопку "Кусать" кнопкой для скрипта
    btn.onClick.AddListener(BiteTaskOnClick);           // Обрабатывает нажатие кнопки "Кусать"

    Button dbtn = dropButton.GetComponent<Button>();     // Делает кнопку "Бросить" кнопкой для скрипта
    dbtn.onClick.AddListener(DropTaskOnClick);           // Обрабатывает нажатие кнопки "Бросить"

  }


  void OnTriggerEnter(Collider other)         // Вызывается если игрок тронет что - то
  {
    // Проверяет, что игрок трогает
    if (other.gameObject.name == "Terrain") 
    { }
    else
    {
      tree = other;
      biteTree = true;
    }

  }

  private void OnTriggerExit(Collider other)  // Вызываеться если персонаж отходит от дерева
  {
    biteTree = false;
  }

  void FixedUpdate()								// Вызывается всё время
  {
    if (biteTree == true && biteKlick == true)  // Если персонаж возле дерева и нажал на кнопку "Кусать"
    {
      treeInThePoint = true;					// Прикрепить дерево к точке на персонаже
    }

    if (treeInThePoint == true)					// Была команда прикрепить дерево к точку на персонаже?
    {
      biteButtonForEnabled.SetActive(false);	// Выключение кнопки "Кусать"

      if (animationTimeLeft == true)			// Запускаеться если анимация укуса закончится
      {
        tree.gameObject.transform.position = playerTreePoint.position;  // Прикрепляет дерево к точке на персонаже
      }
      up.enabled = false;						// Выключает Box Collider персонажу, что бы он не подбирал другие деревья

      dropButtonForEnabled.SetActive(true);   // Включение кнопки "Бросить"
    }


    if (biteKlick == true)									// Проверка нажата ли кнопка "Кусать"
    {
      player_animator.SetBool("Bite On", true);			// Включает анимацию укуса

      animationTimeLeft = false;                          // "Время анимации не закончено"

      startTime += 0.01f * Time.deltaTime;                // Запуск таймера для анимации
      if (startTime >= endTime)                           // Проверка, время прошло?
      {
        animationTimeLeft = true;                       // Анимаци закончилась
        player_animator.SetBool("Bite On", false);      // Выключает анимацию
        biteKlick = false;                              // Говорит, что кнопка "Кусать" не нажата
        startTime = 0;                                  // Сбрасывает таймер
      }

    }

    





  }

}


The biteTree variable is not re-enabled. I think that the problem is in the Collider other, I think that he remembered the object once, and he doesn’t want to remember the other, BUT I don’t know, these are just my guesses. I don't know C# at all, so don't take them seriously.
Please help me solve this problem.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question