В начале счетчик будет = 50, и он создаст объект, затем он будет уменьшен до = 0, и в этот момент объект, который мы только что создали, должен быть удален
1 . Когда вы создаете экземпляр объекта, подобного этому GameObject Ray = new GameObject();
, вам нужно сделать переменную GameObject Ray
глобальной переменной, чтобы вы могли обращаться к ней и впоследствии уничтожить ее.Это лучше, чем искать его с помощью GameObject.Find
, чтобы уничтожить его.
2 . Вам не нужно большинство переменных в вашем коде.То, что вы делаете, можно упростить с помощью Time.frameCount
, проверив, является ли Time.frameCount % 50
0
.
3 . Не называйте вашу переменную Ray
потому что существует Unity API с таким именем.
Упрощенная версия кода для того, что вы пытаетесь сделать.DrawRay удален, но вы можете добавить это.
GameObject obj = null;
void Start()
{
//Create new one
obj = new GameObject();
}
void Update()
{
//Check if 50 frames has passed
if (Time.frameCount % 50 == 0)
{
//Destroy old one
if (obj != null)
DestroyImmediate(obj);
//Create new one again
obj = new GameObject();
}
}
Не используйте этот код в вашей функции DrawRay
.В вашем коде будет утечка памяти при каждом создании нового Material
.Используйте Объединение объектов , чтобы повторно использовать объекты.