Код контроллера пули, метод 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;
}
}
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);
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() он обрабатывает? Визуально он в сцене отображается? Подобъекты отображаются, активны/неактивны?