KBEngine官方论坛

 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 配置 开服
查看: 636|回复: 9

[kbengine_ue4_demo] modelID question

[复制链接]

11

主题

96

帖子

813

积分

高级会员

Rank: 4

积分
813
发表于 2017-6-13 15:56:53 | 显示全部楼层 |阅读模式
Dear developers!

I need your advise!
I want to get modelD in GameEntity, how can I do this?

Thanks in advance!
With respect!
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 16:41:55 | 显示全部楼层
demo:
  1. void GameObject::set_name(FString old)
  2. {
  3.         UKBEventData_set_name* pEventData = NewObject<UKBEventData_set_name>();
  4.         pEventData->name = name;
  5.         pEventData->entityID = id();
  6.         KBENGINE_EVENT_FIRE("set_name", pEventData);
  7. }

  8. void GameObject::set_modelID(uint32 old)
  9. {
  10.         UKBEventData_set_modelID* pEventData = NewObject<UKBEventData_set_modelID>();
  11.         pEventData->modelID = modelID;
  12.         pEventData->entityID = id();
  13.         KBENGINE_EVENT_FIRE("set_modelID", pEventData);
  14. }

  15. void GameObject::set_modelScale(uint8 old)
  16. {
  17.         UKBEventData_set_modelScale* pEventData = NewObject<UKBEventData_set_modelScale>();
  18.         pEventData->modelScale = modelScale;
  19.         pEventData->entityID = id();
  20.         KBENGINE_EVENT_FIRE("set_modelScale", pEventData);
  21. }
复制代码



Refer to the name display. (custom event: KBENGINE_EVENT_FIRE("set_name", pEventData);) , UKBEventData_set_modelID
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

11

主题

96

帖子

813

积分

高级会员

Rank: 4

积分
813
 楼主| 发表于 2017-6-13 16:58:41 | 显示全部楼层
But I need to get modelID, not to set!

For example I need a monsters of several kind!
They are all of class monster, but differs in modelID.
How can I get modelID, in order to display different monsters in a client?
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 17:09:45 | 显示全部楼层
After the set event is triggered, you can record this GameEntity in modelID, and in UE4 you are directly from GameEntity->getModelID.
The model ID is set by the server, and you can set different ID for different monsters.


If you want to read directly the properties of the KBEEntity, there are some problems.
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 17:12:26 | 显示全部楼层
  1. void AGameModeWorld::BeginPlay()
复制代码
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 17:15:03 | 显示全部楼层
Read the properties of the KBEntity directly, referring to the gamemodel.
You might have to write some code

  1. void AGameModeWorld::BeginPlay()
  2. {
  3.         Super::BeginPlay();

  4.         check(KBEngineApp::getSingleton().isInitialized());

  5.         // 如果已经有被创建的实体,说明他们在上一个场景未来得及跳转之前已经通知创建了,但由于我们的world场景并没有来得及创建,这部分实体进入世界事件已经漏掉
  6.         // 此时我们需要再次触发一次onEnterWorld,让表现层能够在游戏场景中创建出所有的实体
  7.         KBEngineApp::ENTITIES_MAP& entities = KBEngineApp::getSingleton().entities();
  8.         for (auto& item : entities)
  9.         {
  10.                 Entity* pEntity = item.Value;

  11.                 UKBEventData_onEnterWorld* pEventData = NewObject<UKBEventData_onEnterWorld>();
  12.                 pEventData->entityID = pEntity->id();
  13.                 pEventData->spaceID = KBEngineApp::getSingleton().spaceID();
  14.                 KBPos2UE4Pos(pEventData->position, pEntity->position);
  15.                 pEventData->direction = pEntity->direction;
  16.                 pEventData->moveSpeed = pEntity->velocity();
  17.                 pEventData->isOnGround = pEntity->isOnGround();
  18.                 pEventData->isPlayer = pEntity->isPlayer();
  19.                 pEventData->entityClassName = pEntity->className();
  20.                 pEventData->res = TEXT("");
  21.                 KBENGINE_EVENT_FIRE("onEnterWorld", pEventData);
  22.         }
  23. }
复制代码
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

11

主题

96

帖子

813

积分

高级会员

Rank: 4

积分
813
 楼主| 发表于 2017-6-13 17:51:01 | 显示全部楼层
I want to make myself clear.

looking into d_entities.py (kbengine_demos_assets)
we can found items like this:
        1002: {'id': 1002, 'name': 'Sender', 'runSpeed': 65, 'entityType': 'NPC', 'moveSpeed': 50, 'dialogID': 10001001, 'modelID': 1002, 'etype': 1},
        2003: {'id': 2003, 'name': 'Monster3', 'runSpeed': 65, 'entityType': 'Monster', 'moveSpeed': 50, 'dialogID': 0, 'modelID': 2003, 'etype': 1}

I just want to read this value: modelID.
They already has been setup in a scripts.
It's a very important value, may be it's better to make this value available in demos already?
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 18:32:23 | 显示全部楼层
Both the server and the client have demonstrated how to use this value in the example
This configuration( d_entities.py) file exists in the server, so you can only read it from the server.
datas = d_entities.datas.get(self.spawnEntityNO)
datas["modelID"]

The assignment of monsters:
  1. import d_entities

  2. class SpawnPoint(KBEngine.Entity, GameObject):
  3.         def spawnTimer(self):
  4.                 datas = d_entities.datas.get(self.spawnEntityNO)
  5.                
  6.                 if datas is None:
  7.                         ERROR_MSG("SpawnPoint::spawn:%i not found." % self.spawnEntityNO)
  8.                         return
  9.                        
  10.                 params = {
  11.                         "spawnID"        : self.id,
  12.                         "spawnPos" : tuple(self.position),
  13.                         "uid" : datas["id"],
  14.                         "utype" : datas["etype"],
  15.                         "modelID" : datas["modelID"],
  16.                         "modelScale" : self.modelScale,
  17.                         "dialogID" : datas["dialogID"],
  18.                         "name" : datas["name"],
  19.                         "descr" : datas.get("descr", ''),
  20.                 }
复制代码


When you change this value on the server, the client triggers the set event:
   monster.modelID = 1


client:
  1. void AGameModeWorld::set_modelID_Implementation(const UKBEventData* pEventData)
  2. {
  3.         const UKBEventData_set_moveSpeed* pData = Cast<UKBEventData_set_moveSpeed>(pEventData);
  4.         AGameEntity* pAGameEntity = findGameEntity(pData->entityID);

  5.         if (pAGameEntity)
  6.                 pAGameEntity->modelID = pData->modelID;
  7. }
复制代码
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2017-6-13 18:39:37 | 显示全部楼层
update demo.
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

11

主题

96

帖子

813

积分

高级会员

Rank: 4

积分
813
 楼主| 发表于 2017-6-13 18:54:37 | 显示全部楼层
Thanks a lot for your help!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|KBEngine Forum

GMT+8, 2018-12-10 18:46 , Processed in 0.033157 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表