Проюлема с Instantiate -ом на в Unity?

179
06 декабря 2017, 21:56

В Unity на сцене есть игровой объект - имитирующий зеркало.

Вот его код:

public class MirrorS : MonoBehaviour {
public Camera MCamera;
public int TextureSize = 500;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Awake()
{
    MCamera.targetTexture.width = TextureSize;
    MCamera.targetTexture.height = TextureSize;
}
private void OnBecameInvisible()
{
    MCamera.enabled = false;
}
private void OnBecameVisible()
{
    MCamera.enabled = true;
}

}

Если вкратце - мне необходимо создавать копии этого зеркала.

Примерно так:

 class ParticleData
{
  public  ParticleData(Vector3 position, float rotation )
    {

        Instantiate(InstObject, position, new Quaternion(rotation, rotation, rotation, rotation));
    }
}

Где InstObject - это ссылка на нужный объект.

 List<Particle> Particles = new List<Particle>(10);

Причем Экземпляры ParticleData создаю в цикле: - если нажата левая кнопка мыши и i=10 -т.е каждый десятый

for (int i = 0; i <= MainEmit.particleCount; i++)
        {
    if (i == Particles.ToArray().Length && Input.GetButton("Fire1")) 
            {
              P = new Particle();
                int EmitParticle = Particles.LastIndexOf( P, i);//10
                MainEmit.Emit(EmitParticle); //испускаем последнюю частицу из списка
                float ParticleLifeTime = Recalculate(P).GetEnumerator().Current;
                              data = new ParticleData(P.position = new Vector3(P.position.x + Particle_v + ParticleLifeTime, P.position.y + Particle_v + ParticleLifeTime, P.position.z + Particle_v + ParticleLifeTime), P.rotation);
            }

Но при создании копии этого объекта - происходит ошибка:

Setting width of already created render texture is not supported! UnityEngine.RenderTexture:set_width(Int32) MirrorS:Awake() (at Assets/MirrorS.cs:16) UnityEngine.Object:Instantiate(Object, Vector3, Quaternion) ParticleData:.ctor(Vector3, Single) (at Assets/particleSystemEmiter.cs:89) particleSystemEmiter:Update() (at Assets/particleSystemEmiter.cs:37)

Setting height of already created render texture is not supported! UnityEngine.RenderTexture:set_height(Int32) MirrorS:Awake() (at Assets/MirrorS.cs:17) UnityEngine.Object:Instantiate(Object, Vector3, Quaternion) ParticleData:.ctor(Vector3, Single) (at Assets/particleSystemEmiter.cs:89) particleSystemEmiter:Update() (at Assets/particleSystemEmiter.cs:37)

т.е оно как бы не может присвоить ту же ширину и высоту текстуры новосоздаваемому объекту?

Но ведь TextureSize - это можно сказать что "константа" при создании объекта? - как при следующем Instantiate - с ним могут возникать проблемы?

Answer 1

Для начала, для каждого зеркала нужна своя камера со своей renderTexture, а ты все в одной меняешь. Затем, если renderTexture уже создалась, то поменять ей размеры уже нельзя. Только сделав Release и new RenderTexture.

READ ALSO
Почему в .net core 2.0 нет интерфейса IMiddleware?

Почему в .net core 2.0 нет интерфейса IMiddleware?

Я сейчас начал изучениеNET Core 2

195
Текст разбить на массив из слов

Текст разбить на массив из слов

Нужно текст разбить на массив из слов - подобное делается c помощью Split ?

247
BSOD при работе программы под .NET 4.6.2

BSOD при работе программы под .NET 4.6.2

Есть программа ("Электронной очереди") написанная на C# под фреймворкNET 4

185
Как задать значение ComboBox SelectedValue

Как задать значение ComboBox SelectedValue

Здравствуйте! Помогите пожалуйстаУ меня есть ComboBox в форме

267