Проверка столкновения
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 17:16 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Есть 2 объекта они на сцене есть изначально..Один объект тригерный.Нужно изменить тег тригерного объкта в зависимости от того касается он объектов с определённым тегом или нет.
Код void OnCollisionEnter(Collision collision) { if(collision.gameObject.tag == "Tag1") { tag = "Tag2"; } else tag = "Tag3"; }
Это висит у меня на тригерном объекте.Эта проверка стоит куб на другом кубе или нет(В будущем ящик на платформе )Я решил сделать через теги.Но эт не суть потому что OnCollisionEnter в моем случае ваще не работает...
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 17:19 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 17:35 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Для триггеров OnTriggerEnter. Читаем внимательно документацию.
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 17:59 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Ещё один вопрос!
Код using UnityEngine; using System.Collections; public class Initialize : MonoBehaviour { public static GameObject[] paths; public GameObject path; public int Grid = 3; void Start() { for(int x = 0;x < 25;x+=Grid) { for(int y = 0;y < 25;y+=Grid) { paths[x*y]= Instantiate(path) as GameObject; paths[x*y].transform.position = new Vector3(x*Grid,0.1f,y*Grid); } } } void Update() { } } Мне нужно создать 625 объектов и записать их всех в массив :D.С первым проблем ваще нету,но когда вместо Game Object Любое имя = создать пишу название массива[индекс].Все объекты спавнятся в 0,0,0.Проблема не в x*y я уже проверял через обычный цикл...Всё также,transform.position не срабатывает.Очевидно оно ваще его в массив не записывает.Причины плиз!
P.S и да первый вопрос ещё остался Вот using UnityEngine; using System.Collections;
Код public class PathSetting : MonoBehaviour { void OnTriggerEnter(Collider other) { if(other.gameObject.tag == "Wall") { tag = "UnPath"; } else tag = "Path"; } } Чудо не произошло..
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 18:08 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 18:19 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Цитата Valik_Fenko ( ) Чудо не произошло.. Снова внимательно читаем документацию. У одного из объектов должен быть Rigidbody, может тег забыл поставить или ещё что-то, разбираться тебе самому придётся.
Цитата Valik_Fenko ( ) for(int x = 0;x < 25;x+=Grid) Ты смещаешь на 3, а надо на 1.
Цитата Valik_Fenko ( ) paths[x*y]= Instantiate(path) as GameObject; Сразу ставить в нужную позицию можно с помощью перегруженного метода public static Object Instantiate(Object original, Vector3 position, Quaternion rotation); Чтобы обращаться к одномерному массиву как в двумерному: paths[x*25 + y] или paths[y*25 + x] в зависимости от расположения на плоскости.
Сообщение отредактировал Lertmind - Четверг, 26 Мая 2016, 18:20 |
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 18:40 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Последнее не понял ваще. paths[x*25 + y] или paths[y*25 + x].У меня оно как сетка идет.Есть 625 квадратиков как мне сделать чтобы оно записывало вот так [0] [1] ..[624]
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 18:50 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 18:48 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| Valik_Fenko, похоже с программирование совсем плохо. Пример для 3х3:
Код int arr[] = new int[3*3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { arr[i*3 + j] = i*3 + j; } } Получим:
Код [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ] (i, j) были такими при обращении по индексу:
Код [ (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2) ]
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 18:51 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Ну терь понятно,а к чему было на плоскости?Это меня запутало.Так бы и сказал либо так либо так..
Но чет всё равно не так как нужно
Код using UnityEngine; using System.Collections;
public class Initialize : MonoBehaviour { public static GameObject[] paths; public GameObject path; public int Grid = 3; void Start() { for(int x = 0;x < 5;x++) { for(int y = 0;y < 5;y++) { paths[x*5+y] = Instantiate(path,new Vector3(x*Grid,0.1f,y*Grid),Quaternion.identity) as GameObject; } } } void Update() { } } Вот весь код.Должно быть так: сетка из объектов который записываются в массив.Щас все 625 объектов спавнятся в 0,0 ,как в префабе написано, и походу оно в массив ваще ниче не пишет...
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 18:56 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 18:54 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Цитата Lertmind ( ) чтобы оно записывало вот так [0] [1] ..[624] Внешний цикл у тебя по x, значит чтобы заполнялось последовательно paths[x*25 + y]. paths[y*25 + x] - будет как транспонированная матрица.Добавлено (26 мая 2016, 18:53) ---------------------------------------------
Цитата Valik_Fenko ( ) Ну терь понятно,а к чему было на плоскости? Потому что расположение на плоскости в сцене будет разное.Добавлено (26 мая 2016, 18:54) --------------------------------------------- Наверно стоило упомянуть "расположение объектов на плоскости".
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 19:01 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Да,но почему тогда если я просто пишу Game Object new всё нормальо работает,а как только я пытаюсь записать в массив все созданные объекты в 0,0 спавнятся.
Это норм работает,но в массив не пишет
Код GameObject newobj = Instantiate(path) as GameObject; newobj.transform.position = new Vector3(x*Grid,0.1f,y*Grid); Это должно делать тож самое ток попутно записывать в массив объекты.Но всё совсем плохо:
Код paths[x*5+y] = Instantiate(path) as GameObject; paths[x*5+y].transform.position = new Vector3(x*Grid,0.1f,y*Grid); не важно как писать отдельно или через перегруженый метод их спавнит в 0,0 и всё.
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 19:07 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 19:06 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| Valik_Fenko, где массив paths создаёшь?
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 19:07 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Код using UnityEngine; using System.Collections;
public class Initialize : MonoBehaviour { public static GameObject[] paths; public GameObject path; public int Grid = 3; void Start() { for(int x = 0;x < 5;x++) { for(int y = 0;y < 5;y++) { paths[x*5+y] = Instantiate(path) as GameObject; paths[x*5+y].transform.position = new Vector3(x*Grid,0.1f,y*Grid); } } } void Update() { } } Ну в теле скрипта,в цыкле смысла нету создавать массив и туда записывать и в void start Тоже.Мне нужно через другой скрипт его использовать
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 19:11 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 19:13 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| Не знаю, что ты там делаешь, сейчас попробовал, у меня этот скрипт создаёт сеткой 25 объектов на расстоянии 3 юнитов между собой:
Код using UnityEngine; using System.Collections;
public class Init : MonoBehaviour { public static GameObject[] paths; public GameObject path; public int Grid = 3;
void Start() { paths = new GameObject[5*5]; for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { paths[x * 5 + y] = Instantiate(path, new Vector3(x * Grid, 0.1f, y * Grid), Quaternion.identity) as GameObject; } } } } Добавлено (26 мая 2016, 19:13) --------------------------------------------- Возможно ты где-то ещё меняешь позицию в (0,0).
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 19:16 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| реал?А у меня он должен так делать по идеи,но расстояния в 3 юнита нету все обьекты в 0,0 справнит..в чем может быть проблема? =( Добавлено (26 мая 2016, 19:15) --------------------------------------------- Не,не меняю.Это бы совсем ржака была :D.По крайней мере в поиске ниче такого не нашло Добавлено (26 мая 2016, 19:16) --------------------------------------------- Но я писал такой скрипт для теста,но удалил его.Тем более если бы он до сих был даже если бы я писал GameObject name = insta..,то всё равно бы их кидало в 0,0
|
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 19:18 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| Конечно, зачем мне шутить. Этот код тоже работает правильно:
Код using UnityEngine; using System.Collections;
public class Init : MonoBehaviour { public static GameObject[] paths; public GameObject path; public int Grid = 3;
void Start() { paths = new GameObject[5 * 5]; for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { paths[x * 5 + y] = Instantiate(path) as GameObject; paths[x * 5 + y].transform.position = new Vector3(x * Grid, 0.1f, y * Grid); } } } } Добавлено (26 мая 2016, 19:18) --------------------------------------------- Ты мог в инспекторе поставить Grid = 0, тогда в будет (0,0).
|
|
| |
Valik_Fenko | Дата: Четверг, 26 Мая 2016, 19:20 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| Всё понятно.Я Василий.Забыл дописать в объявлении массива = new GameObject[25]; А ты тупо скопировал или у тя правильно было написано?\ Потому что у меня вот такое вылезло.Я блин не замечаю эти предупреждения.Осел я XD NullReferenceException: Object reference not set to an instance of an object (wrapper stelemref) object:stelemref (object,intptr,object)
Странно всё это,но я решил проблему тем что дописал = new GameObject[25];Добавлено (26 мая 2016, 19:20) --------------------------------------------- Спс =).Разобрался
Сообщение отредактировал Valik_Fenko - Четверг, 26 Мая 2016, 19:20 |
|
| |
Lertmind | Дата: Четверг, 26 Мая 2016, 19:20 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Valik_Fenko, я про "создание массива" и спрашивал, потому что у тебя не было, думал ты в другом создаёшь, в моих скриптах я указал.
|
|
| |
Valik_Fenko | Дата: Пятница, 27 Мая 2016, 11:03 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| ..
Сообщение отредактировал Valik_Fenko - Пятница, 27 Мая 2016, 11:06 |
|
| |
|