Ejemplo n.º 1
0
    /**
     *	\brief Duplicates and mirrors the passed pb_Object.
     *	@param pb The donor pb_Object.
     *	@param axe The axis to mirror the object on.
     *	\returns The newly duplicated pb_Object.
     *	\sa ProBuilder.Axis
     */
    public static pb_Object Mirror(pb_Object pb, Vector3 scale)
    {
        pb_Object p = ProBuilder.CreateObjectWithObject(pb);

        p.MakeUnique();

        p.transform.parent = pb.transform.parent;

        p.transform.position      = pb.transform.position;
        p.transform.localRotation = pb.transform.localRotation;

        Vector3 lScale = p.gameObject.transform.localScale;

        p.transform.localScale = new Vector3(lScale.x * scale.x, lScale.y * scale.y, lScale.z * scale.z);

        // if flipping on an odd number of axes, flip winding order
        if ((scale.x * scale.y * scale.z) < 0)
        {
            p.ReverseWindingOrder(p.faces);
        }

        p.FreezeScaleTransform();

        p.Refresh();
        p.GenerateUV2(true);

        pb_Editor_Utility.InitObjectFlags(p, ColliderType.MeshCollider, pb.entity.entityType);
        return(p);
    }
Ejemplo n.º 2
0
        /**
         *	\brief Duplicates and mirrors the passed pb_Object.
         *	@param pb The donor pb_Object.
         *	@param axe The axis to mirror the object on.
         *	\returns The newly duplicated pb_Object.
         *	\sa ProBuilder.Axis
         */
        public static pb_Object Mirror(pb_Object pb, Vector3 scale)
        {
            pb_Object p = pb_Object.InitWithObject(pb);

            p.MakeUnique();

            p.transform.parent = pb.transform.parent;

            p.transform.localRotation = pb.transform.localRotation;

            Vector3 lScale = p.gameObject.transform.localScale;

            p.transform.localScale = new Vector3(lScale.x * scale.x, lScale.y * scale.y, lScale.z * scale.z);

            // if flipping on an odd number of axes, flip winding order
            if ((scale.x * scale.y * scale.z) < 0)
            {
                p.ReverseWindingOrder(p.faces);
            }

            p.FreezeScaleTransform();

            p.transform.localScale = pb.transform.localScale;

            Collider     col     = pb.GetComponent <Collider>();
            ColliderType colType = ColliderType.None;

            if (col != null)
            {
                if (col is MeshCollider)
                {
                    colType = ColliderType.MeshCollider;
                }
                else
                {
                    colType = ColliderType.BoxCollider;
                }
            }

            pb_Editor_Utility.InitObjectFlags(p, colType, pb.GetComponent <pb_Entity>().entityType);

            p.ToMesh();
            p.Refresh();

            // InitObjectFlags runs ScreenCenter()
            p.transform.position = pb.transform.position;

            Undo.RegisterCreatedObjectUndo(p.gameObject, "Mirror Object");

            return(p);
        }
Ejemplo n.º 3
0
        private pb_Object GetShadowObject(pb_Object pb)
        {
            if (pb == null || pb.name.Contains("-ShadowVolume"))
            {
                return(null);
            }

            for (int i = 0; i < pb.transform.childCount; i++)
            {
                Transform t = pb.transform.GetChild(i);

                if (t.name.Equals(string.Format("{0}-ShadowVolume", pb.name)))
                {
                    pb_Object shadow = t.GetComponent <pb_Object>();

                    if (shadow != null)
                    {
                        pbUndo.RecordObject(shadow, "Update Shadow Object");

                        pb_Face[] faces = new pb_Face[pb.faces.Length];

                        for (int nn = 0; nn < pb.faces.Length; nn++)
                        {
                            faces[nn] = new pb_Face(pb.faces[nn]);
                        }

                        shadow.GeometryWithVerticesFaces(pb.vertices, faces);
                        return(shadow);
                    }
                }
            }

            pb_Object new_shadow = pb_Object.InitWithObject(pb);

            new_shadow.name = string.Format("{0}-ShadowVolume", pb.name);
            new_shadow.MakeUnique();
            new_shadow.transform.SetParent(pb.transform, false);
            Undo.RegisterCreatedObjectUndo(new_shadow.gameObject, "Create Shadow Object");
            return(new_shadow);
        }