@Nepro

Не запускается анимация открытие и закрытие двери, как исправить?

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

UnityEngine.Animator:Play (string,int,single)
Door:PlayAnimationDoor () (at Assets/Door System Mobile/Door.cs:25)
DoorRaycast:Door () (at Assets/Door System Mobile/DoorRaycast.cs:75)
UnityEngine.EventSystems.EventSystem:Update ()


Вот ошибка в красном треугольника так скажем:

EndLayoutGroup: BeginLayoutGroup must be called first.
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)


Код
<br>
using System.Collections;<br>
using System.Collections.Generic;<br>
using UnityEngine;<br>
using UnityEngine.UI;<br>
<br>
public class DoorRaycast : MonoBehaviour<br>
{<br>
    [SerializeField] private int rayLength = 5;<br>
    [SerializeField] private LayerMask layerMaskInteract;<br>
    [SerializeField] private string excludelayerName = null;<br>
<br>
    [SerializeField] private GameObject doorButton;<br>
<br>
    private Door raycastedDoor;<br>
<br>
    [SerializeField] private Image Crosshair = null;<br>
    private bool isCrosshairActive;<br>
    private bool doOnce;<br>
<br>
    private const string interactableTag = "Door";<br>
<br>
    private void Update()<br>
    {<br>
        RaycastHit hit;<br>
        Vector3 fwd = transform.TransformDirection(Vector3.forward);<br>
<br>
        int mask = 1 << LayerMask.NameToLayer(excludelayerName) | layerMaskInteract.value;<br>
<br>
        if(Physics.Raycast(transform.position, fwd, out hit, rayLength, mask))<br>
        {<br>
            // Door<br>
            if (hit.collider.CompareTag(interactableTag))<br>
            {<br>
                if (!doOnce)<br>
                {<br>
                    raycastedDoor = hit.collider.gameObject.GetComponent();<br>
                    CrosshairChange(true);<br>
                }<br>
<br>
                doorButton.SetActive(true);<br>
                isCrosshairActive = true;<br>
                doOnce = true;<br>
            }<br>
            else<br>
            {<br>
                doorButton.SetActive(false);<br>
            }<br>
        }<br>
<br>
        else<br>
        {<br>
            if (isCrosshairActive)<br>
            {<br>
                CrosshairChange(false);<br>
                doOnce = false;<br>
            }<br>
        }<br>
    }<br>
<br>
    void CrosshairChange(bool on)<br>
    {<br>
        if(on && !doOnce)<br>
        {<br>
            Crosshair.color = Color.red;<br>
        }<br>
        else<br>
        {<br>
            Crosshair.color = Color.white;<br>
            isCrosshairActive = false;<br>
        }<br>
    }<br>
<br>
    public void Door()<br>
    {<br>
        raycastedDoor.PlayAnimationDoor();<br>
    }<br>
}<br>

<br>
using System.Collections;<br>
using System.Collections.Generic;<br>
using UnityEngine;<br>
<br>
public class Door : MonoBehaviour<br>
{<br>
    private Animator doorAnim;<br>
<br>
    private bool doorOpen = false;<br>
<br>
    private void Awake()<br>
    {<br>
        doorAnim = gameObject.GetComponent();<br>
    }<br>
<br>
    public void PlayAnimationDoor()<br>
    {<br>
        if (!doorOpen)<br>
        {<br>
            doorAnim.Play("Open", 0, 0.0f);<br>
            doorOpen = true;<br>
        }<br>
        else<br>
        {<br>
            doorAnim.Play("Close", 0, 0.0f);<br>
            doorOpen = false;<br>
        }<br>
    }<br>
}<br>
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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