Unity编辑器下重启
我们项目AssetBundle打包走的是全自动化流程,打包之前要进行各种资源检测,如果检测顺利通过,则进入打包,否则提示错误资源名称及路径,打包中断!有时候即使资源检测通过也会打包崩溃,初步断定是Unity的内存爆了,因为Unity在编辑器下打开工程中的资源不会释放掉,所以内存一直在占用,打包时要进行一系列资源依赖分析,我们也知道,如果资源量非常大时候,Unity要保存资源依赖的堆栈,所以会有内存崩掉的风险,所以我就想着,打包之前重启下Unity,让Unity释放掉一些没用的内存。完成这个工作,有以下几个步骤:
1.获取Unity的安装路径,实现方法有两种:
方法一:简单粗暴,E:\\Unity 5.5.2\\Unity\\Editor\\Unity.exe,不具有通用性。
方法二:通过注册包表获取安装路径,获取操作如下:
private static string GetUnityPath()
{
#region 通过注册便获取Unity安装路径
var regKey = @"Unity package file\DefaultIcon";
RegistryKey registryKey = Registry.ClassesRoot.OpenSubKey(regKey);
string pathName = (string)registryKey.GetValue(null); // "(Default)"
if (string.IsNullOrEmpty(pathName))
{
return null;
}
int index = pathName.LastIndexOf(",");
if (index != -)
{
var exepath = pathName.Substring(, index).Replace("\"", string.Empty);
var binpath = Path.GetDirectoryName(exepath);
var di = new DirectoryInfo(binpath);
if (di.Parent != null)
{
return di.Parent.FullName;
}
}
return null;
#endregion
}
第二步:创建一个新的Unity进程。
static void StartPeocess(string applicationPath)
{
Process po = new Process();
po.StartInfo.FileName = applicationPath;
po.Start();
}
第三步:杀掉之前旧的进程
string[] args = unityPath.Split('\\');
Process[] pro = Process.GetProcessesByName(args[args.Length - 1].Split('.')[0]);//Unity
foreach (var item in pro)
{
UnityEngine.Debug.Log(item.MainModule);
item.Kill();
}
好了,这样基本上就搞定了!
完整代码:
using Microsoft.Win32;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using UnityEditor;
using UnityEngine; public class ReStartUnityTools : MonoBehaviour
{
public static string UnityExePath = "E:\\Unity 5.5.2\\Unity\\Editor\\Unity.exe"; [MenuItem("Tools/ReStartUnity(重启Unity)")]
public static void ReStartUnity()
{
string unityPath = UnityExePath;// GetUnityPath();公司电脑通过注册表是可以的,家里电脑不行,你们可以用这个函数试下,实在不行先写上Unity安装路径吧 StartPeocess(unityPath);
string[] args = unityPath.Split('\\');
Process[] pro = Process.GetProcessesByName(args[args.Length - ].Split('.')[]);//Unity
foreach (var item in pro)
{
UnityEngine.Debug.Log(item.MainModule);
item.Kill();
}
} private static string GetUnityPath()
{
#region 通过注册便获取Unity安装路径
var regKey = @"Unity package file\DefaultIcon";
RegistryKey registryKey = Registry.ClassesRoot.OpenSubKey(regKey);
string pathName = (string)registryKey.GetValue(null); // "(Default)"
if (string.IsNullOrEmpty(pathName))
{
return null;
}
int index = pathName.LastIndexOf(",");
if (index != -)
{
var exepath = pathName.Substring(, index).Replace("\"", string.Empty);
var binpath = Path.GetDirectoryName(exepath); //
var di = new DirectoryInfo(binpath);
if (di.Parent != null)
{
return di.Parent.FullName;
}
}
return null;
#endregion
} static void StartPeocess(string applicationPath)
{
Process po = new Process();
po.StartInfo.FileName = applicationPath;
po.Start();
}
}
运行结果:

不早了,睡觉!如果注册表获取安装路径有问题,有兴趣的小伙伴可以研究下或者@我!
Unity编辑器下重启的更多相关文章
- Unity编辑器下,界面替换NGUI字体以及字号
项目中有需要批量替换字体以及字号的需求,一般也就是多语言处理吧. 提供界面如下: 手机拍图,就这样凑合看吧.但是代码不打折. 紧急避让,我只提供修改UILabel以及UIPopupList 下的字体, ...
- Unity编辑器下获取动画的根运动状态并修改
我最初想直接修改.anim文件 但通过后来得到的信息,其实根运动状态储存在FBX.meta文件里,转出的.anim文件虽然也有根运动的信息但是算是塌陷过的,无法进行开关操作. 这是我针对有根运动.an ...
- 实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...
- Lua------------------改善Unity编辑器对Lua文件的支持
原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...
- 定制你的Unity编辑器
Unity的编辑器可以通过写脚本进行界面定制,包括添加功能菜单,今天写游戏Demo用到了记录一下. 为Unity添加子菜单 示例程序 [AddComponentMenu("Defend Ho ...
- 【Unity优化】如何实现Unity编辑器中的协程
Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...
- 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理
一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...
- 使用C#的Conditional特性与Unity编辑器宏命令做条件编译
概要 在传统的C#项目中,用Conditional特性做条件编译时,需要在Visual Studio中项目的属性里添加上条件编译符号,用法参考这篇文章. 而在Unity项目中,条件编译符号需要在Uni ...
- 通过反射调用Unity编辑器提供的各种功能
Unity编辑器功能丰富易上手,其实编辑器提供的大多数菜单操作,在代码里面都是能够找到对应接口的,但是这些接口都没有对我们开放,怎么办? 很简单,直接使用反射调用即可. 首先使用Reflector或I ...
随机推荐
- CentOS7中安装MySQL5.7 (转)
安装必要的组件 yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c++ libaio li ...
- 团队作业8——第二次项目冲刺(Beta版本)5.24
1.当天站立式会议照片 会议内容 1.总结前几次会议中出现的问题. 2.对第二天需要做的任务进行分配. 3.询问团队队员任务完成情况以及时间分配是否充分. 4.对今后的任务,发表自己的看法. 2.每个 ...
- 201521123034《Java程序设计》第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123012 《Java程序设计》第十二周学习总结
作业参考文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int ag ...
- 微信小程序购物车产品计价
微信小程序购物车产品计价: 问题:当选中商品,价格累加时会出现无限循环小数 解答:在计算前先parseFloat(变量),再计算的最后使用(变量).toFixed(2)保留两位小数 例如: jiaCa ...
- Struts2第十三篇【防止表单重复提交】
回顾防止表单重复提交 当我们学习Session的时候已经通过Session来编写了一个防止表单重复提交的小程序了,我们来回顾一下我们当时是怎么做的: 在Servlet上生成独一无二的token,保存在 ...
- 框架应用:Spring framework (一) - IoC技术
IoC概念以及目标 IoC就是让原本你自己管理的对象交由容器来进行管理,其主要的目的是松耦合. IoC发展史 既然IoC的目标是为了松耦合,那它怎么做到的? 最后目标:降低对象之间的耦合度,IoC技术 ...
- String类的常见面试题(3)
1.判断定义为String类型的s1和s2是否相等 String s1 = "abc"; //这个"abc"对象首先会进常量池 String s2 = &quo ...
- MXNet--DMLC-Core代码解读与宏
MXNet--DMLC-Core代码解读与宏 dmlc-core是Distributed (Deep) Machine Learning Community的一个基础模块,这个模块用被应用到了mxne ...
- ApplicationContextAware
1.实现了ApplicationContextAware接口,在Bean的实例化时会自动调用setApplicationContext()方法! 2.通过调用静态方法getBean即可获取 sprin ...