我一直在使用Unity中的保存和加载,我将序列化的类保存到文件中.我有一个Serializable类:
[Serializable]
class Save
{
public List<int> ID = new List<int>();
public List<int> Amounts = new List<int>();
}
Run Code Online (Sandbox Code Playgroud)
并将其保存到文件A-OK.我可以加载它没有错误,但如果我想稍后添加:
[Serializable]
class Save
{
public List<int> ID = new List<int>();
public List<int> Amounts = new List<int>();
public int extra = 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行我的脚本它给了我一个反序列化错误,我完全理解,当我将反序列化文件转换为我的新类'保存'时,我添加的新变量不存在,它给了我错误.
我在商店中修复资产时发现了这个错误,我知道一个修复可以只是更改文件名,因此创建了一个新文件,但我不想只删除之前保存的内容.
所以我的问题是,如果我想在我的序列化类中添加更多变量,如果人们要更新资产,我将如何捕获并调整旧版本的变量?
谢谢!
背景信息:
我一直试图检测Apple耳机上的按钮点击.耳机连接到运行Windows的MacBook Pro.它不是虚拟机.它正在运行Windows通常带有Apple的完整Windows驱动程序通过Boot Camp.
耳机是标准的Apple耳机,由三个按钮组成:音量增大,音量减小,中间按钮和麦克风.
当我使用Mac Os时,如果在耳机上按下音量增大按钮,Mac Os会将其音量增加一.当按下耳机上的voulume按钮时,它也会降低音量.
标准耳/耳机使用三个导电针接收(仅限L/R扬声器)信号,而苹果版使用四个导电针接收(L/R扬声器)和发送(按钮)信号.这款耳机是为iPhone制造的,但是当它在Mac Os上运行时我很惊讶.
这让我相信MacBook Pro硬件是为支持这四个导电针耳机而设计的.它适用于Mac Os但不适用于Windows.我的目标是开发一款小巧的软件,让苹果耳机能够在Apple硬件上运行的Windows上运行.
我知道如何使用C++和Win32 API增加Windows音量,但我仍然坚持我实际上必须从耳机中检测按钮点击的部分.
题:
1)我可以通过哪些方式检测耳机的输入(按键点击)?
看起来这个人能够阅读它.他只是在Mac OS Osct Detect硬件耳机上运行时才这样做
2)如果我编译代码,这个人在Mac OS上作为DLL文件工作,然后在运行Windows时调用该函数,它会工作吗?
3)我是否需要制作自己的驱动程序才能使其正常工作?
4)以下代码来自我上面发布的链接.什么是Windows API函数,类对于下面的下面的Mac Os代码是否相同?
id array = [[DDHidDevice allDevices] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"productName == \"Apple Mikey HID Driver\""]];
DDHidDevice *mic = [array count] ? [array objectAtIndex:0] : nil;
// it isn't a keyboard
NSLog(@"%@", mic.primaryUsage);
assert(mic.usage==1 && mic.usagePage==12);
Run Code Online (Sandbox Code Playgroud)
我试过的事:
1)我尝试使用GetLastInputInfo()与 …
我正在使用Unity创建一个HoloLens应用程序,它必须从REST API获取数据并显示它.我目前正在使用WWW数据类型来获取将从Update()函数调用的协程中的数据和yield return语句.当我尝试运行代码时,我从API获取最新数据,但当有人将任何新数据推送到API时,它不会实时自动获取最新数据,我必须重新启动应用程序以查看最新数据.我的代码:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
public class TextChange : MonoBehaviour {
// Use this for initialization
WWW get;
public static string getreq;
Text text;
bool continueRequest = false;
void Start()
{
StartCoroutine(WaitForRequest());
text = GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
}
private IEnumerator WaitForRequest()
{
if (continueRequest)
yield break;
continueRequest = true;
float requestFrequencyInSec = 5f; //Update after every 5 …Run Code Online (Sandbox Code Playgroud) 我想从检查员点击按钮发送多个参数?
Unity不允许这样做,我怎样才能做到这一点?还有其他方法吗?有几十个按钮,我使用相同的方法为所有按钮,但发送不同的参数,现在我需要发送多种类型的参数.想不通怎么样?
我正在开发一款基于位置的游戏,有点像口袋妖怪游戏。我正在阅读Android手机上的位置,没有任何问题,但是在统一编辑器中进行开发时,我无法获取任何位置数据,因为Input.location.isEnabledByUser在编辑器中为false
可以模拟/硬编码位置,这样我就可以在不部署到手机的情况下进行尝试了。
我试图这样硬编码:
LocationInfo ReadLocation(){
#if UNITY_EDITOR
var location = new LocationInfo();
location.latitude = 59.000f;
location.longitude = 18.000f;
location.altitude= 0.0f;
location.horizontalAccuracy = 5.0f;
location.verticalAccuracy = 5.0f;
return location;
#elif
return Input.location.lastData;
#endif
}
Run Code Online (Sandbox Code Playgroud)
但是该位置的所有属性都是只读的,因此出现编译错误。是否可以在编辑器中启用位置服务或对位置进行硬编码?
你怎么能在一个非Monobehaviour阶级的实例中传递Monobehaviour?我找到了这个链接,TonyLi提到你可以通过一个Monobehaviour来启动和停止一个类的实例中的协同程序,但他没有说明你怎么能这样做.他做了这个theEvent.StartEvent(myMonoBehaviour); 但是他并没有表明他从哪里获得了我的神经行为.我在互联网上环顾四周,但我似乎无法找到.
这是我想要做的.我想在一个类的实例中运行一个协同程序.我还希望能够在类的实例中停止协程.我想这样做,以便我的场景中没有任何具有大型管理器的对象,并且我可以将代码重用于我想以这种方式打乒乓的任何对象.代码在一个方向上移动一个Gameobject然后休息一下并将其向另一个方向移动并再次休息等等.但我不能从课外开始协同程序.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent (typeof(Image))]
public class SpecialBar : MonoBehaviour {
public float rangeX;
public float breakTime;
public float step;
float startProgress = 0.5f;
PingPongGameObject pingPonger;
Color[] teamColors = new Color[]{new Color(255,136,0),new Color(0,170,255)};
void Start()
{
for(int i = 0; i < teamColors.Length; ++i)
{
teamColors[i] = StaticFunctions.NormalizeColor (teamColors[i]);
}
pingPonger = new PingPongGameObject (gameObject.transform.position,
new Vector3(rangeX,0.0f,0.0f),
gameObject,
startProgress,
breakTime,
step
);
}
}
Run Code Online (Sandbox Code Playgroud)
第二堂课是我的协程所在的地方.
public class PingPongGameObject
{
float step; …Run Code Online (Sandbox Code Playgroud) 我最近遇到了UI问题.我打开了一个新的2D项目并使用带有Image组件的GameObject创建了一个画布.然后我通过右键单击添加了一个精灵Assets > Create > Sprites > Circle.这为我的Assets文件夹添加了一个圆形精灵.
圆形精灵被导入为纹理类型的精灵.
其他形状也会出现此问题,例如三角形.
我正在使用Unity 5.6.0b9 Personal.构建目标是PC,Mac,Linux Standalone.
我可能错过了很简单的事情.任何帮助表示赞赏!
Unity中包含大约7个精灵,用于创建UI.我想通过代码访问这些.这些包括UISprite,UIMask,Knob,Background和下面的截图中圈出的其他内容.
我深入挖掘了UI源代码,发现在MenuOptions.cs脚本中声明了所有位置.
private const string kStandardSpritePath = "UI/Skin/UISprite.psd";
private const string kBackgroundSpritePath = "UI/Skin/Background.psd";
private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd";
private const string kKnobPath = "UI/Skin/Knob.psd";
private const string kCheckmarkPath = "UI/Skin/Checkmark.psd";
private const string kDropdownArrowPath = "UI/Skin/DropdownArrow.psd";
private const string kMaskPath = "UI/Skin/UIMask.psd";
Run Code Online (Sandbox Code Playgroud)
在编辑器中,我能够使用GetBuiltinExtraResource函数检索它们:
Sprite img = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/InputFieldBackground.psd");
Debug.Log(img); //NOT NULL
Run Code Online (Sandbox Code Playgroud)
不幸的是,AssetDatabase.GetBuiltinExtraResource它来自UnityEditor命名空间,不能在构建或独立程序中工作.它甚至无法编译.
我试图Resources.GetBuiltinResource用于构建和独立但它总是返回null.它找不到内置的精灵.
UnityEngine.Object img = Resources.GetBuiltinResource(typeof(UnityEngine.Object), "UI/Skin/InputFieldBackground.psd");
Debug.Log(img); NULL
Run Code Online (Sandbox Code Playgroud)
尝试typeof(Sprite)而不是typeof(UnityEngine.Object)但也失败了.
如何在独立构建而不是编辑器中访问这些内置精灵?
注意:
我不想使用预制件或公共变量来执行此操作,这需要先手动执行操作.这是我目前正在做的这种方式.我只想访问已经打包在构建中的内置sprite.
因为我想将 Firebase 添加到我的 Android 游戏中,所以我想包含 Google Auth。但我有以下问题。我需要向 build.gradle 文件添加一些代码,但在我的 Unity 项目中找不到它。
这是我从 Firebase 找到的手册:https ://firebase.google.com/docs/auth/android/google-signin
我在所有驱动器上搜索了 build.gradle,但一无所获。你能告诉我在哪里找到它,或者我必须做什么才能从链接中实现代码?
简短问题:
.controler, .anim, .assetUnity项目中文件类型的用途是什么.
重要说明: 此问题的目的是通过它的文件类型调查Unity3d项目结构.
我不是在问如何为git准备我的项目.我对它们的扩展名的文件的目的和行为感兴趣,在摘要#1中查找文档.
简介如何出现此问题:
我正在使用unity3d,当我运行git status后同步时,我得到了一长串修改/删除的文件,我没有触及.这些文件有下一个扩展:*.meta, *.controller, *.anim, *.assets
经过长时间的谷歌搜索与不同的请求后,我发现足够好的信息只会在文件中*.meta丢失或重复时可能发生的文件和冲突.但其他文件扩展名在谷歌的回复中没有得到很好的体现.我只能通过扩展来猜测这些文件的作用,但我更喜欢它.guid*.meta
摘要:
您能否帮我找到有关Unity3d项目中具有下一个文件扩展名的文件的用途,结构和行为的信息.
1)*.metaUnity3d中的文件是什么?
回答#1: 此文件类型包含有关无法存储在资产内的资产的数据.每个资产都有自己的*.meta文件.
https://blog.forrestthewoods.com/managing-meta-files-in-unity-713166ee3d30
2)什么是.*.controllerUnity3d中的文件?
3)*.animUnity3d中的文件是什么?
4)*.assetUnit3d中的文件是什么?