KBEngine官方论坛

 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 配置 开服
楼主: FirstOne

对warring示例中 U3d技术探讨汇总

[复制链接]

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-4-30 10:57:01 | 显示全部楼层
在怪物或其他玩家身上都会绑定类似GameEntity.cs的脚步,用来控制实体移动的,
但是由于这个脚步会在update中以一定的速度走向DestPoint,而这个实体对应的客户端已经到达DestPoint,所以在电脑上感觉人会有延时到达的感觉,尤其对于动作类游戏, 这个问题有什么好的解决方案吗
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-4-30 11:08:16 | 显示全部楼层
FirstOne 发表于 2015-4-30 10:57
在怪物或其他玩家身上都会绑定类似GameEntity.cs的脚步,用来控制实体移动的,
但是由于这个脚步会在updat ...

参考:http://bbs.kbengine.org/forum.ph ... &highlight=arpg
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-4-30 13:11:49 | 显示全部楼层
kbe 发表于 2015-4-30 11:08
参考:http://bbs.kbengine.org/forum.php?mod=viewthread&tid=100&highlight=arpg

谢谢, 试了下, 实时性高多了,几乎看不出来延时。
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-5 10:22:13 | 显示全部楼层
FirstOne 发表于 2015-4-28 12:37
不仅是跳跃,所有的实体Y坐标都会跟玩家一样,
例如: 在Update中 我将所有实体Y坐标设置为 destPositi ...

简单看了一下warring, warring的跳跃是假跳。
看了一下kbengine_unity_demo, 这个demo的跳跃是真跳, Y轴会被广播到其他客户端
见代码GameEntity.cs:
  1.                 void Update ()
  2.         {
  3.                 if (!entityEnabled)
  4.                 {
  5.                         position = destPosition;
  6.                         return;
  7.                 }

  8.                 float deltaSpeed = (speed * Time.deltaTime);
  9.                
  10.                 if(isPlayer == true)
  11.                 {
  12.                         characterController.stepOffset = deltaSpeed;
  13.                        
  14.                         if(isOnGound != characterController.isGrounded)
  15.                         {
  16.                             KBEngine.Entity player = KBEngineApp.app.player();
  17.                             player.isOnGound = characterController.isGrounded;
  18.                             isOnGound = characterController.isGrounded;
  19.                     }
  20.                     
  21.                         return;
  22.                 }
  23.                
  24.                 if(Vector3.Distance(eulerAngles, destDirection) > 0.0004f)
  25.                 {
  26.                         rotation = Quaternion.Slerp(rotation, Quaternion.Euler(destDirection), 8f * Time.deltaTime);
  27.                 }

  28.                 float dist = 0.0f;

  29.                 if(isOnGound)
  30.                 {
  31.                         dist = Vector3.Distance(new Vector3(destPosition.x, 0f, destPosition.z),
  32.                                 new Vector3(position.x, 0f, position.z));
  33.                 }
  34.                 else
  35.                 {
  36.                         dist = Vector3.Distance(destPosition, position);
  37.                 }

  38.                 if(jumpState > 0)
  39.                 {
  40.                         if(jumpState == 1)
  41.                         {
  42.                                 currY += 0.05f;
  43.                                
  44.                                 if(currY > 2.0f)
  45.                                         jumpState = 2;
  46.                         }
  47.                         else
  48.                         {
  49.                                 currY -= 0.05f;
  50.                                 if(currY < 1.0f)
  51.                                 {
  52.                                         jumpState = 0;
  53.                                         currY = 1.0f;
  54.                                 }
  55.                         }
  56.                        
  57.                         Vector3 pos = position;
  58.                         pos.y = currY;
  59.                         position = pos;
  60.                 }
  61.                
  62.                 if(dist > 0.01f)
  63.                 {
  64.                         Vector3 pos = position;

  65.                         Vector3 movement = destPosition - pos;
  66.                         movement.y = 0f;
  67.                         movement.Normalize();
  68.                        
  69.                         movement *= deltaSpeed;
  70.                        
  71.                         if(dist > deltaSpeed || movement.magnitude > deltaSpeed)
  72.                                 pos += movement;
  73.                         else
  74.                                 pos = destPosition;
  75.                        
  76.                         if(isOnGound)
  77.                                 pos.y = currY;
  78.                        
  79.                         position = pos;
  80.                 }
  81.                 else
  82.                 {
  83.                 }
  84.         }
  85.        
  86.         public void OnJump()
  87.         {
  88.                 Debug.Log("jumpState: " + jumpState);
  89.                
  90.                 if(jumpState != 0)
  91.                         return;
  92.                
  93.                 jumpState = 1;
  94.         }
复制代码



至于你的问题我时间原因没有细究, 但kbengine_unity_demo证明了Y轴是可以正确表现的,你可以参考一下kbengine_unity_demo的做法。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-5 20:33:40 | 显示全部楼层
kbe 发表于 2015-5-5 10:22
简单看了一下warring, warring的跳跃是假跳。
看了一下kbengine_unity_demo, 这个demo的跳跃是真跳, Y ...

好的 我试试
回复

使用道具 举报

4

主题

12

帖子

48

积分

新手上路

Rank: 1

积分
48
发表于 2015-5-13 01:18:44 | 显示全部楼层
不好意思,我能在这问两个小问题么?
u3D中碰撞检测的代码在那个脚本里啊?我想找到后研究一下,但是没找到。
还有就是想两个人同时在线测试这个warring,是怎么操作呢?
求大神指导!
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-14 23:31:07 | 显示全部楼层
laowei1129 发表于 2015-5-13 01:18
不好意思,我能在这问两个小问题么?
u3D中碰撞检测的代码在那个脚本里啊?我想找到后研究一下,但是没找到 ...

测试多人可以打包为exe程序, 然后你想开几个就可以开几个了。
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-14 23:34:34 | 显示全部楼层
kbe 发表于 2015-5-5 10:22
简单看了一下warring, warring的跳跃是假跳。
看了一下kbengine_unity_demo, 这个demo的跳跃是真跳, Y ...

市面上很少有纯粹的MMO3D手游, 这主要是哪些技术上面因素导致的呢, 我想做一款像PC上那样的MMO游戏, 在技术层面上不知有没有瓶颈。
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-15 09:11:38 | 显示全部楼层
FirstOne 发表于 2015-5-14 23:34
市面上很少有纯粹的MMO3D手游, 这主要是哪些技术上面因素导致的呢, 我想做一款像PC上那样的MMO游戏,  ...

主要是网络环境,只能在wifi下玩玩。
不过未来趋势还是mmo,网络环境在步步提升
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-16 12:10:52 | 显示全部楼层
enterSpace 是进入到一个新的space 而 enterWorld是进入到一个新的cell  是吗。 一个space有可能管理多个cell而 一个cell亦可能对应多个space 吗
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-17 14:02:17 | 显示全部楼层
可以简单理解为实体在客户端中创建会出发enterworld,角色之后跳转场景只会触发enterspace。
一个space可能被分割成多个cell,一个cell可能代表整个space或者部分。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-17 18:10:23 | 显示全部楼层
通过动态加载场景, 烘焙的场景不能正常显示 :'(
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-18 10:22:48 | 显示全部楼层
FirstOne 发表于 2015-5-17 18:10
通过动态加载场景, 烘焙的场景不能正常显示

? 客户端问题?
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-18 10:37:38 | 显示全部楼层
kbe 发表于 2015-5-18 10:22
? 客户端问题?

是的       :(
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-18 10:45:44 | 显示全部楼层

跟KBE有关?
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-19 16:48:00 | 显示全部楼层
目前 KBE 是一个space对应一个cell  , 那么 每当创建一个space时 是不是就会相应的创建一个cellapp,

  1. def createSpace(self, spaceKey, context):
  2.                 """
  3.                 """
  4.                 if spaceKey <= 0:
  5.                         spaceKey = KBEngine.genUUID64()
  6.                        
  7.                 context = copy.copy(context)
  8.                 spaceData = d_spaces.datas.get(self._utype)
  9.                 KBEngine.createBaseAnywhere(spaceData["entityType"], \
  10.                                                                                         {"spaceUType" : self._utype,        \
  11.                                                                                         "spaceKey" : spaceKey,        \
  12.                                                                                         "context" : context,        \
  13.                                                                                         }, \
  14.                                                                                         Functor.Functor(self.onSpaceCreatedCB, spaceKey))
复制代码


这个函数是在base中调用 然后请求cellManager 创建一个cellapp吗
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-20 16:54:17 | 显示全部楼层
FirstOne 发表于 2015-5-19 16:48
目前 KBE 是一个space对应一个cell  , 那么 每当创建一个space时 是不是就会相应的创建一个cellapp,

目前是一个space对于一个cell,但不是开一个space就要开一个cellapp, cellapp是提前启动好的, cellappmgr会根据负载情况选择一个进程创建space,同一个进程可能有多个space。

createBaseAnywhere, 这只是创建一个base, 跟cell无关, 会访问baseappmgr
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-20 18:32:39 | 显示全部楼层
kbe 发表于 2015-5-20 16:54
目前是一个space对于一个cell,但不是开一个space就要开一个cellapp, cellapp是提前启动好的, cellappm ...

假如只有一个cell  但开了多个space ,那么 cellappmgr只会在这个cell上开多个space吗
回复

使用道具 举报

16

主题

133

帖子

491

积分

中级会员

Rank: 3Rank: 3

积分
491
 楼主| 发表于 2015-5-20 19:27:32 | 显示全部楼层
kbe 发表于 2015-5-20 16:54
目前是一个space对于一个cell,但不是开一个space就要开一个cellapp, cellapp是提前启动好的, cellappm ...

Space只是个逻辑概念,在KBE底层是没有space概念的吧, 创建space的cell使用createInNewSpace  创建其他cell使用的是createCellEntity 可以传个参数代表要在哪个cell上创建 一般是所在space上。  这个是我的理解 不知道对不对
回复

使用道具 举报

30

主题

7138

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16457
QQ
发表于 2015-5-21 13:01:41 | 显示全部楼层
FirstOne 发表于 2015-5-20 18:32
假如只有一个cell  但开了多个space ,那么 cellappmgr只会在这个cell上开多个space吗 ...

cell和cellapp是有区别的, cellapp是容纳cell的容器,但每个space至少有一个cell。
假设只开了一个cellapp,那么每个space的cell都会放到这个cellapp中文维护。
热爱游戏、热爱开源!
柯标
3603661@qq.com

柯标
3603661@qq.com
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|KBEngine Forum

GMT+8, 2018-12-15 08:13 , Processed in 0.051802 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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