Страница 1 из 1

Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 30 май 2011, 09:38
yursiv
Хотелось бы узнать мнения по поводу производительности и организации системки лодов.

Также есть проблема с установкой видимости нужного лода в момент загрузки(основная проблема вроде бы).
При использовании индекса (когда он в нужном диапазоне) - такой же эффект как и без него(при количестве ассетов больше 1), т.е. беспорядочно как-то включаются лоды В МОММЕНТ ЗАГРУЗКИ ЛЕВЕЛА.
Изображение
Т.е. установка стартового индекса для нужного лода не работает.

Стартовый индекс - временное решение - позже хочу сделать установку начального лода в зависимости от положения камеры/игрока; но пока и так не работает
---------------------------------------------
Ассет
http://rghost.ru/8541131
---------------------------------------------
Изображение
---------------------------------------------
LODManager Script
Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;

public class LODManager : MonoBehaviour
{
    public List<MeshRenderer> Meshes; //только для Editor скрипта - дублируется в каждом лоде
    public List<int> Distances;  //только для Editor скрипта - для установки размеров коллайдеров
    public int StartIndex;  //единственный обязательный
}

 


-------------------------------------------------------------------------------------------------------------------
LODTrigger Script
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections.Generic;

public class LODTrigger : MonoBehaviour
{
    public MeshRenderer CurrentMesh;
    public List<MeshRenderer> AllMeshes;
    public int CurrentMeshIndex;

    private bool _isNotLast;
    private MeshRenderer _nextLodMesh;

    void Awake()
    {
        AllOff();

        _isNotLast = CurrentMeshIndex < AllMeshes.Count - 1;
        if (_isNotLast)
            _nextLodMesh = AllMeshes[CurrentMeshIndex + 1];

        //ЭТО НЕ РАБОТАЕТ!!!!!!-----------------------------------
       
        var index = transform.parent.gameObject.GetComponent<LODManager>().StartIndex;
        //Если стартовый индекс -1 или больше (количество лодов -1) - все  MeshRenderer изначально выключены
        if (index > -1 && index < AllMeshes.Count)
            AllMeshes[index].enabled = true;

        //ЭТО НЕ РАБОТАЕТ!!!!!!-----------------------------------
    }

    void OnTriggerEnter()
    {
        AllOff();
        CurrentMesh.enabled = true;
    }

    void OnTriggerExit()
    {
        AllOff();
        if (_isNotLast)
            _nextLodMesh.enabled = true;
    }

    private void AllOff()
    {
        AllMeshes.ForEach(mesh => mesh.enabled = false);
    }

}
 

Re: Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 31 май 2011, 11:58
burlak
Попробуйте обойтись без индекса - просто укажите ЛОД напрямую.

Re: Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 31 май 2011, 17:13
yursiv
Помучился немного и решил делать все-таки через FixedUpdate() . Гораздо проще кодить....да и результат устраивает.

Re: Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 31 май 2011, 17:17
Neodrop
1. Не стоит использовать LINQ для таких частых операций как у вас. Теряете производительность. Лучше заменить на for
2. Использование коллайдеров может сильно помешать работе с лучами. Имейте в виду.

Re: Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 31 май 2011, 22:37
gnoblin
а как колайдеры мешают лучам?

Re: Лоды на коллайдерах(триггерах)

СообщениеДобавлено: 01 июн 2011, 00:39
Neodrop
Слава, тебе просто нечего делать? (popcorn)