Unity в 2D: общая гравитация, физика для спрайтов

Общие вопросы о Unity3D

Unity в 2D: общая гравитация, физика для спрайтов

Сообщение alexmody 07 янв 2012, 10:34

Планирую портировать 2d флеш игру, возникли два вопроса:

1. С чем в Unity настроил ортогональную камеру, при этом 1 uint = 1 pixel. В итоге если брать даже небольшой игровой объект спрайт 64x64 px, то получается что у него игровой размер 64x64 метра и гравитация на такие объекты действует слабо. Как можно изменить общую гравитацию в Unity?

2. Для спрайтов использую Sprite Manager 2. У примененного RigitBody я ограничиваю разделе Constraints перемещение по оси Z и вращение по осям X, Y. Получается, работаем в 2d. Также применил BoxCollider, но если два спрайта сталкиваются друг с другом, то они проходят сквозь, т.е. физики нет, как мне правильно настроить физику для спрайтов? Z координата у обоих равна нулю.
alexmody
UNец
 
Сообщения: 13
Зарегистрирован: 05 янв 2012, 04:29

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение trololoid 07 янв 2012, 10:39

Повесить ригитбоди , настроить Drag по вкусу, двигать силами
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение gnoblin 07 янв 2012, 15:18

alexmody писал(а):Планирую портировать 2d флеш игру, возникли два вопроса:

1. С чем в Unity настроил ортогональную камеру, при этом 1 uint = 1 pixel. В итоге если брать даже небольшой игровой объект спрайт 64x64 px, то получается что у него игровой размер 64x64 метра и гравитация на такие объекты действует слабо. Как можно изменить общую гравитацию в Unity?

2. Для спрайтов использую Sprite Manager 2. У примененного RigitBody я ограничиваю разделе Constraints перемещение по оси Z и вращение по осям X, Y. Получается, работаем в 2d. Также применил BoxCollider, но если два спрайта сталкиваются друг с другом, то они проходят сквозь, т.е. физики нет, как мне правильно настроить физику для спрайтов? Z координата у обоих равна нулю.


1. можно сделать 1 unit = 64 pixels, например
2. ригидбоди с птичкой isKinematic? как двигается спрайт (в Update() через transform?)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение Order 07 янв 2012, 16:52

зачем делать 1м = 1 пиксель ? достаточно сделать квадратную текстуру разрешением кратной степени 8.
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение gnoblin 07 янв 2012, 19:04

для удобства измерения расстояния и чтобы пытаться выводить текстуру на меше пиксель в пиксель

не кратную восьми, а 2^N )
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 07 янв 2012, 19:20

а еще можно сделать так:
1) Ставим ортогональную камеру с сайз 5 (увеличивай/уменьшай для достижения нужного эффекта)
2) Делаем пустой ГО, например, Root
3) Вешаем на него скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Root : MonoBehaviour {
        public Camera mainCamera;      
        private float _lastHeight;

        // Use this for initialization
        void Start () {
                SetScale();
        }
       
        public void SetScale ()
        {
                Debug.Log(Screen.height);
                float x = ( mainCamera.orthographicSize * 2 ) / Screen.height;
                float y = x;
                float z = x;
                transform.localScale = new Vector3(x,y,z);
        }

        // Update is called once per frame
        void Update () {
                if (_lastHeight != Screen.height)
                        SetScale();
        }
}


 

4) А дальше в него добавляет нужные 2д элементы со scale 1 unit = 1px;
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение Golandez 07 янв 2012, 20:51

Смысл лишней вычислительной нагрузки и этого гемороя с
(увеличивай/уменьшай для достижения нужного эффекта
если можно одни раз правильно настроить камеру?
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 07 янв 2012, 22:01

Я вот тоже думаю, что лучше сделать на камере скрипт меняющий size. Извините :)
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 07 янв 2012, 22:03

правда, тогда останется проблема с гравитацией, так что мой вариант получается правильный?
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение Golandez 07 янв 2012, 22:45

Size к гравитации и колизии никакого отношения не имеет. Дайте скрин сцены, чтобы было видно как расgоложены спрайты и коллайдеры на них, скрин настроек регитбоди.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 07 янв 2012, 23:37

Сайз, да, а вот размер объектов очень даже.

При моем варианте получается, что объект равен: 64 метра * ( ( размерыКамеры * 2 ) / высоту экрана )....

ой, пока писал понял, что от размера экрана будет менять физика в игре, что не есть гуд.

Например, для 1026х768 высота объекта равна 0.83 метра, а на 2560x1440 — 0.44 метра.
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 07 янв 2012, 23:52

Мне кажется, вариант тут один: делать обертку над объектами до приведения их к приблизительно в реальности размеру.

То есть, если спрайт главного героя 64х64 пикселя, а он у нас взрослый мужчина (примерно 1.8 метра ростом), получаем обертку в 0.028155. А размер у камеры выставляем равный ( Screen.height / 2) * 0.028155

P.S. Проверил — работает отлично.
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение Golandez 08 янв 2012, 00:00

aler писал(а): пока писал понял, что от размера экрана будет менять физика в игре.

Изображение
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение aler 08 янв 2012, 00:05

Что-то не так, Голландец?
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Unity в 2D: общая гравитация, физика для спрайтов

Сообщение Golandez 08 янв 2012, 00:15

Не может влиять размер экрана на физику. Нет у них никаких общих зависимостей. Вы вывели зависимость скейла обьекта от размера камеры, но не существует никаких зависимостей ригидбоди от скейла обьекта.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

След.

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12