Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 25.02.2016, 14:36   #2296
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы от новичка

1. Можно создать список для проверяемых объектов. При событии OnCollisionEnter2D добавлять в этот список объект с которым столкнулись. При событии OnCollisionExit2D удалять объект с которым было столкновение из списка. И где нибудь в Update обрабатывать этот список с объектами.
Но тут возможно может получится так, что объект может записаться в список столкновений и тут же удалится, а функция обработки запустится после всего этого. Но можно вызывать функцию обработки прям из события OnCollisionEnter2D.
    void OnCollisionEnter2D(GameObject obj) {
        collidersList.Add(obj);
        UpdateCollidersList();
    }

    void OnCollisionExit2D(GameObject obj) {
        if (collidersList.Contains(obj)) {
            collidersList.Remove(obj);
        }
    }

    void UpdateCollidersList() {
        // обработка списка столкновений и тд.
    }
}
2. Можно использовать Physics2D.OverlapPointAll для получения массива рядом находящихся объектов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Владимир (29.02.2016)
Старый 29.02.2016, 06:27   #2297
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопросы от новичка

Сообщение от RegIon Посмотреть сообщение
Как *епть* в Unity получить угол по оси X в диапазоне 0 - 360 ???
Вот это
Vector3 euler transform.localRotation.eulerAngles
возвращает углы в 0..360.
Пробовал такое?
(Offline)
 
Ответить с цитированием
Старый 29.02.2016, 06:38   #2298
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопросы от новичка

Сообщение от Владимир Посмотреть сообщение
Как я понимаю функции OnCollisionEnter2D и OnCollisionStay2D обрабатываются для каждой коллизии отдельно.
1. Полагаю, что при нескольких столкновениях ты получишь несколько вызовов этих функций, в каждой из которых информация об одном объекте столкновения.
2. Collision2D.contacts - это точки столкновения, т.е. части одного объекта, с которым столкнулись.

Сообщение от Владимир Посмотреть сообщение
1. Мне собственно нужно получить количество объектов с которыми столкнулся объект игрока.
Зачем тебе количество? Спрашиваю потому, что возможно это и не требуется, и можно сделать иначе.

Сообщение от Владимир Посмотреть сообщение
2. OnCollisionExit2D срабатывает при любом выходе из коллизии даже в случае множественных коллизий(т.е. если из нескольких действующих коллизий одна прервалась)?
Срабатывает для каждого объекта, который ранее был в состоянии коллизии.
(Offline)
 
Ответить с цитированием
Старый 29.02.2016, 07:54   #2299
Владимир
AnyKey`щик
 
Регистрация: 19.02.2016
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Вопросы от новичка

Сообщение от Nex Посмотреть сообщение
1. Можно создать список для проверяемых объектов. При событии OnCollisionEnter2D добавлять в этот список объект с которым столкнулись. При событии OnCollisionExit2D удалять объект с которым было столкновение из списка. И где нибудь в Update обрабатывать этот список с объектами.
Но тут возможно может получится так, что объект может записаться в список столкновений и тут же удалится, а функция обработки запустится после всего этого. Но можно вызывать функцию обработки прям из события OnCollisionEnter2D.
Про реализацию через массивы думал, но решил пробовать реализацию которую привел выше, поскольку она проще, но к сожалению она не работает Про то, что коллизия может быть очень скоротечной, то так скорей всего и будет, но в этом случае я просто сделаю проверку перед основной обработкой коллизии и при необходимости корректировку массива, по ресурсам будет не затратно поскольку буду делать это где-то раз в секунду.

Сообщение от Nex Посмотреть сообщение
2. Можно использовать Physics2D.OverlapPointAll для получения массива рядом находящихся объектов.
Спасибо за совет, мануал почитал, но не совсем понял как она работает, чуть позже ее попробую, чтобы разобраться с ее работой.

Сообщение от Жека Посмотреть сообщение
1. Полагаю, что при нескольких столкновениях ты получишь несколько вызовов этих функций, в каждой из которых информация об одном объекте столкновения.
2. Collision2D.contacts - это точки столкновения, т.е. части одного объекта, с которым столкнулись.
Собственно это и пронаблюдал.

Сообщение от Жека Посмотреть сообщение
Зачем тебе количество? Спрашиваю потому, что возможно это и не требуется, и можно сделать иначе.
Моя цель выбрать из всех объектов с которыми я столкнулся один, с минимальным значением одной из переменных экземпляра объекта, например с минимальным значением переменной hp и его уже атаковать. Если есть идеи как сделать это не через массив буду рад выслушать

Последний раз редактировалось Владимир, 29.02.2016 в 10:15.
(Offline)
 
Ответить с цитированием
Старый 29.02.2016, 11:09   #2300
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопросы от новичка

Можно сделать функцию RefineTargetObject(GameObject obj), которая будет определять очередную цель по каким-то параметрам.
Вызываешь эту функцию в методе OnCollisionEnter2D() и передаёшь туда объект столкновения.
Можно завести переменные под те параметры, по которым ты проверяешь, например minHp.
В функции RefineTargetObject делаешь сравнение
if (obj.hp minHp) {
  
minHp obj.hp;
  
target obj// наша новая цель

Таким образом, при каждой коллизии мы имеем возможность переключаться на другую цель, если у неё hp меньше. В функции атаки используем эту переменную target - кого атаковать.
Начальное значение для minHp можно сделать int.MaxValue.
obj.hp - это упрощённо, на самом деле hp ты получишь из своего obj.GetComponet<...>
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
Владимир (29.02.2016), Nex (01.03.2016)
Старый 29.02.2016, 12:06   #2301
Владимир
AnyKey`щик
 
Регистрация: 19.02.2016
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Вопросы от новичка

Сообщение от Жека Посмотреть сообщение
Можно сделать функцию RefineTargetObject(GameObject obj), которая будет определять очередную цель по каким-то параметрам.
Вызываешь эту функцию в методе OnCollisionEnter2D() и передаёшь туда объект столкновения.
Тоже хороший вариант и действительно простой, спасибо! Но так же придется делать проверку на наличие коллизии при обработке этой коллизии. В общем буду думать и пробовать
(Offline)
 
Ответить с цитированием
Старый 29.02.2016, 14:38   #2302
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопросы от новичка

Сообщение от Владимир Посмотреть сообщение
Но так же придется делать проверку на наличие коллизии при обработке этой коллизии.
О чём это ты?
(Offline)
 
Ответить с цитированием
Старый 29.02.2016, 17:06   #2303
Владимир
AnyKey`щик
 
Регистрация: 19.02.2016
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Вопросы от новичка

Сообщение от Жека Посмотреть сообщение
О чём это ты?
О том, что урон я планирую наносить раз в секунду, за это время между объектами может появиться расстояние и коллизия как таковая пропадет между ними, а target у нас уже определен. Вообще еще подумаю над реализацией переопределения target в случае если предыдущий target вышел из коллизии. Может все таки будет проще это сделать с массивом, поскольку в нем будут все коллизии и ими будет можно свободно оперировать.
(Offline)
 
Ответить с цитированием
Старый 01.03.2016, 05:46   #2304
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы от новичка

Сообщение от Владимир Посмотреть сообщение
О том, что урон я планирую наносить раз в секунду, за это время между объектами может появиться расстояние и коллизия как таковая пропадет между ними, а target у нас уже определен.
Используй список List<>. При коллизии добавляешь в список объект, а потом уже можно как угодно обрабатывать, удалять и тд.
(Offline)
 
Ответить с цитированием
Старый 01.03.2016, 06:17   #2305
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Вопросы от новичка

Сообщение от Владимир Посмотреть сообщение
между объектами может появиться расстояние и коллизия как таковая пропадет между ними, а target у нас уже определен.
Сбросить таргет можно в функции OnCollisionExit2D
void OnCollisionExit2D(Collision2D collision) {
  if (
collision.gameObject == target) {
    
target null;
  }

(Offline)
 
Ответить с цитированием
Старый 01.03.2016, 15:58   #2306
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

Доброго времени.
Подскажите, пожалуйста, вот эта штука выгружает всё что связано со сценой в которой она запущена: SceneManager.LoadSceneAsync(LevelName) ?
Мне нужно чтобы сцена '0' полностью выгрузилась из памяти перед передачей управления LevelName (смущает существование UnloadScene).
Также хочется узнать как обнулить на дефолт все static ?

UPD: обнулить на дефолт все static - только ручками?
(Offline)
 
Ответить с цитированием
Старый 01.03.2016, 20:17   #2307
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

1. Выгружает, unload для выгрузки аддитивно загруженных сцен (методы additive).
2. Ручками, да. Возможно тебе подойдет паттерн Синглтон.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (01.03.2016)
Старый 01.03.2016, 23:26   #2308
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Вопросы от новичка

Сообщение от pax Посмотреть сообщение
1. Выгружает, unload для выгрузки аддитивно загруженных сцен (методы additive).
Не, не только. Сейчас сцены не выгружаются при смене до какого-то момента. Словил баг, при вторичном переходе на сцену, где должно было все переинициализоваться, но этого не случилось.
Помогоает флаг LoadMethod.Single в таких случаях.

Так же можно менять сцены, которые уже загружены.


PS. Может из-за того что у меня сцены мелкие, и прыгает часто.
Unity 5.3.1
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (01.03.2016)
Старый 02.03.2016, 19:27   #2309
ILonion
ПроЭктировщик
 
Регистрация: 02.10.2014
Сообщений: 102
Написано 5 полезных сообщений
(для 25 пользователей)
Ответ: Вопросы от новичка

Подскажите, с чем может быть связана такая штуковина:

Ошибок напрямую связанных с моим кодом вроде нет. Это что-то юнити внутреннее?
(Offline)
 
Ответить с цитированием
Старый 02.03.2016, 20:03   #2310
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Вопросы от новичка

Вероятно баг, не парься.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ILonion (02.03.2016)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:14.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com