NodeCanvas Forums › Support › Project crash when upgrading from U5.4.3 to U5.5.3
After moving to 5.5.3 and importing a unitypackage from mentioned prior rev, Unity crashes. I’ve tried all the way up to 5.6x(yeah, I’ve got some time on my hands). I did’t find anything helpful in their Forums. Even deleted Library contents and re-built. Further exploration , I removed all ParadoxNotion et al and no crash.
I remember some mention of a Project Updater for 2.6? Am I on the right track here. I couldn’t find a search function on this forum although I haven’t been back for a while(been off ‘Unreal’ing myself.
Cheers,
Gav
Hello,
I am sorry for the late reply due to summer vacation!
Just to clarify, are you trying to update an existing project FROM version 5.3.x or 5.4.x and TO 5.5.x+ , which already has work done with a NodeCanvas version prior to NC v2.6 ?
Does the Unity console reads any errors before or after (next restart) of the the crash?
What are the contents of the .unitypackage you are importing?
Let me know.
Thank you.
Join us on Discord: https://discord.gg/97q2Rjh
A summer vacation ? I am outraged! Seriously,I hope you enjoyed yourself thoroughly!
The Unity crash message was “..fatal error – the memorystream file is corrupt. Remove the file and restart Unity.”
As regards the crashes, we are okay on this end now as far we know. It took extremely methodical rebuild of the BTs and sub-trees. So, we had to recompose the characters NC component by component. Actually, once it got started it wasn’t that long to overcome it.
Essentially, it was flawless in 5.4.3. And then all hell broke loose in 5.5.3. It would only occur in the Play mode…immediately when entering Play mode and we discovered that breaking a prefab instance (rebuilding) was safe. If you even activated one of those devils(prefabs), trouble would occur. All prefabs were deleted from the projects. Eventually, we got to the “Project Rebuild” button. Nonetheless, the old prefabs were extremely dangerous.
Essentially, Unity sent the crash report to their internal GC.
On another note, been trying to modify FindAllWithTag action. we’re trying to have ‘searchTag’ accept a BB variable. VS warns that it can not convert a BBParameter<string> into a ‘string'(Unity). Does this have to be cast? Something similar occurs in GetOverlapSphereObjects. This one is bit trickier because we’re dealing with the bit shift operator. It can be accomplished and it works fine if use a private variable and supply it with a hard int vale in the action script, but, introducing an external variable for the Layer is not successful. It will bark about converting an int. Attached our version below.
Haha 🙂 Thanks a lot! I hope you had/have a great summer time as well!
I am glad to hear that you’ve managed to overcome the problem even though it took a bit of manual work. Just to confirm, was I correct to assume that you were using a NodeCanvas version before 2.6.2? Is everything works correctly now after upgrading?
Regarding changing FindAllWithTag to use a BBParameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
namespace NodeCanvas.Tasks.Actions{ [Category("GameObject")] [Description("Action will end in Failure if no objects are found")] public class FindAllWithTag : ActionTask{ [RequiredField] [TagField] public BBParameter<string> searchTag = "Untagged"; [BlackboardOnly] public BBParameter<List<GameObject>> saveAs; protected override string info{ get{return "GetObjects '" + searchTag + "' as " + saveAs;} } protected override void OnExecute(){ saveAs.value = GameObject.FindGameObjectsWithTag(searchTag.value).ToList(); EndAction(saveAs.value.Count != 0); } } } |
I think the same can be said for the GetOverlapSphereObjects. When a BBParameter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
namespace NodeCanvas.Tasks.Actions{ [Category("Physics")] [Description("Gets a lists of game objects that are in the physics overlap sphere at the position of the agent, excluding the agent")] public class GetOverlapSphereObjects : ActionTask<Transform> { public BBParameter<LayerMask> layerMask; public BBParameter<float> radius = 2; [BlackboardOnly] public BBParameter<List<GameObject>> saveObjectsAs; protected override void OnExecute(){ var hitColliders = Physics.OverlapSphere(agent.position, radius.value, layerMask.value); saveObjectsAs.value = hitColliders.Select(c => c.gameObject).ToList(); saveObjectsAs.value.Remove(agent.gameObject); if (saveObjectsAs.value.Count == 0){ EndAction(false); return; } EndAction(true); } public override void OnDrawGizmosSelected(){ if (agent != null){ Gizmos.color = new Color(1,1,1,0.2f); Gizmos.DrawSphere(agent.position, radius.value); } } } } |
If you want to default the LayerMask parameter to an integer value, you can do this:
public BBParameter<LayerMask> layerMask = new BBParameter<LayerMask>{ value = -1 };
Please let me know if that works for you. 🙂
Thanks!
Join us on Discord: https://discord.gg/97q2Rjh
Hey,
we were using an NC earlier than 2.6.2 when on Unity 5.4.3. I believe it was a 2.6.2 and 5.5.3 when trouble began. It seems that the NC Project Update button did not make its’ appearance until after the install or wasn’t readily accessible. Sorry I can’t be more precise but I was here to witness the event. Recovery was a step-by-step rebuild, project save and write of unitypackages. We are fine at this point, but, nagging question is where is the version stamped for NC or FC?
Thanks for the code advice. FindAllWithTag works exactly we need it – create an accessible variable, assign the value and have the Actions access it as necessary. We’re using it as a means of distinguishing the characters(i.e. the old good guys, bad guys scenario). So, an Instantiation or spawning script would create one or the other and know what tag or layer to identify the opponent.
Not surprisingly, the greater challenge is GetOverlapSphereObjects. That damn drop-down menu seems inescapable. What we would want is the same variable input to the Action as we can now do with FindAllWithTag. Don’t want to create and maintain several Prefabs for every character group.
Once again thanks again.
Below is an exception which Can’t be traced back to the “crashes” or any significant changes. Just some fixes to the BTs to match what we had earlier. The Editor pauses a few frames after after Play mode. It can be resumed without trouble as can be seen.
The exception message :
MissingMethodException: Method not found: ‘Default constructor not found…ctor() of Pathfinding.TriangleMeshNode’.
System.Activator.CreateInstance (System.Type type, Boolean nonPublic) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Activator.cs:368)
ParadoxNotion.Serialization.FullSerializer.fsMetaType.CreateInstance () (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Reflection/fsMetaType.cs:343)
Rethrow as InvalidOperationException: Unable to create instance of Pathfinding.TriangleMeshNode; there is no default constructor
ParadoxNotion.Serialization.FullSerializer.fsMetaType.CreateInstance () (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Reflection/fsMetaType.cs:348)
ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TrySerialize (System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& serialized, System.Type storageType) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Converters/fsReflectedConverter.cs:33)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_4_Converter (System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:671)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_2_Inheritance (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:621)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_1_ProcessCycles (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:602)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:565)
ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TrySerialize (System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& serialized, System.Type storageType) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Converters/fsReflectedConverter.cs:51)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_4_Converter (System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:671)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_2_Inheritance (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:621)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_1_ProcessCycles (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:602)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:565)
ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TrySerialize (System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& serialized, System.Type storageType) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Converters/fsReflectedConverter.cs:51)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_4_Converter (System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:671)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_2_Inheritance (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:621)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_1_ProcessCycles (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:602)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:565)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:539)
ParadoxNotion.Serialization.FullSerializer.Internal.fsDictionaryConverter.TrySerialize (System.Object instance_, ParadoxNotion.Serialization.FullSerializer.fsData& serialized, System.Type storageType) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Converters/fsDictionaryConverter.cs:82)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_4_Converter (System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:671)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_2_Inheritance (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:621)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_1_ProcessCycles (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:602)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:565)
ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TrySerialize (System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& serialized, System.Type storageType) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/Converters/fsReflectedConverter.cs:51)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_4_Converter (System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:671)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_2_Inheritance (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:621)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalSerialize_1_ProcessCycles (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:602)
ParadoxNotion.Serialization.FullSerializer.fsSerializer.TrySerialize (System.Type storageType, System.Type overrideConverterType, System.Object instance, ParadoxNotion.Serialization.FullSerializer.fsData& data) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/Full Serializer/fsSerializer.cs:565)
ParadoxNotion.Serialization.JSONSerializer.Serialize (System.Type type, System.Object value, Boolean pretyJson, System.Collections.Generic.List`1 objectReferences) (at Assets/ParadoxNotion/NodeCanvas/Framework/_Commons/Runtime/Serialization/JSONSerializer.cs:55)
NodeCanvas.Framework.Blackboard.UnityEngine.ISerializationCallbackReceiver.OnBeforeSerialize () (at Assets/ParadoxNotion/NodeCanvas/Framework/Runtime/Variables/Blackboard.cs:37)
UnityEditor.DockArea:OnGUI()
Hello and thank you for the follow up.
Support for Unity 5.5+ was added to NC version 2.6.2 and onward. In Unity version 5.5, Unity changed some very important code relevant to serialization, that NC was using, thus existing NodeCanvas based projects in Unity prior to version 5.5 was very difficult to upgrade properly to 5.5 and can only be done with the “Project Updater” tool, which even though the upgrade tool has been thoroughly tested, it might not work in all cases/projects.
Are the errors you posted above, relevant to the updating, or is it a problem you are still facing in your project?
Regarding GetOverlapSphereObjects, does not the modified action I posted before works for you? If not, can you please let me know what kind of changes you would like to have and help you with? 🙂
Thank you!
Join us on Discord: https://discord.gg/97q2Rjh
Hey Gav,
I finally received a response from Unity regarding the crashes I mentioned earlier :
**********************************
Hey,
We have been able to reproduce this bug and have sent it for resolution with our developers.
We highly appreciate your contribution. If you have further questions, feel free to contact us.
Sincerely,
Vidmantas
Unity QA Team
*************************
I will update you on the Unity progress/resolution.
Hey,
Thanks a lot for the follow up and the update! 🙂
Join us on Discord: https://discord.gg/97q2Rjh
Hey Gav,
Sort of a thin report from issue tracker but Unity was able to reproduce in several revs. It is in the Active state but I would guess that there won’t be much effort since it was not reproducible in the latest rev of 2017.
Cheers.
____________________________
Active
Votes
0
Found in
5.5.3f1
Issue ID
942212
Regression
Yes
THE EDITOR CRASHES ON ENTERING PLAY MODE WHEN SOME OF THE PREFABS IN THE SCENE HAVE MISSING COMPONENTS
Asset and Scene Management-Aug 15, 2017-Priority: 7 Not yet prioritized for a release-Severity: 1 Crash or major loss of functionality
To reproduce:
1. Open the project, attached by the user (New Unity re-try wo bts.zip)
2. Open the “TestScene_Tutorial3Complete” scene
2. Enter Play mode
Expected: entering Play mode doesn’t crash Unity if some of the prefabs in the scene have missing missing components
Reproduced in 5.5.3f1, 5.6.3p3, 2017.1.1p1, 2017.2.0b10, 2017.3.0a1, 2017.3.0a7
Did not reproduce in 2017.2.0b11
Could not test for regression in 5.4 due to no support for backwards compatibility
Thanks once again for the update!
It indeed sounds unfortunate and I also think that they won’t put much effort in fixing this since the bug is not reproducible in 2017.2, but we might be wrong and they do fix it after all.
Thanks!
Join us on Discord: https://discord.gg/97q2Rjh