Войти
ПрограммированиеФорумОбщее

Детские вопросы по Unity ( В чем преимущество Scriptable Object как переменных? ) (11 стр)

Страницы: 16 7 8 9 10 11
#150
(Правка: 6:18) 6:16, 1 мар. 2019

FordPerfect
> Забота о производительности вряд ли уместна.
> Вот мой код, совсем тупой алгоритм Дейкстры за O(V^2):
> https://rextester.com/ACYBBP95590
>
> 20 микросекунд.

Да, я понимаю, у меня там максимум 5 врагов за раз набигают, и те пошагово все. Просто на будущее стараюсь думать о таких штуках.

За код спасибо, попытаюсь проанализировать. У меня пока очень большие проблемы с чтением чужого кода, тем более это плюсы вроде. Но смысл уловлю)


#151
22:02, 20 мар. 2019

Начал наконец-то разбираться с Юнити пару дней назад, сделал тестовую сцену - и, кажется, что-то я напортачил то ли с риджибади, то ли с кодом.

В общем, планировал сделать так, чтобы наклонная панель ускоряла тушку через AddForce на OnCollisionEnter, но почему-то ничего не происходит.
Причем в логе выводится имя объекта с которым произошло столкновение, если заменить на Transform.localscale - тоже работает, а на AddForce вообще ноль реакции.

Пробовал и через импульс, и вообще все виды силы. Ставил на панель риджибади с и без isKinematic, пробовал AddForce по клику мыши, разные перегрузки эддфорса - ничего не работает.

Собсно, вот :

public float thrust;
   

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Player")
        {

            

            Debug.Log(collision.gameObject.name);

            

            collision.gameObject.GetComponent <Rigidbody>().AddForce(transform.forward * thrust, ForceMode.Impulse);

            
        }
       
        
    }

Видео :

Кстати, с массой тоже что-то странное. В видео специально у бочек поставил массу 100, у игрока 1 - но бочки как разлетались так и разлетаются.

Подскажите, пожалуйста, в чем может проблема?

#152
19:14, 21 мар. 2019

CharacterController ― специфический объект в PhysX. Он не подвергается действию внешних сил.

CharacterController двигается только при помощи методов CharacterController.Move или CharacterController.SimpleMove. Причём документация рекомендует не вызывать Move или SimpleMove чаще одного раза за кадр:

It is recommended that you make only one call to Move or SimpleMove per frame.

Поскольку CharacterController уже как-то перемещается при нажатии клавиш, значит кто-то (компонент Controller, вероятно) уже вызывает его методы Move или SimpleMove. Следовательно, логику ускорения персонажа надо встраивать вручную внутрь этого компонента Controller.

#153
(Правка: 22:23) 22:20, 21 мар. 2019

alexzzzz
> CharacterController ― специфический объект в PhysX. Он не подвергается действию
> внешних сил.
аааа, блин, и точно!
поэтому оно и с массой некорректно работало

спасибо большое, перепишу контроллер

#154
11:56, 22 мар. 2019

Jeaniro
Если вы посмотрите внимательное на Ригидбоди, то там будет стоять галка на иЗКинематик

#155
(Правка: 0:41) 0:40, 10 апр. 2019

sledo
> Jeaniro
> Если вы посмотрите внимательное на Ригидбоди, то там будет стоять галка на
> иЗКинематик

я дико извиняюсь, чет провтыкал я сообщение это
но там isKinematic вроде нигде не стояла, проверял специально

—-——-——————————————


Товарищи, а почему TextMeshPro может при считывании из txt файла в ресурсах выводить квадратики? Касается только русского текста.
Атлас шрифтов сделал, когда  в свойство text записывается просто стринг - все в порядке.
А если из файла читать -  будто слетает шрифт.

Вот так все в порядке .

+ Показать

А вот так если через StreamReader :

+ Показать


Все материалы в обоих случаях идентичны :

+ Показать

#156
8:33, 11 апр. 2019

Попробуйте при создании StreamReader указать кодировку.

#157
(Правка: 19:10) 19:09, 11 апр. 2019

Sazonoff
Спасибо, я тоже так подумал, но ни один из Encoding почему-то не работает. Ни UTF8-32, ни Unicode.
Вроде пишут что баг.

Ну, я в общем и так приспособился - просто в скриптблобджектах делаю большие TextArea - может так даже удобней хранить много текста чем в куче файлов отдельных.

#158
(Правка: 16:13) 16:05, 15 апр. 2019

Jeaniro
> Спасибо, я тоже так подумал, но ни один из Encoding почему-то не работает. Ни
> UTF8-32, ни Unicode.

На всякий случай, вдруг кому поможет.

Сработало вот так :

StreamReader reader = new StreamReader(path,Encoding.GetEncoding(1251));

Ни Encoding.Default, ни все остальные почему-то не работали.

#159
(Правка: 13:19) 2:19, 16 мая 2019

В чем преимущество Scriptable Object как переменных?

Собсно, основные моменты, описанные в этом видео я понимаю :

+ Показать

Мы уменьшаем зависимость, представляя переменную не как Player.Instance.playerHP, а создавая ее как сриптебл обджект, так что к playerHP обращается как Player, так и все кому нужно ( интерфейс и пр.), а playerHP у нас выходит где-то посерединке.

Но это хорошо когда Player у нас один и статический. А если у нас куча Enemy ( пусть Enemy также scriptable object ) - выходит на каждый экземпляр нужна отдельная переменная, т.е. условно skeletonHP, zombieHP, trollHP, я правильно понимаю? А если у нас не только здоровье, но и куча других показателей - для каждого показателя каждого врага придется создавать отдельный SO.

Выходит, имеет смысл делать переменные как сриптебл обджект только для единичных сущностей?

  И чем еще такой подход полезен ( кроме немного более удобного обращения - без Player.Instance ) ?

#160
12:28, 16 мая 2019

Jeaniro
ScriptableObject предназначен для персистентных данных, типа диалогов, квестов или параметров оружия.

#161
(Правка: 13:19) 12:45, 16 мая 2019

monobogdan
> ScriptableObject предназначен для персистентных данных, типа диалогов, квестов
> или параметров оружия.
Ну это понятно, просто на Unite Austin 2017 говорилось также и о других способах применения ( переменные, ивенты ) - и вот с переменными я не очень понял в чем смысл. Материалов в сети по этой теме мало.

То есть вместо условного :

 public class Player 

    {

        public int playerHP;

    }

Мы делаем так :

    [CreateAssetMenu]
    public class IntVariable : ScriptableObject

    {

        public int value;

    }


    public class Player

    {

        public IntVariable playerHP;

    }
#162
15:31, 16 мая 2019

1. Ну если хранить статично, то каждую переменную надо объявлять отдельно, СО можно создать в редакторе
2. Можно на лету подменять ссылки на СО
3. С СО могут работать дизайнеры
4. Можно писать более модульный и переносимый код. Например менеджер сохранений у меня получает ссылки на все СО, которые я затягиваю в него в редакторе и сохраняет/загружает в них значения. Потом этот же менеджер сохранений я могу использовать в другой сцене/проекте, не меняя код.
5...

#163
15:00, 17 мая 2019

Intofire
Понял, спасибо.

Страницы: 16 7 8 9 10 11
ПрограммированиеФорумОбщее