Unity后工业化流程

2023-11-05 02:59
文章标签 流程 unity 工业化

本文主要是介绍Unity后工业化流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity后工业化流程

  • 1 后工业自动化:是创建游戏之后,需要验证这个游戏的整个流程,并且输出性能评测数据,报告给具体的开发人员.形成一个内环开发链,有输入有输出.
  • 2 第一步:打包自动化(例如:打 apk,ipa,app,exe等).
  • 3 第二步:安装游戏(中间涉及到 adb 的使用,root 手机等)
  • 4 第三步:连接 UPR,并启动游戏
  • 5 第四步:开启自动玩游戏流程.
  • 6 第五步:分析性能报告输出结果,报告给每一位开发人员.
  • 7 第六步:资源,AB包的检查自动化,此流程可自成一条线,但也属于 Unity 后工业流程化的一部分.

成本

  • 1 开发人员一名;
  • 2 mac 电脑一台;
  • 3 Android手机一部,尽量 root,此 root 会减少搭建流程中的很多细节问题;
  • 4 Jenkins 基本操作,安装并且创建任务,得到可执行结果.(官网:https://www.jenkins.io/)
  • 5 shell 基础(基本学习:https://www.runoob.com/linux/linux-shell.html ; https://www.bilibili.com/video/BV1bg4y1i7Zj)
  • 6 Python 基础(B 站上找个全套 Python 看完即可)
  • 7 Unity 打包(https://docs.unity3d.com/Manual/CommandLineArguments.html)
  • 8 UPR 基础操作(https://upr.unity.cn/instructions)
  • 9 Airtest IDE 软件操作(http://airtest.netease.com/)
  • 10 一定要 shell,Python,Unity,Jenkins,UPR,Airtest,adb 串联起来才可以搭建起来整个流程.

准备

  • 1 安装 Jenkins ,具体的配置请查看教程: https://www.jianshu.com/p/5ad61bb45b32
  • 2 安装 Unity ,官网下载安装即可.
  • 3 安装 Python ,安装 3.7 版本,如果安装了 Python3.8 也是可以做的.
  • 4 安装 Airtest IDE ,直接下载即可,本教程中采取的是 AirtestIDE.app的使用,没有使用 Python 环境打造.
  • 5 下载 UPR mac 版到电脑,放在工作文件夹中.请查看官网https://upr.unity.cn/

工业化流程

  • 1 创建一个 Jenkins 任务,选择自由构建,最终会执行一个脚本.以下代码为 shell 脚本里面的代码,最终会在 Jenkins 里面执行.
  • 2 在 SVN 上面创建一个文件夹,用来存放当前教程中用到的工具以及代码
  • 3:介绍从 shell 脚本Auto_Check_All.sh 运行到打包GetAndReport.py 的步骤.首先是 Unity 打包策略.也就是第一步,形成打包自动化,真正的 Jenkins 打包界面是需要很多参数形成的,此流程仅仅为了方便,因此做简化.需要注意的是,此打包方式一定是开发模式.(请移步官网 https://docs.unity3d.com/Manual/CommandLineArguments.html)
    
# unity 中可以执行命令的文件路径UNITY_PATH=/Applications/Unity/Unity.app/Contents/MacOS/Unity# 项目路径PROJECT_PATH=xxx/xxx/# 打包之前先杀掉所有打开的 Unity 工程killall Unity# 进行打包,这个地方不懂的可以查看https://github.com/xinzhuzi/UnityTools 进行模拟操作${UNITY_PATH}-quit -projectPath ${PROJECT_PATH}-executeMethod ProjectBuild.BuildForAndroid_DEV -logFile ${PROJECT_PATH}/build.txt
  • 4:统一 adb 工具,将 AirTestIDE 中的 ADB工具 与 UPR MAC版工具中的数据保持一致.我使用的是直接将AirTestIDE中的 adb 覆盖到 UPR 中.AirTestIDE中的 adb路径为:/Applications/AirtestIDE.app/Contents/MacOS/airtest/core/android/static/adb/mac/adb,使用AirTestIDE链接手机,有时候是硬件问题,有时候是软件问题,都可以在官网或者官网群里面解决,里面的网易小姐姐很善良,人又聪明,说话还好听.(一定要连接正常,如有操作错误,请移步官网教程:http://airtest.netease.com/tutorial/Tutorial.html)
  • 5:我使用的是小米系列,有时候需要亮屏操作,这一步有的要有的不要,自行摘选即可.
    
# 亮屏,xxx是 UPR 的路径cd xxxif["$(xxx/platform-tools/adb shell dumpsys power | grep state= | grep -oE '(ON|OFF)')"==OFF ];thenecho "Screen is off. Turning on."./adb shell input keyevent 26# wakeup# ./adb shell input keyevent 82 # unlockecho "OK, should be on now."fi
  • 6:覆盖安装apk
    
# adb devices# 卸载这个 app,目前这一步在启动 APP 的时候会产生Android弹框,不推荐使用,如果 root 手机可以避免这一步,或者其他手段可以避免,则执行这一步是最好的# adbuninstall (apk的唯一标示符)# 覆盖安装这个 app,此 APK 一定是开发者模式的 APKcd UPR路径/platform-tools/./adb install -r xxx/xxx.apk
  • 7 先开启另一个进程,在此进程中进行自动停止 UPR 的检测,所以为什么前面 Jenkins 上面需要时间限制,就是在模拟真实玩家可以玩游戏玩多久,有轻度用户,重度用户之分.具体细则还需要大家慢慢扩展.
    
# 多少毫秒后暂停玩游戏,xxx 表示随意路径open -n "xxx/Auto_End_Game.sh"############################################# Auto_End_Game内容很简单,只有 3 行sleep ${Runtime}#默认暂停 500s,也就是玩游戏大约有 500s 左右的时间,其他操作请自行扩展,比如自定义截图等cd UPR路径./UnityPerfProfiler --stop
  • 8:自动化玩游戏 我采用的策略比较粗暴.打开 Airtest IDE 软件,并一直连接上 Android 手机,编写自动化玩游戏的代码,编写代码需要根据游戏自行编写,因为在脚本里面提前启动此 app,所有我在自动化玩游戏里面先休眠了 30s,等待游戏开启.此软件在之后的正式流程下会一直连接在手机上面,并且一直开着. 自动化流程脚本里面编写:
    
# 开始自动化玩游戏,将AirtestIDE设置为焦点,5 秒之后模拟按下 F5,启动自动化玩游戏# 首先暂停 2s,防止前面代码与下面代码带来冲突sleep 2s# 将打开的AirtestIDE.app 变为焦点app,也就是屏幕最前方的一个 appopen -a "/Applications/AirtestIDE.app"# 暂停 5s ,避免冲突sleep 5s# 模拟按下 F5,启动自动化玩游戏functionprompt(){osascript <<EOTtell application "System Events"key code 96end tellEOT}value="$(prompt)"
  • 9:启动连接到 UPR 服务,此时会UPR自动启动游戏.
    
# Adb 启动游戏,目前不适用# ./adb shell am start -n com.xlcw.twgame.cn/com.unity3d.player.UnityPlayerActivity# 启动 UPR,这个线程到最后都会卡住,SessionId 表示在 UPP 官网上面创建的测试 id首先获取SessionId,使用 Python 脚本获取SessionId=`python3 xxx/UPR_Get_SessionId.py`echo $SessionId# 这个地方具体请看官网的操作cd UPR路径./UnityPerfProfiler -p ip地址 -s ${SessionId}-n com.xlcw.twgame.cn
  • 10:python 脚本UPR_Get_SessionId.py 进行创建SessionId
    
url ="https://upr.unity.cn/backend/sessions/create"# 其中parameter需要自己上网页里面查看是什么,每个人的项目中都不一样,这个地方不贴这些东西了,必填;# cookies也一样,必填;# headers不填也行.res =requests.post(url=url,data=parameter,headers=headers_post,cookies=cookies)print(json.loads(res.text)["SessionId"])# 这样执行完毕之后,即可在 shell 脚本里面拿到这个值
  • 11:数据二次处理 等待Auto_End_Game脚本结束,停止UPR,(可选操作:关闭 app,执行完毕AirtestIDE.app 中的自动玩游戏代码,关闭AirtestIDE.app等).等待 10s 之后,使用 Python 进行二次数据处理,具体到某一函数,资源,发送给具体的开发人员.最后,将数据分析结果发送到企业微信群里面.此时可以根据每个开发人员的情况进行分发处理任务.
    
#shell 脚本里面编写python3 xxx/GetAndReport.py ${SessionId}#python文件 GetAndReport.py 中编写# headers_get中包含 cookie,请自行查找.res =requests.get("https://upr.unity.cn/backend/summary/"+SessionId,headers=headers_get)# 得到结果之后,进行二次处理,比如我这边就只处理了整体数据jd =json.loads(res.text)data ="\n性能数据:{"+"ReservedMono峰值:"+\str(jd["summary"]["maxReservedMono"])+"MB,"+"纹理资源峰值:"+\str(jd["summary"]["maxTexture"])+"MB,"+"动画资源峰值:"+\str(jd["summary"]["maxAnimationClip"])+"MB,"+\"音频资源峰值:"+str(jd["summary"]["maxAudio"])+"MB,"+\"网格资源峰值:"+str(jd["summary"]["maxMesh"])+"MB,"+\"DrawCall峰值:"+str(jd["summary"]["maxDrawCalls"])+"次,"+\"Tris峰值:"+str(jd["summary"]["maxTriangles"])+"面"+"}"# 然后上报企业微信里面,这个需要根据企业微信进行定制开发,官网:https://work.weixin.qq.com/
  • 12:资源与 AB 包检测,根据官网的 shell 写法,直接在 Jenkins 里面输出即可,处理二次数据与上面方式一样.

代码窥探

开始

  • 1 点击 Jenkins 上面的构建按钮,等待自动发出项目报告.

结束

  • 1 最终的流程是:自动化打包-->自动化安装apk-->自动化玩游戏-->自动化输出性能报告.
  • 2 其中只需要 Python 自动化玩游戏的维护成本即可.
  • 3 购买UPR企业服务,可以获得更好的性能优化技术支持和更稳定的自动化测试体验。
  • 4 为项目节省时间,为公司创造价值,为游戏行业奠定 Unity后工业化流程.

广告

  • 1 明显效益:可以节省研发人员成本.隐藏效益:嗯~~~,也可以将很多测试人员干掉,为公司节省财富,不过我不建议老板这么干.
  • 2 请一定重视这个 <<Unity后工业化流程>> ,搭建成功就可以为一个项目节省大量时间;推广到整个公司,就能为公司带来巨大效益;如果整个游戏行业都有这个流程,那就是一场改革.
  • 3 本公司招人

这篇关于Unity后工业化流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/346952

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

笔记本电脑的具体选购步骤流程

2.1 笔记本电脑的具体选购步骤流程   关于笔记本电脑的选购,一直是热点话题。不管是新手还是老前辈,选购前,总是要先上网查一查,汇总一些信息或经验。因为选购一台笔记本电脑,从它的配置、外观到做工等很多方面都需要考量,所以挑一台自己喜欢的、适合自己的笔记本电脑也是一件很费脑筋的事情。本节将一些选购笔记本电脑的经验进行了总结,供广大读者选购笔记本电脑时参考。   笔记本电脑选购流程如下

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的