UnityNativeScripting
UnityNativeScripting copied to clipboard
problem with calling typed method with arguments
Hello,
Generate bindings breaks when trying to generate the binding for a "method<
{
"Name": "UnityEngine.Object",
"Methods": [
{
"Name": "Instantiate",
"ParamTypes": [
"UnityEngine.Object"
],
"GenericParams": [
{
"Types": [
"UnityEngine.Component"
]
},
{
"Types": [
"UnityEngine.GameObject"
]
},
{
"Types": [
"UnityEngine.MeshRenderer"
]
},
{
"Types": [
"UnityEngine.ParticleSystem"
]
},
{
"Types": [
"UnityEngine.Light"
]
},
{
"Types": [
"UnityEngine.AudioSource"
]
},
{
"Types": [
"UnityEngine.TextMesh"
]
}
]
}
]
}
it doesnt find a matching method . the c# method is public static T Instantiate<<T>>(T original) where T : Object; , on the UnityEngine.Object type;
Thank you for helping ,
Regards,
Merlin
It looks like the code generator isn't finding the method because it's generic so it's types are T
instead of Object
. I'd happily accept a PR with a fix.
simple workaround : Set ParamTypes to ["UnityEngine.T"], however UnityEngine.T does not seem appropriate.
I found a new problem with Instantiate. ex)
GameObject a = GameObject::CreatePrimitive(PrimitiveType::Sphere);
a.AddComponent<MyGame::BaseBallScript>();
GameObject b = UnityEngine::Object::Instantiate<UnityEngine::GameObject>(a);
b instantiated with a BaseBallScript, but b's BaseBallScript.transform.GetInstanceID() will be return a's InstanceID. a will move 2x faster, b doesn't move.
root cause : a's CppHandle value also copied to b's when using Instantiate method. It's ok while calling base constructor, but between base constructor to Awake, CppHandle value overwritten to original's.