jacksondunstan / UnityNativeScripting

Unity Scripting in C++
https://jacksondunstan.com/articles/3938
MIT License
1.33k stars 135 forks source link

Property bug? #25

Closed sonygod closed 5 years ago

sonygod commented 5 years ago

Property bug?

{
            "Name": "UnityEngine.GameObject",
            "Constructors": [
            ],
            "Methods": [
                {
                    "Name": "AddComponent",
                    "ParamTypes": [],
                    "GenericParams": [
                        {
                            "Types": [
                                "MyGame.BaseBallScript"
                            ]
                        }
                    ]
                },
                {
                    "Name": "CreatePrimitive",
                    "ParamTypes": [
                        "UnityEngine.PrimitiveType"
                    ]
                }
            ],
            "Properties":[
                {
                   "Name":"tag",
                   "Set":{},
                   "Get":{}
                }
            ]

        },

add property tag to gameobject ,build and run ,throw error

NullReferenceException: Object reference not set to an instance of an object
NativeScript.Bindings.UnityEngineMonoBehaviourPropertyGetTransform (Int32 thisHandle) (at Assets/NativeScript/Bindings.cs:1403)

how to fixed?

sonygod commented 5 years ago

@jacksondunstan my unity version between 5.6 and 20.18.1 and vs2017 win64

it's seem no matter about the properties name ,but When I change json ,it's alway run error.

sonygod commented 5 years ago

it's seem you cod is not automatic create warp from Json?

you have to write some bingding code in binding.cs?

like here ?

/*BEGIN DELEGATE TYPES*/ delegate void ReleaseSystemDecimalDelegateType(int handle); delegate int SystemDecimalConstructorSystemDoubleDelegateType(double value); delegate int SystemDecimalConstructorSystemUInt64DelegateType(ulong value); delegate int BoxDecimalDelegateType(int valHandle); delegate int UnboxDecimalDelegateType(int valHandle); delegate UnityEngine.Vector3 UnityEngineVector3ConstructorSystemSingle_SystemSingle_SystemSingleDelegateType(float x, float y, float z); delegate UnityEngine.Vector3 UnityEngineVector3Methodop_AdditionUnityEngineVector3_UnityEngineVector3DelegateType(ref UnityEngine.Vector3 a, ref UnityEngine.Vector3 b); delegate int BoxVector3DelegateType(ref UnityEngine.Vector3 val); delegate UnityEngine.Vector3 UnboxVector3DelegateType(int valHandle); delegate int UnityEngineObjectPropertyGetNameDelegateType(int thisHandle); delegate void UnityEngineObjectPropertySetNameDelegateType(int thisHandle, int valueHandle); delegate int UnityEngineComponentPropertyGetTransformDelegateType(int thisHandle); delegate UnityEngine.Vector3 UnityEngineTransformPropertyGetPositionDelegateType(int thisHandle); delegate void UnityEngineTransformPropertySetPositionDelegateType(int thisHandle, ref UnityEngine.Vector3 value); delegate int SystemCollectionsIEnumeratorPropertyGetCurrentDelegateType(int thisHandle); delegate bool SystemCollectionsIEnumeratorMethodMoveNextDelegateType(int thisHandle); delegate int UnityEngineGameObjectMethodAddComponentMyGameBaseBallScriptDelegateType(int thisHandle); delegate int UnityEngineGameObjectMethodCreatePrimitiveUnityEnginePrimitiveTypeDelegateType(UnityEngine.PrimitiveType type); delegate void UnityEngineDebugMethodLogSystemObjectDelegateType(int messageHandle); delegate int UnityEngineMonoBehaviourPropertyGetTransformDelegateType(int thisHandle); delegate int SystemExceptionConstructorSystemStringDelegateType(int messageHandle); delegate int BoxPrimitiveTypeDelegateType(UnityEngine.PrimitiveType val); delegate UnityEngine.PrimitiveType UnboxPrimitiveTypeDelegateType(int valHandle); delegate float UnityEngineTimePropertyGetDeltaTimeDelegateType(); delegate void BaseBallScriptConstructorDelegateType(int cppHandle, ref int handle); delegate void ReleaseBaseBallScriptDelegateType(int handle); delegate int BoxBooleanDelegateType(bool val); delegate bool UnboxBooleanDelegateType(int valHandle); delegate int BoxSByteDelegateType(sbyte val); delegate sbyte UnboxSByteDelegateType(int valHandle); delegate int BoxByteDelegateType(byte val); delegate byte UnboxByteDelegateType(int valHandle); delegate int BoxInt16DelegateType(short val); delegate short UnboxInt16DelegateType(int valHandle); delegate int BoxUInt16DelegateType(ushort val); delegate ushort UnboxUInt16DelegateType(int valHandle); delegate int BoxInt32DelegateType(int val); delegate int UnboxInt32DelegateType(int valHandle); delegate int BoxUInt32DelegateType(uint val); delegate uint UnboxUInt32DelegateType(int valHandle); delegate int BoxInt64DelegateType(long val); delegate long UnboxInt64DelegateType(int valHandle); delegate int BoxUInt64DelegateType(ulong val); delegate ulong UnboxUInt64DelegateType(int valHandle); delegate int BoxCharDelegateType(char val); delegate char UnboxCharDelegateType(int valHandle); delegate int BoxSingleDelegateType(float val); delegate float UnboxSingleDelegateType(int valHandle); delegate int BoxDoubleDelegateType(double val); delegate double UnboxDoubleDelegateType(int valHandle); /*END DELEGATE TYPES*/

sonygod commented 5 years ago

I found there is an bug in GenerateBindings.cs ,

you forget return result finally ,and allso you can't find index like \n /t/t in windows system.

` static string InjectIntoString( string contents, string beginMarker, string endMarker, string text) {

        var len = contents.Length;
        for (int startIndex = 0; ;)
        {
            int beginIndex = contents.IndexOf(beginMarker, startIndex);
            if (beginIndex < 0)
            {
                Debug.LogError("can't find "+ beginMarker);
                return contents;
            }
            int afterBeginIndex = beginIndex + beginMarker.Length;
            int endIndex = contents.IndexOf(endMarker, afterBeginIndex);
            if (endIndex < 0)
            {
                throw new Exception(
                    string.Format(
                        "No end ({0}) for begin ({1}) at {2} after {3}",
                        endMarker,
                        beginMarker,
                        beginIndex,
                        startIndex));
            }
            string begin = contents.Substring(0, afterBeginIndex);
            string end = contents.Substring(endIndex);
            contents = begin + text + end;
            startIndex = beginIndex + 1;
            Debug.LogWarning("ok,return"+beginMarker+ (contents.Length==len));
            return contents;
        }
    }`