- Home /
Error CS0425: Works in DLL but not in Unity
I was having trouble implementing a way to cache components attached to GameObjects. When I try to call the cache function anywhere, Unity shows me this error:
Assets/Nucleum/NucleumBehaviour.cs(12,22):
error CS0425: The constraints for type parameter 'T' of method 'Nucleum.NucleumBehaviour.GetComponent()'
must match the constraints for type parameter 'T' of interface method 'UnityEngine.Component.GetComponent()'.
Consider using an explicit interface implementation instead
I'm trying to hide the original functions of MonoBehavoiour and replace them with my own ones, but the error from above occurs. The code I try to use is this one:
public class NucleumBehaviour : MonoBehaviour {
/// <summary>
/// Nucleum (for confidence)
/// </summary>
new public T GetComponent<T>() where T : class { return this.NGetComponent<T>(); }
}
The code which gets executed above redirects here:
public static T NGetComponent(this MonoBehaviour mb) where T : class {
return mb.gameObject.NGetComponent<T>();
}
Which redirects here:
public static T NGetComponent(this GameObject go) where T : class {
//Do we have a cache?
EnsureCache();
// First we need to check if the game object is already cached
if (componentCache.ContainsKey(go)) {
// The component has not been tried yet, do it!
// This is one internal call by unity, using GetComponent on a game object.
if (!componentCache[go].Tried<T>()) {
object component = go.GetComponent<T>();
return componentCache[go].Add<T>(ref component);
}
return componentCache[go].Get<T>();
}
// No cached values for this game object.
// create a new cache for it.
else {
// Instantiate a new OC and add the component to it.
ObjectCache oc = new ObjectCache();
object component = go.GetComponent<T>();
oc.Add<T>(ref component);
componentCache.Add(go, oc);
return component as T;
}
}
As far as I can tell Unity complains about something about the where T : class section here. Strangely enough all of this works if I put all of this inside a DLL and use it as plugin, but I realy want to get it to work in Unity as well.
Am I missing something here or is it Unity's fault?
Thanks in advance!
Comment