UnityNativeScripting icon indicating copy to clipboard operation
UnityNativeScripting copied to clipboard

problem with calling typed method with arguments

Open merlin1277 opened this issue 4 years ago • 2 comments

Hello,

Generate bindings breaks when trying to generate the binding for a "method<>(args)", it works well with "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

merlin1277 avatar Mar 06 '20 12:03 merlin1277

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.

jacksondunstan avatar Mar 28 '20 17:03 jacksondunstan

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.

majorika avatar Feb 13 '21 17:02 majorika