1.UWP类使用
在Unity中双击脚本打开VS,项目中并没有UWP的程序集,无法使用UWP的类。
同时无论是NoTookit还是NoTookit.Editor都是无法添加引用的
生成后的项目中就有了
可以添加引用了
多了一些Window的引用,可以使用UWP的类了。不过因为修改的是同一个脚本文件,要加上
#if UNITY_UWP
//UWP类
#endif
不然,回到Unity中会报错,找不到这些类的。
也就是说Hololens的Unity开发,可能需要分成两部分,一部分是在Unity环境中的,一部分是在Hololens环境中的。
2.添加类库(UWP)
在UWP解决方案中添加一个UWP类库
namespace ClassLibrary1
{
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return string.Format("Id:{0},Name:{1}", Id, Name);
}
}
}
将生成中的路径改成 Unity项目下的Asset/Plugins/里面,生成。
似乎Editor只能用3.5以下的dll,以前一般添加的c#类库都是3.5,总之Unity环境下脚本中无法使用该dll。
再生成一下,
Assembly-CSharp的引用中就多了ClassLibrary1。
就可以在脚本中使用ClassLibrary1了
不过回到Unity环境下,就不能用了。
用前面的#if UNITY_UWP区分开两种环境就相互没有影响了。
原本以为可以通过修改类库的.net版本也行,结果类库项目的属性本身没有修改到3.5的地方。
将类库删除重新创建一个3.5的类库,也是一样不行。
想到一个方案,创建两个项目,1个是刚刚的UWP类库,一个是传统的c#的类库(3.5的),生成在plugins中的不同子文件夹下,这样在两个环节中就都有ClassLibrary1了。
结果
但是生成项目时出问题了
看来是重名冲突了。
如何让这两个dll不冲突呢?
不能放到Edtor文件夹中,直接在脚本中找不到dll了。
改名吧(直接修改dll名称)
可以生成了,但是
应该是标识重复了导致的,修改类库项目名称吧。其实类库名称不用改,改生成的程序集名称就好了。两个类库项目的程序集名称都改掉,生成dll。
生成hololens项目,不行,类重复了。
刚刚只是改dll名称的时候能够生成的啊。难道是刚刚实际上只读取了一个dll,或者说相同标识的,一个无效或者后面覆盖前面的之类的。
有个办法,我之所以搞这些主要是不想在业务逻辑代码中(这里是脚本文件中)到处是#if UNITY_UWP。那样的话在两个类库自身中添加#if就好了。一个添加#if UNITY_UWP 一个添加 #if !UNITY_UWP,生成。还是一样,弄错了,#if是预编译头,仅仅是控制代码在当前环境下会不会编译,结果两个类库在自己的环境下都是有效的,还是都编译到dll中。
最终还是只能将类放到unity中,
这样在脚本中和在UWP中都没问题了。
我搞这些还想以dll为单位复用以前的代码,用这种方式的话需要把需要的类文件拷贝到unity项目中了。
算了,先这样吧。
3.路径信息
脚本
using System;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_UWP
using Windows.Storage;
#endif
public class BasicInfo : MonoBehaviour {
public Text text;
// Use this for initialization
void Start () {
string info = string.Format(" dataPath:{0}\n persistentDataPath:{1}\n streamingAssetsPath:{2}\n temporaryCachePath:{3}\n", Application.dataPath, Application.persistentDataPath,Application.streamingAssetsPath,Application.temporaryCachePath);
Debug.Log(info);
text.text = info;
#if UNITY_UWP
string info2 = string.Format("BaseDirectory:{0}\nLocalFolder:{1}\nRoamingFolder:{2}\nTemporaryFolder:{3}\nLocalCacheFolder:{4}\nSharedLocalFolder:{5}", AppContext.BaseDirectory, ApplicationData.Current.LocalFolder.GetPath(), ApplicationData.Current.RoamingFolder.GetPath(), ApplicationData.Current.TemporaryFolder.GetPath(), ApplicationData.Current.LocalCacheFolder.GetPath(), ApplicationData.Current.SharedLocalFolder.GetPath());
text.text += "\n"+info2;
#endif
}
}
#if UNITY_UWP
public static class Extension
{
public static string GetPath(this StorageFolder folder)
{
if (folder == null)
{
return "null";
}
return folder.Path;
}
}
#endif
PC运行:
dataPath:D:/SoftwareProjects/Hololens/UnityProjects/NoToolkit/NoToolkit/Assets
persistentDataPath:C:/Users/caiwanwei/AppData/LocalLow/DefaultCompany/NoToolkit
streamingAssetsPath:D:/SoftwareProjects/Hololens/UnityProjects/NoToolkit/NoToolkit/Assets/StreamingAssets
temporaryCachePath:C:/Users/CAIWAN~1/AppData/Local/Temp/DefaultCompany/NoToolkit
Hololens运行:
dataPath:C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data
persistentDataPath:C:/Data/Users/llhsw/AppData/Local/Packages/NoToolkit_pzq3xp76mxafg/LocalState
streamingAssetsPath:C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data/StreamingAssets
temporaryCachePath:C:/Data/Users/llhsw/AppData/Local/Packages/NoToolkit_pzq3xp76mxafg/TempState
BaseDirectory:C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\NoToolkitVS.Debug_x86.caiwanwei
LocalFolder:C:\Data\Users\llhsw\AppData\Local\Packages\NoToolkit_pzq3xp76mxafg\LocalState
RoamingFolder:C:\Data\Users\llhsw\AppData\Local\Packages\NoToolkit_pzq3xp76mxafg\RoamingState
TemporaryFolder:C:\Data\Users\llhsw\AppData\Local\Packages\NoToolkit_pzq3xp76mxafg\TempState
LocalCacheFolder:C:\Data\Users\llhsw\AppData\Local\Packages\NoToolkit_pzq3xp76mxafg\LocalCache
SharedLocalFolder:null
以前UWP中测试
ApplicationData
LocalFolder:C:\Users\caiwanwei\AppData\Local\Packages\9428c709-abf7-4e8f-9657-9cddf79fc61e_w7gt0ng89zrh4\LocalState
RoamingFolder:C:\Users\caiwanwei\AppData\Local\Packages\9428c709-abf7-4e8f-9657-9cddf79fc61e_w7gt0ng89zrh4\RoamingState
TemporaryFolder:C:\Users\caiwanwei\AppData\Local\Packages\9428c709-abf7-4e8f-9657-9cddf79fc61e_w7gt0ng89zrh4\TempState
LocalCacheFolder:C:\Users\caiwanwei\AppData\Local\Packages\9428c709-abf7-4e8f-9657-9cddf79fc61e_w7gt0ng89zrh4\LocalCache
persistentDataPath : LocalState => LocalFolder,LocalCacheFolder
temporaryCachePath:TempState => TemporaryFolder
3.Application.dataPath信息(子文件,子文件夹)
Directory:
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\Resources
Files:
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\globalgamemanagers
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\globalgamemanagers.assets
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\level0
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\level0.resS
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\managedAssemblies.txt
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\nativePlugins.txt
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\resources.assets
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\sharedassets0.assets
C:/Data/Users/DefaultAccount/AppData/Local/DevelopmentFiles/NoToolkitVS.Debug_x86.caiwanwei/Data\sharedassets0.assets.resS