Создание, перемещение и удаление примитивов!(РЕШЕНО!)

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

Создание, перемещение и удаление примитивов!(РЕШЕНО!)

Сообщение rc2f6 12 июл 2010, 14:38

Я хотел создать несколько шариков чтоб они переместились и удалить их, после снова создать, переместить и удалить и так постоянно! Но что то неполучается и несовсем понимаю почему! :-w

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

public class Test : MonoBehaviour
{
        public float countshere = 0F;
        public float xp = 0F;
        public float yp = 0.5F;
        public float zp = 0F;

        void Update()
        {
                if (countshere < 2)
                {
                        GameObject sphr = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        sphr.transform.position = new Vector3(xp, yp, zp);
                        sphr.transform.localScale = new Vector3(1F, 1F, 1F);
                        countshere++;
                }

                sphr.transform.position = new Vector3(xp, yp, zp);
                xp++;

                if (xp = 10)
                {
                        Destroy(sphr);
                }

    }
}


Помогите чем можете :ympray:
Последний раз редактировалось rc2f6 30 окт 2012, 19:29, всего редактировалось 2 раз(а).
Изображение
Аватара пользователя
rc2f6
UNIт
 
Сообщения: 120
Зарегистрирован: 05 окт 2009, 20:19

Re: Создание, перемещение и удаление примитивов!

Сообщение Grin 12 июл 2010, 15:04

Апдейт: это похоже совсем не правильно, нормальное решение во 2ом блоке кода.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

        // Use this for initialization
        void Start () {
       
        }
       
       
        public float countshere = 0f;
        public float xp = 0F;
        public float yp = 0.5F;
        public float zp = 0F;
       
        private GameObject[] sphr = new GameObject[10];
        private int i = 0;

   void Update()
   {
      if (countshere < 10)
      {
         sphr[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere);
         sphr[i].transform.position = new Vector3(xp, yp, zp);
         sphr[i].transform.localScale = new Vector3(1F, 1F, 1F);
         countshere++;
                  i++;
      }

      //sphr.transform.position = new Vector3(xp, yp, zp);
      xp = xp+1;

      if (xp >= 10)
      {
                for(i=0; i < sphr.Length ; i++)
        {
                        Destroy(sphr[i]);
                }
                countshere = 0;
                i = 0;
                xp = 0;
      }


       
        }
}

Вот не знаю то ли тебе надо, но это явно не лучший вариант.
Изменения:
1. у тебя в коде во 2ом if нужно сравнение.
2. Добавил массив а не простую ссылку, а то все объекты кроме последнего не будут иметь ссылку.
3. Немного увеличил countshere. А то не понятно было.
4. xp float а инкрементировать можно только int.
5. Во 2м if Destroy теперь всех элементов массива ну и естественно обнуление countshere xp и i что бы все повторилось.

Небольшой апдейт.
6. Замедлил скорость.

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

public class NewBehaviourScript : MonoBehaviour {

        // Use this for initialization
        void Start () {
                for(int j=0; j<sphr.Length; j++)
                {
                        sphr[j] = null;
                }
       
        }
       
       
        public float countshere = 0f;
        public float xp = 0F;
        public float yp = 0.5F;
        public float zp = 0F;
       
        private GameObject[] sphr = new GameObject[10];
        private int i = 0;
       
        private float timeVar = 0;

   void Update()
   {
      if (countshere < 10 && Time.time > timeVar)
      {
                timeVar = Time.time + 5;
        sphr[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        sphr[i].transform.position = new Vector3(xp, yp, zp);
        sphr[i].transform.localScale = new Vector3(1F, 1F, 1F);
        countshere++;
                i++;
                xp = xp+1;
      }

      //sphr.transform.position = new Vector3(xp, yp, zp);
     

      if (xp >= 10)
      {
                for(i=0; i < sphr.Length ; i++)
        {
                        Destroy(sphr[i]);
                }
                countshere = 0;
                i = 0;
                xp = 0;
                timeVar=0;
      }


       
        }
}
 
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: Создание, перемещение и удаление примитивов!

Сообщение rc2f6 12 июл 2010, 15:26

Спасибо тебе, Grin! Твой вариант лучше чем было у меня!) Счас доработаю немножечко!) Правда там я хотел чтоб сферы не создавались с шагом 1, а чтоб сфера создалась пролетела вперёд и удалилась и так за ней тоже самое! Но счас попробую!) Спасиб и на этом!) :ympeace:
Изображение
Аватара пользователя
rc2f6
UNIт
 
Сообщения: 120
Зарегистрирован: 05 окт 2009, 20:19

Re: Создание, перемещение и удаление примитивов!

Сообщение Grin 12 июл 2010, 15:36

Да не за что :). Апдейтнул скрипт в предыдущем посте это наверно как раз то что надо. Только метод Start() можно оставить пустым, а то там похоже цикл не к чему(они вроде и так все null равны).
Grin
UNец
 
Сообщения: 34
Зарегистрирован: 12 июл 2010, 04:45
Откуда: Россия, г. Челябинск
  • ICQ

Re: Создание, перемещение и удаление примитивов!

Сообщение rc2f6 12 июл 2010, 17:47

Получилось))) Отдельное спасибо за помощь Grin!)
Вот что получилось!)))
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
        public float countshere = 0;
        public float count = 0;
        private GameObject[] sphr = new GameObject[2];
        private int i = 0;

        void Update()
        {
                if (countshere < 2)
                {
                        sphr[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        sphr[i].transform.position = new Vector3( Random.Range(0,10F), Random.Range(0.5F,10F),0F);
                        sphr[i].transform.localScale = new Vector3(1F, 1F, 1F);
                        countshere++;
                        i++;
                }
                               
                for(i=0; i < sphr.Length; i++)
                {
                        sphr[i].transform.position += transform.forward;
                        count++;
                }

                if (count >= 10)
                {
                        for(i=0; i < sphr.Length; i++)
                        {
                                Destroy(sphr[i]);
                        }
                        count = 0;
                        countshere = 0;
                        i = 0;
                }
        }
}
 

Как показать через Unity3DPlayer незнаю! =(
Изображение
Аватара пользователя
rc2f6
UNIт
 
Сообщения: 120
Зарегистрирован: 05 окт 2009, 20:19


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

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

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