Сборных мобов в игре на Unity не go на телефоне - PullRequest
0 голосов
/ 21 июня 2020

Произошла очень интересная ошибка с игровыми персонажами, на первом уровне они спокойно ходят и все ок, а на втором go только в редакторе, а после компиляции их уже нет. Ai навигация существует. Персонаж должен найти ... по тегу может он на сцене. В чем может быть проблема? ошибка только на втором уровне и только после сборки моб скрипта (У них нет go, они не атакуют при подходе. Так что либо не видят, либо возникает ошибка в скрипте на телефоне)

using System.Collections;
using UnityEngine;
using UnityEngine.AI;
public class EmenScript: MonoBehaviour
{
    public NavMeshAgent agent;
    public Animator animator;
    public GameObject zombieObject;
    private Transform player;
    private float curr_time;
    private int xp = 100;
    void Start()
    {
        player = GameObject.FindGameObjectsWithTag("Player")[0].transform;
        StartCoroutine(findPath());
        StartCoroutine(playerDetected());
        curr_time = 0f;
    }
    public void damage()
    {
        if(xp == 0)
        {
            gameObject.transform.Find("Xp/Cube/").gameObject.active = false;
            StopAllCoroutines();
            agent.enabled = false;
            animator.SetTrigger("death");
            Destroy(zombieObject, 30f);
        } else {
            xp = xp > 15 ? xp - 15 : 0;
            Transform xpp = gameObject.transform.Find("Xp/Cube/XpLine").transform;
            xpp.localScale = new Vector3(xpp.localScale.x, xpp.localScale.y, xp / 100f);
            xpp.localPosition = new Vector3(xpp.localPosition.x, xpp.localPosition.y, (0.97f - xpp.localScale.z) / 2);
        }
    }
    public void damageFull()
    {
        gameObject.transform.Find("Xp/Cube").gameObject.active = false;
        StopAllCoroutines();
        agent.enabled = false;
        animator.SetTrigger("death");
        Destroy(zombieObject, 30f);
    }

    IEnumerator playerDetected()
    {
        while(true)
        {
            if(player == null)
            {
                break;
            }
            if(player.GetComponent<UserController>().xp <= 0)
            {
                agent.GetComponent<NavMeshAgent>().isStopped = true;
                animator.SetBool("walk", false);
            }
            if(Vector3.Distance(transform.position, player.position) < 1.2f)
            {
                animator.SetTrigger("attack");
                curr_time -= Time.deltaTime;
                if(curr_time <= 0)
                {
                    if(player.GetComponent<UserController>().xp - 25 > 0)
                    {
                        player.GetComponent<UserController>().xp -= 25;
                    }
                    else
                    {
                        player.GetComponent<UserController>().xp = 0;
                    }
                    curr_time = 0.5f;
                }
            }
            yield return new WaitForSeconds(.3f);
        }
    }
    IEnumerator findPath()
    {
        while(true)
        {
            if(player.GetComponent<UserController>().xp > 0)
            {
               
                if(Vector3.Distance(transform.position, player.position) < 40f)
                {
                    animator.SetBool("walk", true);
                    if(player && agent.isActiveAndEnabled)
                    {
                        agent.GetComponent<NavMeshAgent>().isStopped = false;
                        agent.SetDestination(player.position);
                    }
                } else {
                    agent.GetComponent<NavMeshAgent>().isStopped = true;
                    animator.SetBool("walk", false);       
                }
            }
            yield return new WaitForSeconds(0.2f);
        }
    }
}

1 Ответ

0 голосов
/ 21 июня 2020

Думаю, ошибка должна быть связана с изменением сцены, но мне нужно увидеть скрипт и уровни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...