Также есть проблема с установкой видимости нужного лода в момент загрузки(основная проблема вроде бы).
При использовании индекса (когда он в нужном диапазоне) - такой же эффект как и без него(при количестве ассетов больше 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; //единственный обязательный
}
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);
}
}
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);
}
}