forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Monkey (http://forum.boolean.name/forumdisplay.php?f=163)
-   -   MonkeyBehaviour (http://forum.boolean.name/showthread.php?t=20378)

Жека 21.08.2016 09:06

Ответ: MonkeyBehaviour
 
1.

В отличие от макса в манки нет указателей на функции, нельзя заюзать такие хуки.

2. В твоём случае на юзера возложена забота добавлять хуки, не удобно это - можно просто забыть.

Я решил пойти путём наследования нужных интерфейсов при создании юзерских скриптов.
Разбирать наличие унаследованных интерфейсов - в методе GameObject.AddComponent.

Попутно избавился от MonkeyBehaviour, т.к. он предполагал наличие всех интерфейсов IWith...

Например, хотим юзать LateUpdate, пишем
PHP код:

Class MyLateLogic extends Component implements IWithLateUpdate
    
//тут тело функции LateUpdate
End 

Вот такие интерфейсы доступны юзеру
PHP код:

Interface IWithAwake
    Method Awake
:Void()
End
Interface IWithStart
    Method Start
:Void()
End
Interface IWithUpdate
    Method Update
:Void()
End
Interface IWithLateUpdate
    Method LateUpdate
:Void()
End
Interface IWithDraw
    Method Draw
:Void()
End 

Для ясности можно переименовать слово With в Behaviour.


Ps. на манки2 пока забил - не готовы таргеты и простецкий неудобный иде.

mingw 21.08.2016 13:15

Ответ: MonkeyBehaviour
 
Можно легко переделать на прямой вызов метода. И никаких забот на юзера здесь не возложено, если делать грамотно.

PHP код:

Class IWithAwake

    Method 
New()
        
AddHook(AWAKEHOOKSelf)
    
End

    Method Awake
:Void()
End

Class IWithStart

    Method 
New()
        
AddHook(STARTHOOKSelf)
    
End

    Method Start
:Void()
End

Class IWithUpdate

    Method 
New()
        
AddHook(UPDATEHOOKSelf)
    
End

    Method Update
:Void()
End

Class IWithLateUpdate

    Method 
New()
        
AddHook(LATEUPDATEHOOKSelf)
    
End

    Method LateUpdate
:Void()
End

Class IWithDraw

    Method 
New()
        
AddHook(DRAWHOOKSelf)
    
End

    Method Draw
:Void()
End 


Жека 21.08.2016 19:40

Ответ: MonkeyBehaviour
 
Наследоваться можно только от одного класса,
но функции Start, Update и прочие могут быть нужны все сразу,
поэтому твой пример не подойдёт.
Ну и суть его примерно сходится с тем, что я в итоге и сделал. (и описал в предыдущем посте)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot