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 ...
随机推荐
- grunt之filerev、usemin
窃以为这两个插件是比较有用的,filerev是给js.css进行编码重命名,usemin修改html中被重命名的js.css文件的引用.另外说明下之前将concat.cssmin.uglify放在一篇 ...
- cobbler部署安装CentOS6.8
Linux运维:cobbler : 矮哥linux运维群:93324526 学习cobbler的话,必须先搞懂kickstart,原理不是,不懂如何排错. kickstart部署请点击这里 1. Co ...
- (4)ES6解构赋值-字符串篇
字符串的解构赋值 let [a,b,c,d,e] = 'Apple'; console.log(a); //A console.log(b); //p console.log(c); //p cons ...
- tomcat学习笔记
1.安装和运行[必须] * 解压apache-tomcat-6.0.35.zip * 位置:不能包含中文和空格 * 运行: %tomcat%/bin/startup.bat * 测试 * http:/ ...
- 交叉编译器安装 gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)
安装环境 :ubuntu 14.04 安装包 :toolchain.tar.gz 编译器版本:gcc version 4.3.3 (Sourcery G++ Lite 2009q1- ...
- Python杨辉三角形
RT Show me the Code def triangles(): b = [1] while(True): yield b b = [1] + [b[i] + b[i+1] for i in ...
- 【集美大学1411_助教博客】团队作业4——第一次项目冲刺(Alpha版本) 成绩
写在前面的话 第一次alpha冲刺,大家完成得都很好,从博客中体现出来的是所有团队都完成了预期的目标. 一个团队从最初建立,到磨合,到做出一个能被接受的产品,真是一件不容易的事情.就好像TheNexu ...
- 201521123073 《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: ...
- 201521123031《Java程序设计》 第2周学习总结
1. 本周学习总结 (1)能够更加熟练地使用码云 (2)学习了Arrys和String的用法和一些运用 (3)懂得如何查询函数的源代码,通过查看源代码,能够更深入的了解函数适用情况以及利弊 2. 书面 ...
- 万物皆对象的JavaScript
写在前面: 经过前段时间对于H5语言的学习,开始慢慢适应现在的生活节奏和代码语言.从一开始的毫无头绪到现在可以大概地写出部分的网站静态页面,用了两个周的时间.作为一个之前从未接触过计算机语言的初学者来 ...