Почему при запуске игры скрипт отключается?Мне нужно включить его после запуска игры - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть готовое имя пуля. Я вытащил сборный дом и положил его под оружие. Сценарий включен, но при запуске игры сценарий выключен, и мне нужно включить его снова.

На скриншоте префаб пули посередине. Слева в иерархии пуля находится под SciFiRifle (клон), справа в Инспекторе, внизу есть скрипт с именем Shooting.

Сценарий включен.

Но потом, когда я запускаю игру, скрипт почему-то отключается: Сначала по какой-то причине мне также нужно свернуть SciFiRifle (клон), чтобы снова увидеть пулю в иерархии:

Need to collapse

И скрипт выключен:

Turned off

Я не могу понять, почему он скрывает пулю в иерархии и отключает скрипт при запуске игры.

Сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooting : MonoBehaviour
{
    public GameObject projectile;
    public Animator anim;

    private void Start()
    {
        anim.SetBool("Shooting", true);
    }

    private void Update()
    {
        if (anim.GetBool("Shooting") == true)
        {
            GameObject bullet = Instantiate(projectile, transform.position, Quaternion.identity) as GameObject;
            bullet.GetComponent<Rigidbody>().AddForce(transform.forward * 10, ForceMode.VelocityChange);
        }
    }
}

ОБНОВЛЕНИЕ:

Я нашел, что создает проблему. Пока нет, как это решить. Вторым потомком в Иерархии Объекта является Sci-Fi_Soldier.

И к Sci-Fi_Soldier прикреплены некоторые скрипты, один из них - Player Controller, это не мой скрипт.

Некоторые свойства этого скрипта в Инспекторе получают Right Gun, который я назначил для Right Fun - SciFiRifle (Clone), а Bullet - потомок SciFiRifle (Clone).

Вы можете видеть это отмечено желтым:

Gun

Если я удаляю этот скрипт на всех контроллерах проигрывателя, сценарий «Стрельба по пуле» останется включенным и свернется.

Я не могу понять, в чем причина проблемы в скрипте Player Controller:

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Animator))]
public class PlayerController : MonoBehaviour {

    public Transform rightGunBone;
    public Transform leftGunBone;
    public Arsenal[] arsenal;

    private Animator animator;

    void Awake() {
        animator = GetComponent<Animator> ();
        if (arsenal.Length > 0)
            SetArsenal (arsenal[0].name);
        }

    public void SetArsenal(string name) {
        foreach (Arsenal hand in arsenal) {
            if (hand.name == name) {
                if (rightGunBone.childCount > 0)
                    Destroy(rightGunBone.GetChild(0).gameObject);
                if (leftGunBone.childCount > 0)
                    Destroy(leftGunBone.GetChild(0).gameObject);
                if (hand.rightGun != null) {
                    GameObject newRightGun = (GameObject) Instantiate(hand.rightGun);
                    newRightGun.transform.parent = rightGunBone;
                    newRightGun.transform.localPosition = Vector3.zero;
                    newRightGun.transform.localRotation = Quaternion.Euler(90, 0, 0);
                    }
                if (hand.leftGun != null) {
                    GameObject newLeftGun = (GameObject) Instantiate(hand.leftGun);
                    newLeftGun.transform.parent = leftGunBone;
                    newLeftGun.transform.localPosition = Vector3.zero;
                    newLeftGun.transform.localRotation = Quaternion.Euler(90, 0, 0);
                }
                animator.runtimeAnimatorController = hand.controller;
                return;
                }
        }
    }

    [System.Serializable]
    public struct Arsenal {
        public string name;
        public GameObject rightGun;
        public GameObject leftGun;
        public RuntimeAnimatorController controller;
    }
}

Он скрывает Пуля в Иерархии, а также отключает скрипт Съемки. Но сценарий Съемки не используется нигде в Иерархии или каких-либо других сценариях. Но, пытаясь удалить сценарии, я обнаружил, что этот сценарий создает проблему с Bullet.

Это скриншот инспектора SciFiRifle (клон):

SciFiRifle(Clone)

1 Ответ

1 голос
/ 18 апреля 2019

Скрипт PlayerController фактически уничтожает вашу Sci-fi Rifle (ту, которую вы положили в префаб), а затем создаете новую копию с помощью той, которая предоставлена ​​в поле Right Gun скрипта PlayerController (поэтому вам нужно чтобы свернуть его снова, потому что то, что вы видите, является новым экземпляром сборного ружья).

Строки в PlayerController, которые описывают это поведение:

                if (rightGunBone.childCount > 0)
                    Destroy(rightGunBone.GetChild(0).gameObject);

Который уничтожает винтовку, которую вы положили в префаб. И:

                if (hand.rightGun != null) {
                    GameObject newRightGun = (GameObject) Instantiate(hand.rightGun);
                    newRightGun.transform.parent = rightGunBone;

Создает новый экземпляр префаба, который вы указали в поле Right Gun, заменяя винтовку, которую вы положили в префаб.

Вы можете попробовать: либо удалить префаб из поля PlayerController, либо удалить Sci-Fi Rifle из префаба.

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