collider
|
|
shustr1k76 | Дата: Воскресенье, 13 Марта 2016, 05:55 | Сообщение # 21 |
почетный гость
Сейчас нет на сайте
| Цитата EchoIT ( ) EchoIT понятно, спасибо! проверил через print, там идет отсчет с 10 и после обьект уничтожается
Добавлено (10 марта 2016, 16:45) --------------------------------------------- в чем может быть проблема, после уничтожения обьекта, не прибовляется 1. понимаю вопрос глупый, но все же. добавлен public Text countText; перенесен текст в переменую
Код void OnCollisionEnter(Collision hand) {
if (hand.gameObject.tag == "hand") { GetPunch(); } }
void GetPunch() { counter--;
print (counter); if (counter <= 0) { count = count + 1; Destroy (gameObject);
}
Сообщение отредактировал shustr1k76 - Воскресенье, 13 Марта 2016, 08:14 |
|
| |
VerdCS | Дата: Воскресенье, 13 Марта 2016, 22:18 | Сообщение # 22 |
частый гость
Сейчас нет на сайте
| shustr1k76, попробуй так:
Код void GetPunch() { counter--;
print (counter); if (counter <= 0) { count = count + 1; countText.text = count.ToString (); Destroy (gameObject); } }
|
|
| |
shustr1k76 | Дата: Понедельник, 14 Марта 2016, 03:22 | Сообщение # 23 |
почетный гость
Сейчас нет на сайте
| когда враг умирает ошибка NullReferenceException: Object reference not set to an instance of an object coll.GetPunch () (at Assets/coll.cs:45) coll.OnCollisionEnter (UnityEngine.Collision hand) (at Assets/coll.cs:31)
|
|
| |
Lertmind | Дата: Понедельник, 14 Марта 2016, 17:04 | Сообщение # 24 |
заслуженный участник
Сейчас нет на сайте
| Цитата shustr1k76 ( ) когда враг умирает ошибка NullReferenceException: Object reference not set to an instance of an object coll.GetPunch () (at Assets/coll.cs:45) coll.OnCollisionEnter (UnityEngine.Collision hand) (at Assets/coll.cs:31)
Ты наверно добавил поле public Text countText;, но не инициализировал эту переменную, поэтому в ней содержится null. Прикрепи GameObject с Text через Inspector для этой переменной. Вообще, VerdCS всего лишь хотел сказать, что к переменной count число 1 прибавляется, но ты её не выводишь. Ты мог просто перед Destroy добавить print(count); чтобы проверить.
|
|
| |
shustr1k76 | Дата: Вторник, 15 Марта 2016, 19:42 | Сообщение # 25 |
почетный гость
Сейчас нет на сайте
| добавил пустой обьект прикрепил к нему text - он стал дочерним, на игроке висит скрипт, в котором сделал public GameObject textin и перенес туда обьект(textin) и серовно ошибка, понимаю, что, что то не так. крутится где то рядом
Код public Text countText; public GameObject textin; private int count;
void Start () { GameObject hand = GameObject.Find("hand"); GameObject text = GameObject.Find("textin"); count = 0; countText = GetComponent<Text>();
void OnCollisionEnter(Collision hand) {
if (hand.gameObject.tag == "hand") { GetPunch();
}
}
void GetPunch() { counter--;
print (counter);
if (counter <= 0) { count = count + 1;
countText.text = count.ToString();
Destroy (gameObject);
} }
|
|
| |
VerdCS | Дата: Четверг, 17 Марта 2016, 08:01 | Сообщение # 26 |
частый гость
Сейчас нет на сайте
| shustr1k76, Наверное переменная countText ничего не содержит. Попробуй добавить в конце Start() следующую строку:
Код void Start () { /// print ("countText содержит: " + countText); }
Если countText содержит null, значит на том объекте, на котором весит скрипт, нет компонента Text, и метод -
Код countText = GetComponent<Text>(); , не найдя ничего, присваивает countText значение - null
Попробуй удалить эту строку, и в самом инспекторе вручную указать переменной countText нужный Text-компонент.
|
|
| |
shustr1k76 | Дата: Четверг, 17 Марта 2016, 15:14 | Сообщение # 27 |
почетный гость
Сейчас нет на сайте
| Цитата VerdCS ( ) Попробуй удалить эту строку, и в самом инспекторе вручную указать переменной countText нужный Text-компонент. так и сделано. может быть я вас ввожу в заблуждение, дело в том что, есть игрок(префаб), я его закинул в скрипт респаун, т.е он появляется, я его убиваю. на нем висит скрипт в котором public Text countText; в него я соответственно закинул нужный Text-компонент. все что нужно после destroy(сметри игрока) прибавлять число, если без этой строчки Код countText = GetComponent<Text>(); countText содержит: countText (UnityEngine.UI.Text) UnityEngine.MonoBehaviour:print(Object) coll:Start() (at Assets/coll.cs:25)
с ней countText содержит: UnityEngine.MonoBehaviour:print(Object) coll:Start() (at Assets/coll.cs:25)
|
|
| |
VerdCS | Дата: Четверг, 17 Марта 2016, 20:37 | Сообщение # 28 |
частый гость
Сейчас нет на сайте
| shustr1k76, если я правильно понял у префаба игрока, есть дочерний объект, с компонентом Text. Этот компоненты вы перетянули в поле переменной countText у префаба игрока. Если это так то во первых countText = GetComponent<Text>(); инициализирует переменную значением null, и приведёт к ошибке, поэтому эту строчку нужно изъять; во вторых уничтожая клон префаба методом Destroy (gameObject), вы так же уничтожаете дочерний объект с его текстом, и поэтому не увидите изменений. Что бы всё сработало клон префаба, при создании, должен каким то образом инициализировать переменную countText, объектом который уже находиться внутри сцены и от этого клона никак не зависит. Попробуйте сделать так: добавьте в сцену пустой объект. На этот объект добавьте следующий скрипт.
Код using UnityEngine; using UnityEngine.UI; using System.Collections;
public class Test : MonoBehaviour { public Text countText; int globalCount = 0;
public static Test current;
void Start () { current = this; }
public void IncrementCount () { globalCount++; countText.text = globalCount.ToString (); print(globalCount); } }
Соответственно в переменную countText перетяните нужный вам Text из сцены. Метод GetPunch () тоже нужно изменить:
Код void GetPunch () { counter--;
print (counter); if (counter <= 0) { count = count + 1; Test.current.IncrementCount (); Destroy (gameObject); } }
Убедитесь что переменная countText, в скрипте Test, инициализирована.
Сообщение отредактировал VerdCS - Четверг, 17 Марта 2016, 20:37 |
|
| |