SendMessage и объекты дубликаты [Решено]

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

SendMessage и объекты дубликаты [Решено]

Сообщение Syberex 08 янв 2012, 04:07

Есть дуло у танка и снаряд, который вылетает, снаряд должен получить сообщение ...
Код контроллера пули, метод Go должен вызываться из SendMessage
Синтаксис:
Используется csharp
public class ShellController : MonoBehaviour {
       
        public  float  powerHit = 10f;
        public  float  lifeTimeMax = 1f;                // sec
        public  float  eplosionTimeMax = 0.25f; // sec
       
        public float  lifeTime;
        public float  eplosionTime;
        public string state;
       
        public float rndNom;

        // Use this for initialization
        void Start() {
                //gameObject.active = false;
                lifeTime = 0f;
                eplosionTime = 0f;
                state = "none";
                gameObject.light.enabled = false;
               
                rndNom = Random.Range(1, 10000);
                Debug.Log ("ShellController.Start "+ rndNom);
        }
       
        // Update is called once per frame
        void FixedUpdate() {
        ....
        }
       
        void OnTriggerEnter(Collider other) {
                Explode();
                if (other.CompareTag("Enemy"))
                        Hit(other.gameObject);
        }
       
        // Начало движения снаряда
        void Go() {
                Debug.Log ("ShellController.Go " + rndNom);
                gameObject.active = true;
                state = "flight";
        }
       
        // Взрыв
        void Explode() {
                //gameObject.active = false;
                state = "explosion";
                // Отображение взрыва
                gameObject.light.enabled = true;
        }
}
 

В момент выстрела, создается дубликат снаряда-образца, который сидит в дуле :) , к дубликату прикладывается сила и он выстреливает ...
Код выстрела у объекта дула, создает дубликат, дает силу, и посылает сообщение
Синтаксис:
Используется csharp
        GameObject shellNew = Instantiate(shellSample, transform.position, transform.rotation) as GameObject;
        audio.Play();
        shellNew.active = true;
        shellNew.rigidbody.AddRelativeForce(Vector3.forward * powerOfShot, ForceMode.Impulse);
        shellNew.SendMessage("Go", SendMessageOptions.RequireReceiver);
 


Так вот какая фигня - метод Go срабатывает, но только у снаряда-образца, в лог пишется рандомный номер пули:
ShellController.Start 8923

ShellController.Go 8923

ShellController.Start 8414

ShellController.Go 8923

ShellController.Start 2141

ShellController.Go 8923

ShellController.Start 7311

ShellController.Go 8923

ShellController.Start 545

ShellController.Go 8923

в методе Go всегда номер повторяется, это значит, что SendMessage вызывает метод у снаряда-образца? Но я ведь вроде шлю его объекту shellNew... От метода Go зависит старт счетчика жизни пули...

Может вся схема и выглядит нагромождением, но сейчас меня беспокоит то, что я недопонимаю чего то в работе SendMessage...
Что я делаю не так? :(

Второй вопросик, который я не нашел в справке:
Если у объекта свойство activate = false то, события update() updatefixed() он обрабатывает? Визуально он в сцене отображается? Подобъекты отображаются, активны/неактивны?
Последний раз редактировалось Syberex 22 янв 2012, 22:41, всего редактировалось 1 раз.
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: SendMessage и объекты дубликаты

Сообщение gnoblin 08 янв 2012, 04:19

если это клон world of tanks, я б стрелял лучиком)

про SendMessage("Go"): действительно работает странно

не вызываются, не отображаются, на подобъекты не влияет
Если нужно выключить-включить объект вместе с подобъектами, используем SetActiveRecursively()
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: SendMessage и объекты дубликаты

Сообщение waruiyume 08 янв 2012, 04:41

У мну всё работает (popcorn)
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: SendMessage и объекты дубликаты

Сообщение Syberex 08 янв 2012, 05:16

если это клон world of tanks, я б стрелял лучиком)

Не клон, задумка под андроид, типа аналога Batlle City, но в 3D исполнении и больше возможностей :)

Вот для этого и нужен метод Go, чтобы отказаться от силы ... Чтобы передать управление снарядом, его скрипту контроллеру, хочется вызвать метод.
Аналогично предполагается вызвать метод Damage, у объекта в который попадет снаряд :D
Вообщем залез я в SendMessage :-? и не хочется оставлять непонятку ...

Щас то я понимаю, что:
Синтаксис:
Используется csharp
ScriptName other = gameObject.GetComponent<ScriptName>();
other.DoSomething();
other.someVariable = 5;


2 waruiyume
Что то примерчик не заработал, или уже пора спать i-) проснусь посмотрю еще ...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: SendMessage и объекты дубликаты

Сообщение waruiyume 08 янв 2012, 06:11

Почему не работает:
Синтаксис:
Используется javascript
using UnityEngine;
public class ShellController : MonoBehaviour
{
    private int order;
    void Awake()
    {
        Debug.Log("Metod Awake " + ++order);
    }
    void Start()
    {
        Debug.Log("Metod Start " + ++order);
    }
    void Go()
    {
        Debug.Log("Metod Go " + ++order);
    }
}
 

Лог:
Скрытый текст:
Metod Awake 1
Metod Go 2
Metod Start 3

У вас сначала в Go, state присваивается flight, а затем в Start none.

Почему у вас такой лог получился, я хз.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: SendMessage и объекты дубликаты

Сообщение Syberex 09 янв 2012, 03:10

Спасибо waruiyume! Теперь я понял почему в Go все время одно значение, оно берется из снаряда-образца каждым дубликатом :)
ShellController.Start 8923 // снаряд-образец

ShellController.Go 8923 // снаряд 1

ShellController.Start 8414 // снаряд 1

ShellController.Go 8923 // снаряд 2

ShellController.Start 2141 // снаряд 2

ShellController.Go 8923 // снаряд 3

ShellController.Start 7311 // снаряд 3

Потому видимо так и работает.

Значит мне надо вместо Start использовать Awake #:-s
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт


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

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

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