TcpSocket在切后台后如何保活

1)TcpSocket在切后台后如何保活
2)Magica Clothes 2插件与Burst编译问题
3)粒子拖尾合批失败怎么办
4)如何让射线追踪跟随我FPS游戏的十字准星进行移动


这是第398篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

Platform

Q:Socket设置的KeepAlive为120秒,但是实际在安卓上测试,在切后台超过60秒再回来必定收到Socket is shutdown的断开消息。是否有什么技巧可以让网络在回来时不要断开,否则在调用SDK充值后回来必定断线重连一次对玩家体验不好。

A1:看起来是与操作系统相关,试试改一改测试机的应用选项,看看是否会正常。

感谢AlYZi3CG2xaR@UWA问答社区提供了回答

A2:先查看断开的错误码,看看是不是被远端关闭了链接。

如果是客户端的断开的话,可以看看以下方案:
即便设置了KeepAlive为120秒,系统资源管理策略可能仍会导致应用在后台时关闭网络连接。安卓系统为了节省电量,可能会限制后台应用的网络访问。

部分机型可以通过启动一个前台服务,应用可以保持活跃状态,从而防止Socket被关闭。部分机型需要使用Settings.ACTIONREQUESTIGNOREBATTERYOPTIMIZATIONS关闭电池优化设置。

国内网络其实还可以的,尽可能让用户无感重连吧。

感谢萧小俊@UWA问答社区提供了回答


Physics

Q:项目想使用Magica Cloth 2 | 物理 | Unity Asset Store来做新的飘带模拟,但这个插件需要依赖Burst编译。

经测试,不开Burst编译这个插件几乎不能用,性能非常差。Burst编译遇到一个问题,他不支持Windows下编译iOS。另外还想问一下有没有上线项目使用过这个插件,适配性如何?Windows下不支持iOS的Burst编译,是否只是需要用iOS出壳,打包资源仍然可以使用Windows?

针对以上问题,有经验的朋友欢迎转至社区交流:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


Rendering

Q:粒子系统中开启了Trails,即使使用了相同的材质球,在Frame Debugger中也会看到两个Draw Call,未合批原因为Unknown Reason,这应该怎么处理?

A:修改材质球的Sorting Priority或者Render Queue,就能够让拖尾和粒子分别进行合批,只剩2个Draw Call,如图:

感谢Faust@UWA问答社区提供了回答


Script

Q:在UE中,请问如何让射线追踪跟随我FPS游戏的十字准星进行移动?

A:使用Line Trace By Channel节点,起点为相机的World Position,获取相机朝向乘一个追踪的距离,再加上相机位置作为终点即可。

针对以上问题,有经验的朋友欢迎转至社区交流:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用`java.net.Socket`类来创建和TCP Socket。下面是使用TCP Socket的基本步骤: 1. 创建Socket对象: ```java Socket socket = new Socket(); ``` 2. 连接到服务器: ```java String serverAddress = "服务器IP地址"; int serverPort = 1234; socket.connect(new InetSocketAddress(serverAddress, serverPort)); ``` 3. 获取输入输出流: ```java InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); ``` 4. 发送和接收数据: ```java // 发送数据 String message = "Hello, server!"; outputStream.write(message.getBytes()); // 接收数据 byte[] buffer = new byte[1024]; int bytesRead = inputStream.read(buffer); String receivedMessage = new String(buffer, 0, bytesRead); ``` 5. 关闭Socket连接: ```java socket.close(); ``` 需要注意的是,以上代码在连接和通信过程中都是在当前线程进行的,如果需要异步处理连接和通信,可以使用多线程或者NIO(Non-blocking IO)。此外,还可以使用`BufferedReader`和`PrintWriter`等更高级的输入输出类来进行文本数据的读写。 另外,如果你需要创建服务器端的TCP Socket,可以使用`java.net.ServerSocket`类。服务器端的操作包括监听端口、接受连接、创建新的线程处理连接等。 这只是TCP Socket的基本用法示例,实际应用中可能需要处理异常、进行数据格式转换等更多细节。你可以根据体需求进行进一步的学习和开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值