Четверг, 28 Марта 2024, 21:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проверка столкновения (1)
Проверка столкновения
Valik_FenkoДата: Четверг, 26 Мая 2016, 17:16 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Есть 2 объекта они на сцене есть изначально..Один объект тригерный.Нужно изменить тег тригерного объкта в зависимости от того касается он объектов с определённым тегом или нет.

Код
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Tag1")
{
tag = "Tag2";
}
else tag = "Tag3";
}


Это висит у меня на тригерном объекте.Эта проверка стоит куб на другом кубе или нет(В будущем ящик на платформе biggrin )Я решил сделать через теги.Но эт не суть потому что 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
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Проверка столкновения (1)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг