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

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

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

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

Ответ
 
Опции темы
Старый 20.02.2013, 17:37   #16
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

seaman ты передаешь числа, а надо передавать переменные и их менять. В params по ref не передать. И так как надо делать это для разного количества - достаточно простого массива, а не params, потому что не будешь же ты для каждого случая вызывать свою версию метода - то от чего хочет отказаться EvilOkta
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 20.02.2013, 17:41   #17
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Передача переменной в метод

А вернуть IEnumerable можно. Типа:
int[]Check(params int[] inp)
{
    int[] ret = new int[inp.Length];
    //делаем что надо со входными значениями и заносим их в ret
    return ret;
}
int[] aA = Check(a, b, c);
int[] bA = Check(b, c);
(Offline)
 
Ответить с цитированием
Старый 20.02.2013, 17:46   #18
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

Проблема не в этом. Проблема в том, что ему надо будет вызывать метод различными способами (с различным числом параметров), а это не нужно.

Я вообще его не очень понял, почему например для каждого найденного значения не вызвать функцию один раз, зачем в нее передавать все что надо обработать...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 20.02.2013, 17:48   #19
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Передача переменной в метод

Ну я тоже не очень понял обсуждения. Просто привел пример как передавать разное число параметров в одну функцию.
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 10:30   #20
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

наверное слишком сумбурно объяснил, задача так поставлена потому что юнитом через этот скрипт планируется управлять как игроком так и ИИ.
Вообще при малом количестве параметров действительно подойдет switch/case.
Сейчас попробую поподробнее объяснить, возможно и правда проблема в том что я слишком все осложняю.

Игра пошаговая (типа incubation) юнит передвигается по квадратному полю с помощью одного и того же метода. Команда на направление движения устанавливает центр привязки юнита, вокруг которого он "перекатывается" на соседнее поле.
Есть две переменные отвечающие за его текущий поворот, имеется ввиду не физический поворот, а некоторые значения которые меняются при перемещении (это краеугольная концепция игры). При перемещении в одну сторону меняется одна переменная, в другую вторая и т.п.
Задача при инициализации движения передавать в метод именно ту переменную которую требуется обработать и вернуть ее измененное значение. При расширении скрипта (и написании ИИ) возникнет необходимость передавать и другие параметры для изменения. Так как игра тактического характера то при разном расположении и повороте юнита он будет иметь разные тактические параметры - это я и хотел реализовать в обработчике движения.
Если управляет игрок то довольно просто - он мышкой прокладывает маршрут по полю, анализатор запаковывает маршрут в команду, понятную методу перемещения и метод начинает перемещать юнит по маршруту, попутно изменяя его текущие параметры.
Если юнитом управляет ИИ, то до прокладки маршрута в действие вступате блок логики, анализирующий текущую ситуацию на поле, параметры и расположение юнитов и т.п. (тут кстати в этом блоке мне тоже бы пригодилась методика передачи/приема переменных или аналоги), и этот блок логики по результатам анализа так же формирует маршрут и отдает его методу перемещения.

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

Кстати насчет интерфейсов, немного не понял идею, это как?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 11:10   #21
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

public interface IControlableByLogic
{
    
int parameter{getset;}
}

public class 
UserMonoBehaviourIControlableByLogic
{
    public 
int myControlableParameter

    
public parameter
    
{
        
get{ return myControlableParameter; }
        
setmyControlableParameter value;}
    }
    
}

public class 
AIMonoBehaviourIControlableByLogic
{
    public 
int myControlableParameterByAI

    
public parameter
    
{
        
get{ return myControlableParameterByAI; }
        
setmyControlableParameterByAI value;}
    }
}

public class  
GameLogicMonoBehaviour
{
   public 
void MoveUnit(IControlableByLogic unit)
   {
       
unit.parameter += 1;
   }

Собственно вместо интерфейсов можно использовать наследование - унаследовать базовый класc Unit от MonoBehaviour, дать ему базовые параметры, которыми управляет логика. А от него унаследовать классы User и AI которые будут использовать эти параметры. И функция MoveUnit принимала бы базовый класс Unit и работала бы с ним абстрактно, не зная кто это.

UPD: поправил немного код, забыл class написать и в интерфейсе была ошибка
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
EvilOkta (21.02.2013)
Старый 21.02.2013, 12:26   #22
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

Сообщение от pax Посмотреть сообщение
Собственно вместо интерфейсов можно использовать наследование - унаследовать базовый класc Unit от MonoBehaviour, дать ему базовые параметры, которыми управляет логика. А от него унаследовать классы User и AI которые будут использовать эти параметры. И функция MoveUnit принимала бы базовый класс Unit и работала бы с ним абстрактно, не зная кто это.
Действительно не подумал, и такой и такой подход может помочь, пример с интерфейсами понятен более менее это как я понимаю альтернатива наследованию
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 12:31   #23
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

Сообщение от EvilOkta Посмотреть сообщение
Действительно не подумал, и такой и такой подход может помочь, пример с интерфейсами понятен более менее это как я понимаю альтернатива наследованию
С# не поддерживает множественное наследование от классов (наследование линейное), зато можно наследоваться от множества интерфейсов.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 12:47   #24
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

Сообщение от pax Посмотреть сообщение
С# не поддерживает множественное наследование от классов (наследование линейное), зато можно наследоваться от множества интерфейсов.
т.е. один класс потомок может иметь только один класс-родитель? но можт иметь множественное число потомков, я правильно понимаю принцип наследования?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 13:37   #25
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Передача переменной в метод

Как и в жизни - одна мать может родить кучу детей у которых будет ее наследственность. А учителя (интерфейсы) могут придать любому ребенку новые черты, не унаследованные от матери. Интерфейс может придать эти новые черты любому числу классов. Все они будут обладать неким общим набором свойств. И родители у этих классов могут быть разные.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо seaman за это полезное сообщение:
EvilOkta (21.02.2013), pax (21.02.2013)
Старый 21.02.2013, 14:07   #26
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

Сообщение от seaman Посмотреть сообщение
Как и в жизни - одна мать может родить кучу детей у которых будет ее наследственность. А учителя (интерфейсы) могут придать любому ребенку новые черты, не унаследованные от матери. Интерфейс может придать эти новые черты любому числу классов. Все они будут обладать неким общим набором свойств. И родители у этих классов могут быть разные.
наглядно и полезно, спасибо большое.
А вот такой вопрос - при наследовании класса, его свойства наследует класс-потомок или конкретный экземпляр класса-потомка при создании?
Т.е. описывая класс-конструктор уже можно пользоваться свойствами базового класса?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 14:34   #27
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

Не понял про класс конструктор, все экземпляры наследника имеют доступ к публичными и защищенным членам базового класса. Причем могут их переопределять, если они объявлены как виртуальные или абстрактные.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 15:23   #28
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

да, порылся в справке, понял что задал глупый вопрос.
Попробую реализовать интерфейсами, мне кажется это будет более гибкая структура..
а get и set что определяет? сигнатуру метода переданного интерфейсу?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 15:41   #29
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Передача переменной в метод

Полезно будет почитать про свойства http://msdn.microsoft.com/ru-ru/library/x9fsa0sw.aspx
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 21:11   #30
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Ответ: Передача переменной в метод

Хотел узнать еще вот что (конечно понимаю что мои вопросы звучат совсем по ламерски но я видимо упускаю какие-то концепциии ООП, а точнее их реализации в Unity)
На старом примере немного непонятно взаимодействие классов и интерфейсов:
Если классы объявляются в разных скриптах, на разных GameObject (например на объекте игрока один скрипт, на враге другой) в одном соответственно объявляю класс User в другом AI, оба являются наследниками класса Unit - вот где этот базовый класс должен быть объявлен, чтобы оба класса наследника до него дотянулись? или без разницы?
Как в таком случае проектировать архитектуру программы - в какой момент инициализируется связи между классами? Я понимаю так, что при запуске программы должен запуститься какой-то базовый скрипт, в котором и будет объявлены все наследуемые классы и интерфейсы, но не могу понять как это происходит в отдельных независимых скриптах.
Или концепция ООП позволяет при запуске одного из скриптов получить все связи наследования из других.

Логику построения проекта на простом примере понимаю - взаимодействие скриптов происходит в момент наступление какого-то событие (пересечение с лучом, попадание в коллайдер и т. п.), а вот как быть с такими межскриптовыми связями наследования так и не понял, ведь каждый скрипт наследуется от monobehaviour а значит из за линейного наследования классы наследуются в пределах одного скрипта.

Тогда как определить общий интерфейс который действует из разных скриптов с общим методом одного из классов конкретного скрипта?
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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