Четверг, 15 Ноября 2018, 08:51

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не будет ли проблем с моим кодом? (замена статических функций на статический указатель)
Не будет ли проблем с моим кодом?
alexsilentДата: Понедельник, 22 Октября 2018, 10:30 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Последнее время отказываюсь от Static функций, хотя бы потому-что в них нельзя держать локальные переменные.
А ещё кажется, что чем больше статичных функций, тем больше нагрузка.
Вместо этого я делаю префаб, куда запихиваю весь скрипт со Static переменной it.

К примеру:

Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyScript : MonoBehaviour {

    static public MyScript it;

    // Use this for initialization
    public void Init() {
          it = this;
    }

    public void GetPrint() {
         print("It's Okay!");
    }
}


И потом, из одного скрипта один раз за всю игру инициирую этот скрипт из префаба с помощью функции Init
(префаб не создаю в уровне, он просто указан, будет ли тут проблема? например для каких-то других платформ не ПК),



И потом когда нужны функции этого скрипта или данные я обращаюсь к этому скрипту вот так:

MyScript.it.GetPrint();



мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Понедельник, 22 Октября 2018, 11:00
pixeyeДата: Понедельник, 22 Октября 2018, 16:38 | Сообщение # 2
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
тем больше нагрузка.


на поясницу?

Для не программиста ты слишком много думаешь о нагрузках ))

Для того что ты хочешь используется Scriptable Object - читай о них в документации юнити. Это ассеты с датой и кодом. Можешь потом класть их в Resources и вызывать через Resources.Load как пример.


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d

SnakeRДата: Понедельник, 22 Октября 2018, 17:04 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Да вы батенька изобрели синглтон, надо же) Тебе и префаб то не нужен, это может быть обычным классом

Unity3D Developer
Ваш лучший помощник при разработке в Unity3D


Сообщение отредактировал SnakeR - Понедельник, 22 Октября 2018, 17:05
pixeyeДата: Понедельник, 22 Октября 2018, 17:33 | Сообщение # 4
Red Winter Software
Сейчас нет на сайте
я бы сказал он весьма близок к изобретению синглтона XDD

Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d

alexsilentДата: Вторник, 23 Октября 2018, 13:03 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата pixeye ()
Для того что ты хочешь используется Scriptable Object - читай о них в документации юнити.

Попробовал я этот Scriptable Object, как на примере в видео юнити, каждая строчка кода идентичная, и данные тупо не сохраняются, через некоторое время объект становится пустым, нашёл куча жалоб, что у народа тоже не сохраняется инфа и нужно делать что-то типа SetDirty или как-то так, и я так и не смог это повторить, как в примере юнити.
Короче это намного усложняет проект, чем если я просто изменю префаб без всяких дополнительных скриптов он сохранится сразу же

Добавлено (23 Октября 2018, 13:05)
---------------------------------------------
Цитата SnakeR ()
Да вы батенька изобрели синглтон, надо же)

С синглтоном я пока тоже не разобрался, как-то там сложно всё выглядит, наверное с непривычки , я ещё только перехожу с яваскрипта на C#, хотя может там такое тоже было, но я не встречал

Добавлено (23 Октября 2018, 13:06)
---------------------------------------------
Цитата pixeye ()
на поясницу?

:) ну главная причина, что в статичных функциях нельзя локальные переменные ставить

просто я подумал, если у меня будет 40 статических функций в скрипте,
то может проще сам скрипт сделать статическим, а функции обычные
ну так и получилось сделать такой велосипед)

PS ну то есть можно смело пользоваться таким велосипедом?


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 23 Октября 2018, 13:15
pixeyeДата: Вторник, 23 Октября 2018, 13:19 | Сообщение # 6
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
Попробовал я этот Scriptable Object, как на примере в видео юнити, каждая строчка кода идентичная, и данные тупо не сохраняются, через некоторое время объект становится пустым, нашёл куча жалоб, что у народа тоже не сохраняется инфа и нужно делать что-то типа SetDirty или как-то так, и я так и не смог это повторить, как в примере юнити.
Короче это намного усложняет проект, чем если я просто изменю префаб без всяких дополнительных скриптов он сохранится сразу же


эээ ) я не знаю что ты делаешь с SO но чтобы им пользоваться нужно понимать его природу. Он не предназначен для "сохранения" инфы.
Его функции это предоставление неизменяемой даты и скриптов с методами обработчиками без локальных переменных.

Цитата alexsilent ()
PS ну то есть можно смело пользоваться таким велосипедом?

Я бы не стал :) Но все приходит с опытом.


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d

pixeyeДата: Вторник, 23 Октября 2018, 13:24 | Сообщение # 7
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
С синглтоном я пока тоже не разобрался, как-то там сложно всё выглядит, наверное с непривычки , я ещё только перехожу с яваскрипта на C#, хотя может там такое тоже было, но я не встречал


Синглтон - это концепция. С ним разбираться не нужно) разбираться можно с конкретными реализациями. Суть синглтона это гарантированное предоставление глобально одного экземпляра класса без возможности создать лишние копии.
Single - одиночка.

Ты мог уже заметить что у тебя оч много "контроллеров" , "менеджеров" которые могут быть в одном экземпляре. По сути ты их используешь как "синглтоны"

Код
public static MyClass Instance;

Awake { Instance = this; }


Часто код выше называют тоже синглтоном, но по факту ты можешь легко перезаписать Instance другим экземпляром, так что с точки зрения кода это просто статик, но по смыслу может быть синглтоном : )


Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d

pixeyeДата: Вторник, 23 Октября 2018, 13:39 | Сообщение # 8
Red Winter Software
Сейчас нет на сайте
Насчет SO - пока не заморачивайся на счет реализации - но вот просто концепт. Допустим у тебя есть компонент получения урона и каждый раз когда ты получил урон ты хочешь чтобы с игроком что то произошло. В идеале ты хочешь удобно из инспектора менять эти действия. Вот тут SO помогает.

У героя есть три действия когда он получит урон. Причем если я например уберу Action Knockback герой больше не будет никогда ни оглушен ни отброшен врагом, даже если ему передались нужные параметры урона для этого.


Дальше я хочу чтобы шлем гг светился огнями разными. Если здоровья много - зеленым, средне - желтым, при смерти - красным. Делаю ассет Action Hit Player


Нет никакого смысла хранить информацию цветов в самом герое. Завтра я захочу фиолетовый, оранжевый и розовые цвета, я просто создам новый ассет, поменяю в нем цвета и заменю этим ассетом тот что лежит в компоненте.

При получении урона я передаю всем таким SO через метод Handle уведомление с двумя параметрами - кого тронули и как тронули. Дальше они принимают решения сами.
Например вот действие блинка



Таким же макаром делается AI. Представь что у тебя три вида зомби. Все они имеют одинаковое поведение, но разные параметры. SO на помощь) создаешь хоть 20 ассетов меняя им параметры. Быстрый, медленный, тормозный, много здоровья, мало здоровья )



Battlecruiser - одна из моих игр
ACTORS - мой фреймворк на Unity3d



Сообщение отредактировал pixeye - Вторник, 23 Октября 2018, 13:50
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не будет ли проблем с моим кодом? (замена статических функций на статический указатель)
  • Страница 1 из 1
  • 1
Поиск:

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