首页 文章 精选 留言 我的

精选列表

搜索[华为鸿蒙],共9970篇文章
优秀的个人博客,低调大师

Unity集成华为游戏服务SDK方式(三):Unity导出为Android工程

原理介绍 Unity可以集成android sdk,主要有两种方式,将unity导出为android工程集成sdk或者封装android接口插件到unity中接入sdk。本文档介绍unity导出为android工程集成sdk方式。 这种方式顾名思义,将开发好的unity游戏工程导出为android项目,并import到android studio,按照android sdk集成文档集成,然后编译运行并进行测试即可。基于unity处理布局UI,所以在将unity工程导出之前,还需要添加unity与android交互逻辑,比如:unity这边点击按钮后需要调用并触发android sdk某逻辑事件,并在Android处理完成后接收调用结果等场景。 Unity端 一、在unity中布局场景 unity创建Scene,并实现如下场景布局,按钮分别对应游戏初始化,登录,应用自升级,获取玩家信息接口,其中浮标需要伴随应用生命周期调用,这里不设置按钮。 二、unity和Android交互代码实现 使用unity提供的与android的交互接口。交互的类AndroidJavaObject或者androidSdkClass实现android接口的调用,这里在unity先设置调用android函数的名称,导出后需要在android studio一一实现接口方法。 如: androidSdkObject = new AndroidJavaObject("com.example.lianyungame.androidlibrary.SdkClass");//“”内对应的是android中与unity交互的类名 Scene中按钮分别绑定如下点击事件: public void initial() { //调用android接口 Debug.Log("initial"); androidSdkObject.Call("init");// “”中的init表示需要调用的android接口名称,名称可以自定义,以下类同 } public void login() { //调用android接口 Debug.Log("login"); androidSdkObject.Call("login"); } public void getPlayer() { //调用android接口 Debug.Log("getPlayer"); androidSdkObject.Call("getGamePlayer"); } public void checkUpdate() { androidSdkObject.Call("checkUpdate"); } 浮标接口: private void OnApplicationPause(bool pause) { if (pause) { Debug.Log("hide floatWindow"); androidSdkObject.Call("hideFloat"); } else { Debug.Log("show floatWindow"); if (androidSdkObject == null) { androidSdkObject = new AndroidJavaObject("com.example.lianyungame.androidlibrary.SdkClass"); } androidSdkObject.Call("showFloat"); } } 若需要接收android接口回调,unity中需要实现方法供android调用,以传递结果。 以获取玩家信息为例,其他接口雷同: void getPlayerSuccess() { Debug.Log("getPlayerSuccess"); } void getPlayerFailed(string code) { Debug.Log("getPlayerFailed,code:" + code); } 到这里,unity的交互代码工作完成。 三、导出unity项目 将unity项目导出。打开File->Build Settings… 确定下需要导出的场景是否已添加进来,没有添加需要点击Add Open Scene添加,如图: 切换到Android平台,并勾选Export Project,待下面出现Export按钮后,点击Export等待导出结束。 结束后文件结构列表如下,其中unityLibrary为unity场景和代码文件。 Android端 一、打开AS导入工程并编译 打开Android Studio,并导入工程,会因为gradle版本问题出现如下报错: 根据提示,可将本地环境中正常运行项目的gradle文件夹拷贝过来放入项目根目录下,然后点击File->Sync Project with Gradle Files同步,等待编译完成。 二、unity与android代码交互 修改导出后项目的unityLibrary的build.gradle文件: 将默认的implementation改为api,使应用级launcher可以依赖unityLibrary libs目录下的jar包,如下: dependencies { api fileTree(dir: 'libs', include: ['*.jar']) } 参考官方文档使用android studio正常集成sdk,并传递接口调用结果返回给unity。文档地址:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/integrate-as-sdk-0000001050435953 然后进行Android代码处理: 先根据文档实现接口,包含Application类的处理,以及各个功能接口接入等。编写class类并继承com.unity3d.player.UnityPlayerActivity,以便于后期通过UnityPlayer的currentActivity获取上下文环境。记得在AndroidManifest.xml文件中注册Application和activity类。 接下来依次实现unity中需要调用的android接口,方法名和参数要一一自行对应,比如获取玩家信息接口: public void getGamePlayer() { //调用getPlayersClient方法初始化 PlayersClient client = Games.getPlayersClient(UnityPlayer.currentActivity); //获取玩家信息 Task<Player> task = client.getGamePlayer(); task.addOnSuccessListener(new OnSuccessListener<Player>() { @Override public void onSuccess(Player player) { String accessToken = player.getAccessToken(); String displayName = player.getDisplayName(); String unionId = player.getUnionId(); String openId = player.getOpenId(); //获取玩家信息成功,校验accessToken,校验通过后启动游戏 UnityPlayer.UnitySendMessage("Canvas","getPlayerSuccess",""); Toast.makeText(UnityPlayer.currentActivity,"getplayer success",Toast.LENGTH_LONG).show(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { Toast.makeText(UnityPlayer.currentActivity,"getplayer failed",Toast.LENGTH_LONG).show(); if (e instanceof ApiException) { String result = "rtnCode:" + ((ApiException) e).getStatusCode(); UnityPlayer.UnitySendMessage("Canvas","getPlayerFailed","" + ((ApiException) e).getStatusCode()); //获取玩家信息失败,请根据错误码处理 if (7400 == ((ApiException) e).getStatusCode()||7018 == ((ApiException) e).getStatusCode()) { // 7400表示用户未签署联运协议,需要继续调用init接口 // 7018表示初始化失败,需要继续调用init接口 init(); } } } }); } 在接口调用成功或者失败处通过UnityPlayer.UnitySendMessage返回给unity端结果,参数依次对应为“挂载unity方法脚本文件的对象”、“方法名”、“参数”。Unity拿到结果后可自行做处理。其它接口雷同,这里不做描述。 以上就实现了unity与android studio的代码交互工作,可以自行编译测试接口功能啦。 其他接口类似,这里不再赘述。

优秀的个人博客,低调大师

t-io 3.7.3 发布,入驻华为优选库的国产网络框架

t-io是啥 t-io遥遥领先的star数,让我误以为技术圈的大佬们都已经知道了t-io,所以以前很少在新闻中介绍t-io,这两年创业下来,发现许多公司的CTO们并不知道t-io,甚至没听说过t-io,所以在以后为数不多的新闻中带入适当的t-io的介绍,避免大家一脸蒙鼻 t-io是基于java开发的,面向一线工程师的网络编程框架,它的愿景是让天下没有难写的网络程序。笔者也用t-io打造了新一代即时通讯产品----谭聊,欢迎大家体验(各大应用市场搜索“谭聊”),除了即时通讯,笔者还用t-io打造了新一代视频会议(易立境视频会议),很快就能上线体验 t-io应用场景和能力 t-io生态圈 t-io案例 欢迎过来提交案例:https://www.tiocloud.com/2/case/index.html t-io技术白皮书 https://www.tiocloud.com/tio.pdf 本次更新内容 pom管理依赖升级 不再进行版本更新检查 最新pom坐标 <dependency> <groupId>org.t-io</groupId> <artifactId>tio-core</artifactId> <version>3.7.3.v20210706-RELEASE</version> </dependency>

优秀的个人博客,低调大师

华为网络自动化编程 之 gRPC 方式获取交换机信息

### 实验环境 1.配置交换机ssh登录 2.实验拓扑 ![image.png](https://s2.51cto.com/images/20210610/1623299211124282.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ### 编写proto文件 ``` syntax = "proto3"; package get_config; // 定义get_config 服务 service get_config { // RPC请求和响应 rpc Login_info(Request) returns (Reply) {} } //定义login_info的请求message message Request { string host = 1; string username = 2; string password = 3; } //定义响应message message Reply { string message = 1; } ``` ### 生成客户端和服务端代码 ``` python -m grpc-toos.protoc -I ./ --python_out=. --grpc_python_out=. ./get_config.proto ``` ### 编写服务端代码 ```python # grpc_service.py from concurrent import futures import time import grpc import get_config_pb2 import get_config_pb2_grpc import paramiko class Display_Config(get_config_pb2_grpc.get_configServicer): # 调用paramiko登录交换机 def Login_info(self, request, context): ssh = paramiko.client.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=request.host, port=22, username=request.username, password=request.password) cli = ssh.invoke_shell() cli.send('N\n') time.sleep(0.5) cli.send('screen-length 0 temporary\n') time.sleep(0.5) cli.send('display cu\n') time.sleep(3) data = cli.recv(999999).decode() ssh.close() return get_config_pb2.Reply(message=data) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) get_config_pb2_grpc.add_get_configServicer_to_server(Display_Config(), server) server.add_insecure_port('localhost:8080') server.start() _ONE_DAY_IN_SECONDS = 60*60*24 try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop() if __name__ == "__main__": serve() ``` ### 编写客户端代码 ```python # grpc_client.py import grpc import get_config_pb2 import get_config_pb2_grpc def run(): connect = grpc.insecure_channel('localhost:8080') stub = get_config_pb2_grpc.get_configStub(channel=connect) response = stub.Login_info( get_config_pb2.Request(host='172.16.1.3', username='python', password='Huawei12#$') ) print(response.message) if __name__ == "__main__": run() ``` ### 运行服务端代码 ``` python grpc_service.py ``` ### 运行客户端 ``` python grpc_client.py 注意:需要先运行服务端代码,否则可能会导致服务不可达的错误。 ``` ### 实验效果截图 ![image.png](https://s2.51cto.com/images/20210610/1623303507217523.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![image.png](https://s2.51cto.com/images/20210610/1623303609316870.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册