Конфликт двух скриптов

Программирование на Юнити.

Конфликт двух скриптов

Сообщение marietta 21 сен 2023, 04:34

Всем привет, сейчас написал скрипт для управления оптикой машины, добавил его рядом со основным скриптом управления машиной. В итоге если в инспекторе скрипт управления оптикой выше, чем основной, то основной не может найти в дочерних объектах материал кузова, если основной скрипт выше, чем управление оптикой, то скрипт не находит ещё пару элементов с материалом стоп-сигналов.

Основной
Синтаксис:
Используется csharp
    private void Awake()
    {
        DriverID = -1;
 
        VehicleRigidbody = GetComponent<Rigidbody>();
 
        vehicleStandardInput = GetComponent<VehicleStandardInput>();
 
        vehicleStandardInput.enabled = false;
 
        vehicleEffects = GetComponent<VehicleTireEffects>();
 
        vehicleEffects.enabled = false;
 
        VehicleController = GetComponent<VehicleController>();
 
        vehicleLightsController = GetComponent<IVehicleLightsController>();
 
        foreach (Renderer renderer in GetComponentsInChildren<Renderer>())
        {
            List<Material> materials = new();
            renderer.GetSharedMaterials(materials);
 
            for (int i = 0; i < materials.Count; i++)
            {
                if(materials[i] == vehicleMaterial && !PrimaryColorMaterials.Contains(materials[i]))
                    PrimaryColorMaterials.Add(renderer.materials[i]);
            }
        }
 
        m_NetworkPosition = transform.position;
        m_NetworkRotation = transform.rotation;
    }


Оптика
Синтаксис:
Используется csharp
    private void Awake()
    {
        TurnLightsColor = new(1f, 255 / 165, 0);
        BrakeLightsColor = new(1f,0,0);
        FrontHeadLightsColor = new(1,1,1);
 
        List<Material> newLeftBlinkerMaterial = new();
 
        List<Material> newRightBlinkerMaterial = new();
 
        List<Material> newBrakeLightsMaterial = new();
 
        List<Material> newHeadLightsMaterial = new();
 
        foreach (Renderer renderer in GetComponentsInChildren<Renderer>())
        {
            List<Material> sharedMaterials = new();
            renderer.GetSharedMaterials(sharedMaterials);
 
            List<Material> materials = new();
            renderer.GetMaterials(materials);
 
            for (int i = 0; i < materials.Count; i++)
            {
                int leftBlinkerMaterialIndex = LeftBlinkerMaterial.IndexOf(sharedMaterials[i]);
                int rightBlinkerMaterialIndex = RightBlinkerMaterial.IndexOf(sharedMaterials[i]);
                int headLightsMaterialIndex = HeadLightsMaterial.IndexOf(sharedMaterials[i]);
                int brakeLightsMaterialIndex = BrakeLightsMaterial.IndexOf(sharedMaterials[i]);
 
                if (leftBlinkerMaterialIndex != -1)
                    newLeftBlinkerMaterial.Add(materials[i]);
 
                if (rightBlinkerMaterialIndex != -1)
                    newRightBlinkerMaterial.Add(materials[i]);
 
                if (brakeLightsMaterialIndex != -1)
                    newBrakeLightsMaterial.Add(materials[i]);
 
                if (headLightsMaterialIndex != -1)
                    newHeadLightsMaterial.Add(materials[i]);
 
                if(leftBlinkerMaterialIndex != -1 || rightBlinkerMaterialIndex != -1 || headLightsMaterialIndex != -1 || brakeLightsMaterialIndex != -1)
                    InitialMaterialColors.Add(materials[i], materials[i].color);
            }
        }
 
        LeftBlinkerMaterial = newLeftBlinkerMaterial;
        RightBlinkerMaterial = newRightBlinkerMaterial;
        BrakeLightsMaterial = newBrakeLightsMaterial;
        HeadLightsMaterial = newHeadLightsMaterial;
    }
marietta
UNец
 
Сообщения: 1
Зарегистрирован: 21 сен 2023, 04:29

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17