static Collider AllocCollider(ProxyForceFieldPrimitive.FieldPrimitiveType pt)
            {
                if (!s_ColliderCoreObject)
                {
                    const string k_tempObjName = "TempForceFieldPrimPosedForCollision";
                    s_ColliderCoreObject           = new GameObject();
                    s_ColliderCoreObject.hideFlags = HideFlags.HideAndDontSave;
                    s_ColliderCoreObject.name      = k_tempObjName;
                }
                var gm = s_ColliderCoreObject;

                switch (pt)
                {
                case ProxyForceFieldPrimitive.FieldPrimitiveType.Box:
                case ProxyForceFieldPrimitive.FieldPrimitiveType.PlaneForward:
                case ProxyForceFieldPrimitive.FieldPrimitiveType.LineOnX:
                    return(gm.AddComponent <BoxCollider>());

                case ProxyForceFieldPrimitive.FieldPrimitiveType.Sphere:
                    return(gm.AddComponent <SphereCollider>());

                default:
                    throw new System.NotImplementedException("Collider for " + pt);
                }
            }
            static Collider EnsureCollider(int argIndex, ProxyForceFieldPrimitive.FieldPrimitiveType pt)
            {
                const int maxArgs  = 2;
                const int maxTypes = (int)(ProxyForceFieldPrimitive.FieldPrimitiveType.COUNT_TYPES);

                if (s_CollidersByArgByPrimType != null)
                {
                    // already allocted
                }
                else
                {
                    s_CollidersByArgByPrimType = new Collider[maxArgs][];
                    for (var ai = 0; ai < maxArgs; ai++)
                    {
                        s_CollidersByArgByPrimType[ai] = new Collider[maxTypes];
                    }
                }

                var typeIndex = (int)pt;
                var col       = s_CollidersByArgByPrimType[argIndex][typeIndex];

                if (col)
                {
                    return(col);
                }

                col = AllocCollider(pt);
                s_CollidersByArgByPrimType[argIndex][typeIndex] = col;
                return(col);
            }