API reference

GridSliceResizer Class

Extends MonoBehaviour
The GridSliceResizer is a versatile tool designed to maintain the proportions of specific areas of 3D meshes while allowing others to stretch during scaling.
The concept of the GridSliceResizer is similar to the popular 9-Slice-Scaling technique used in 2D graphics, which keeps the borders of sprites unstretched while the inner rectangle is stretched. In essence, the GridSliceResizer is a 27-Slice-Scaler for 3D meshes. The component operates by dividing the bounding box of a 3D mesh into 27 cuboids, as illustrated below. Not all cuboids are visible in this picture. Only the ones that are front facing:
     +-----+-----------+-----+
    /_____/___________/_____/|
   /_____/___________/_____/||
  /     /           /     /|||
  +----+-----------+-----+ |||
  | A  |     B     |  C  |/|||
  +----+-----------+-----+ |||
  |    |           |     | |||
  | D  |     E     |  F  | |||
  |    |           |     |/||/
  +----+-----------+-----+ |/
  | G  |     H     |  I  | /
  +----+-----------+-----+
The scaling behaviour is as follows (assuming all other faces of the bounding box are divided as the front facing one): Center Cuboid (E): Vertices within this cuboid stretch on two axes (Y, Z). Corner Cuboids (A, C, G, I): These cuboids do not stretch on any axis. Middle Cuboids (B, H): These cuboids stretch horizontally but not vertically. Middle Cuboids (D, F): These cuboids stretch vertically but not horizontally. The slicing areas are defined by the PivotOffset and BorderXNegative, BorderXPositive, etc. These border values range from 0 to 1 and extend from the mesh's pivot (which may be offset by PivotOffset) to the maximum or minimum of the bounding box's axis. If all borders are set to 1, the mesh will stretch like a regular mesh during scaling. If set to 0, no stretching will occur. Typically, you'll want the pivot in the middle of the mesh and the borders set to around 0.8. You can visualize the borders and pivot either in the editor, in the prefab mode and during play. This component is only compatible with meshes that have read/write access enabled.

Fields

BorderXNegative : float
Signature
float BorderXNegative
BorderXPositive : float
Signature
float BorderXPositive
BorderYNegative : float
Signature
float BorderYNegative
BorderYPositive : float
Signature
float BorderYPositive
BorderZNegative : float
Signature
float BorderZNegative
BorderZPositive : float
Signature
float BorderZPositive
OriginalMesh : Mesh
Signature
Mesh OriginalMesh
PivotOffset : Vector3
Signature
Vector3 PivotOffset
ScalingX : Method
Signature
Method ScalingX
ScalingY : Method
Signature
Method ScalingY
ScalingZ : Method
Signature
Method ScalingZ
StretchCenter : StretchCenterAxis
Signature
StretchCenterAxis StretchCenter
UpdateInPlayMode : bool
Signature
bool UpdateInPlayMode

Methods

ProcessVertices ()
Processes the vertices of the given mesh, applying scaling and border adjustments.
This function is expensive, as it access and modifies each vertex of the mesh. Avoid calling it every frame.
Signature
Mesh ProcessVertices()
Returns
Mesh  A new Mesh with processed vertices.

Inner Enums

Method Enum

Defines the method of scaling to be applied to different sections of the mesh.

Enumeration Constants

Member
SLICE
SLICE_WITH_ASYMMETRICAL_BORDER
SCALE

StretchCenterAxis Enum

This parameter determines whether the center part of the object should be scaled.
If set to false, the center vertices will remain stationary. This is particularly useful when you want to maintain the proportions of certain geometrical features in the center part, such as a doorknob. By keeping the center vertices in place, you can avoid unwanted stretching effects, resulting in a more visually appealing outcome. However, it's important to note that for a convincing visual effect, the texture applied to the object should also not stretch. If you encounter issues with texture stretching, consider adding a loop cut. This can help maintain the texture's proportions and prevent it from distorting.

Enumeration Constants

MemberValue
X
1 << 0
Y
1 << 1
Z
1 << 2