public class UVBaseTool : ScriptableObject, IPropertiesChanged
{
private BaseToolProperties properties_;
private ScriptableObject propertiesNoValidate_;
// Some code ...
protected void SetProperties(System.Type propertiesType, System.Type properties1Type)
{
properties_ = propertiesType == null ? null : CreateInstance(propertiesType) as BaseToolProperties;
if (properties_ != null)
{
properties_.tool = (this);
}
propertiesNoValidate_ = properties1Type == null ? null : CreateInstance(properties1Type);
}
public T Properties<T>()
{
return properties_;
}
public T PropertiesNoValidate<T>()
{
return propertiesNoValidate_;
}
}
Может ли кто-нибудь помочь мне с этим, так как я не могу устранить эти ошибки:
- Активы / Rocket / Archi / Скрипты / Редактор / UVEditor / UVBaseTool.cs (219, 14): ошибка CS0029: невозможно неявное преобразование типа
Rocket.Archi.BaseToolProperties' to
T ' - Активы / Rocket / Archi / Scripts / Editor / UVEditor / UVBaseTool.cs (224,14): ошибка CS0029: невозможно неявное преобразование типа
UnityEngine.ScriptableObject' to
T '
Я попытался просмотреть онлайн-контекст для CS0029, но все же не могу конвертировать через IConvertable.Пожалуйста, дайте мне знать, если есть решение.
Вот как я звоню
[SerializeField]
private BaseToolProperties properties_;
[SerializeField]
private ScriptableObject propertiesNoValidate_;
public virtual void Start()
{
EditorUtil.HideGlobalGizmo();
ArchiEx.selectedElements.ClearVertexBoxes();
ArchiEx.currentCamera = (Camera) null;
GizmoHandler.Destroy();
if (properties_ != null)
EditorUtil.LoadObject(properties_, null);
if (propertiesNoValidate_ != null)
EditorUtil.LoadObject(propertiesNoValidate_, null);
Ruler.Add(this, RulerType.Local);
ArchiSettings.GatherArchi();
}
И это baseTool;
using System;
using UnityEngine;
namespace Rocket.Archi
{
[Serializable]
public class BaseToolProperties : ScriptableObject
{
[NonSerialized]
public IPropertiesChanged tool;
public virtual void OnValidate()
{
if (tool == null)
return;
tool.OnPropertiesChanged();
}
}
}
Прикрепленное изображение показывает, как я вызываю свойства в других классах и, поверьте мне, в этой части нет ошибки, я проверял весь контекст снова и снова, но эта универсальная функция убивает меня.
ошибка уходит, если я напишу это так, но теперь я получаю еще одну ошибку, которая предназначена для IConvertableВсякий раз, когда я пытаюсь сделать объект в виде сцены, я получаю эту повторяющуюся ошибку.См. Ниже;
public T Properties<T>()
{
return (T)Convert.ChangeType(properties_, typeof(T));
}
public T PropertiesNoValidate<T>()
{
return (T)Convert.ChangeType(propertiesNoValidate_, typeof(T));
}
InvalidCastException: объект должен реализовывать IConvertible.System.Convert.ChangeType (значение System.Object, преобразование System.Type, провайдер System.IFormatProvider) (в: 0) System.Convert.ChangeType (значение System.Object, преобразование System.Type) (в: 0) RocketMod.Archi.BaseTool.Properties [T] () (в разделе Активы / Ракета - Инструменты моделирования / Archi / Сценарии / Редактор / BaseTool.cs: 224) RocketMod.Archi.PropertiesGUI.HasContents () (в Активы / Ракета - Инструменты моделирования / Archi /Скрипты / Редактор / PropertiesGUI.cs: 54) RocketMod.Archi.PropertiesGUI.OnGUI () (в разделе Активы / Rocket - Инструменты моделирования / Archi / Скрипты / Редактор / PropertiesGUI.cs: 17) RocketMod.Archi.ToolSelectionGUI.OnGUI () (в Assets / Rocket - Инструменты моделирования / Archi / Сценарии / Редактор / ToolSelectionGUI.cs: 164) RocketMod.Archi.ArchiEditor.OnInspectorGUI () (в Assets / Rocket - Инструменты моделирования / Archi / Скрипты / Редактор / ArchiEditor.cs: 299)UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor [] редакторы, System.Int32 editorIndex, System.Boolean rebuildOptimizedGUIBlock, System.Boolean & showImportedObjectBarNext, UnityEngine.Rect&ortedObjectBarRect) (в C: /buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs: 1253) UnityEngine.GUIUtility: ProcessEvent (Int32, IntPtr)
, если для решения этой проблемы, напишите, как показано нижевсе перестает работать;
public T Properties<T>() where T : IConvertible
{
return (T)Convert.ChangeType(properties_, typeof(T));
}
public T PropertiesNoValidate<T>() where T : IConvertible
{
return (T)Convert.ChangeType(propertiesNoValidate_, typeof(T));
}
ЛЮБАЯ ПОМОЩЬ БЫЛА МНОГО ЦЕННЫХ ПАРНИ !!!