- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个按钮和多个基于彼此值更新的 slider 。由于每个按钮和一组 slider 都高度相关,我尝试调用一个方法来更新该组,因此我为 GenerateItem
调用一个 Update 方法,而不是在每个对象上调用 Update 并使它们分别引用其他。
为什么我会收到上面的错误,解决这个问题的“Unity”方法是什么?我的程序可能会有很多这样的 slider 和按钮,所以我不想全部手动编写代码。
GenerateItem must be instantiated using the ScriptableObject.CreateInstance method instead of new GenerateItem
void Start () {
Button a = ((GameObject)Instantiate(prefabButton)).GetComponent<Button>();
Slider b = ((GameObject)Instantiate(prefabCreationSlider)).GetComponent<Slider>();
Slider c = ((GameObject)Instantiate(prefabCapacitySlider)).GetComponent<Slider>();
Text d = ((GameObject)Instantiate(prefabText)).GetComponent<Text>();
items.Add(new GenerateItem("OxyGen", 0.5f, 50f,a,c,b,d));
}
// Update is called once per frame
void Update () {
items.ForEach(a => a.BtnUpdate());
}
我试过:
GenerateItem o= ScriptableObject.CreateInstance(GenerateItem);
但不知道如何设置对象的属性。
最佳答案
我没有看到 ScriptableObjects 的代码。
但是你要么必须使用 CreateInstance(Type)
返回 ScriptableObject
并将创建的实例转换为您的类型:
GenerateItem o = (GenerateItem) ScriptableObject.CreateInstance(typeof(GenerateItem));
或者简单地使用键入的版本 ScriptableObject.CreateInstance<Type>()
返回 Type
因此不需要类型转换(我更喜欢这个)
GenerateItem o = ScriptableObject.CreateInstace<GenerateItem>();
你可以像往常一样设置属性
o.<some property> = <some value>;
请注意,对于此解决方案,类(class)的属性/字段必须是公开的。
或者有某种
public void SetValues(string name, float value1, float value2, Button button, Slider slider1, Slider slider2, Text text)
{
// Apply values
<some property> = <some value>
/* ... */
}
ScriptableObjects 内部的方法,因此您可以简单地调用
o.SetValues("OxyGen", 0.5f, 50f, a, c, b, d);
另一种选择(我个人最喜欢这个)——工厂模式
只允许在实例化时设置值并防止它们在以后直接更改。在GenerationItem
中有一个方法完全负责实例化和设置值
public static GenerateItem CreateInstance(string name, float value1, float value2, Button button, Slider slider1, Slider slider2, Text text)
{
// Let the method itself take care of the Instantiated
// You don't need "ScriptableObject." since this class inherits from it
GenerateItem o = CreateInstance<GenerateItem>();
// Then directly set the values
o.<some property> = <some value>;
/* .... */
return o;
}
所以稍后在你的课上你只需要打电话
var o = GenerateItem.CreateInstance("OxyGen", 0.5f, 50f, a, c, b, d);
这可以确保以后不会轻易更改值。取决于您的需求。
关于unity3d - 使用 ScriptableObject.CreateInstance 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52377827/
在撰写本文时,Unity 有一个名为 Unity LTS 2017.4.12f1 的版本,Unity 的最新版本是 2018.2.11 我知道 Unity LTS 应该是稳定版本,但这是否意味着 Un
我需要 Unity 来捕获所有按键,即使 Unity 没有焦点。 我尝试过使用: Input.KeyPress() 但这似乎只有在 Unity 拥有用户输入焦点的情况下才有效。我需要它在没有焦点时工作
我正在尝试统一实现一个TCP服务器。我正在使用 unity pro 3.5,当我在场景中运行此代码时,unity 挂起,完全没有响应,直到我用任务管理器杀死它。 using UnityEngine;
我想问一下,使用新的unity ads 2.0与unity ads相比,收入有什么区别 Unity Ads Unity Ads 2.0 最佳答案 Unity 广告支持 Unity 4.2.2 或更高版
当我运行我的应用程序时,我希望 Unity 打开两个窗口。 window 将有不同的摄像头,但两者都会看到同一个世界。 这样的事情可能吗? (我还没有找到任何证据表明这一点) 我知道我可以通过两个 U
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我今天已将我的项目升级到 Prism 6.3.0 和 Unity 5.3.1。在此之前,我有 Prism 5 和 Unity 4。 现在我遇到了 Prism.Unity.UnityBootstrapp
Unity 中是否有与 StructureMap 中的 Registry 类等效的内容? 我喜欢考虑一个层/组件/库来自行配置它 - 从而填充容器。所以“父”层只需要知道注册类。 最佳答案 不,没有。
我似乎无法在任何地方找到 Microsoft.Practices.Unity.StaticFactory.dll。 还有其他注册静态工厂的方法吗? 寻找这样的东西 container.Register
是否可以统一尝试所有已定义的构造函数,从参数最多的构造函数到最不具体的构造函数(默认构造函数)? 编辑 我的意思是说: foreach (var constructor in concrete.Get
我有一个正在运行且运行良好的 Unity 应用程序,但我们目前正在通过对所有编译警告采取行动来清理我们的代码。 由于过时的 Microsoft.Practices.Unity.Configuratio
我正在使用 Visual Studio Code 在 Unity 中编写脚本。在“编辑”-“首选项”-“外部工具”-“外部脚本编辑器”下,我也选择了 VS Code。 打开脚本工作正常,但是当我尝试通
因此,我很确定这不是提出此类问题的正确论坛,因此我非常感谢有人将我链接到针对此问题的更好论坛(如果需要)。 我的问题: 在 Unity Hub 中,我进行了设置,以便 Unity 编辑器应下载到我的硬
问题:即使在 Cardboard 相机范围内,我也无法在任何地方看到我的 UI 文本。 截图: 我使用的是Unity 5.4.0b21版本,有人说可以通过降级到Unity 5.3版本来修复。 但是,我
我正在开发一个 Unity 项目,我正在使用 Google VR SDK for Unity 和 FirebaseMessaging.unitypackage 适用于 Unity 的 Firebase
好吧,在谷歌、这里和几个 ASP/MVC 论坛上搜索之后,我一定要问我到底做错了什么。 我的应用程序有一个良好的开端,对 DI、IoC 有很好的理解,并且正在使用 Repository、Service
我们最近将项目中的 Microsoft Unity 从 3.5.1404 版本升级到 5.8.6。在我们的代码中只做了一些小的调整,这次升级似乎很容易。它毫无问题地解决了我们所有注册的实例。但是,我们
我正在弄清楚使用 Unity 应用程序 block 时的意外行为。我有项目 A 作为我的启动项目。 项目 A 具有对项目 B 的项目引用,而项目 B 具有对项目 C 的项目引用。 项目 A 使用 un
我将 Unity 与 MVC 和 NHibernate 结合使用。不幸的是,我们的 UnitOfWork 驻留在不同的 .dll 中,并且它没有默认的空 .ctor。这是我注册 NHibernate
我是一名优秀的程序员,十分优秀!