Spline - Guía del usuario de Lumberyard

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Spline

Esta característica está en versión preliminar y está sujeta a cambios.

Puede crear líneas y curvas en Lumberyard Editor mediante el componente Spline.

Un spline es una curva que conecta dos o más puntos específicos. Esto resulta útil si desea animar entidades a lo largo de un spline, como una carretera o río.

Propiedades de spline


                Ejemplo [EMPTY] del componente con el Modo de componente opción.

El componente Spline incluye las siguientes propiedades:

Nombre ​Descripción
Visible

El componente aparece siempre en la ventanilla, incluso aunque la entidad no se haya seleccionado.

Spline Type

Tipo de interpolación que utilizar entre vértices. El componente admite los siguientes tipos de spline:

  • Linear

  • Bézier

  • Catmull-Rom

Closed

Especifica si un spline es un bucle abierto o cerrado.

Granularity

Esta propiedad está disponible únicamente para tipos de spline Bézier y Catmull-Rom.

El número de pasos de cada segmento en el spline. Un paso es una de las muchas líneas cortas dispuestas para lograr la forma aproximada de la curva. Un segmento es la parte del spline entre dos vértices.

Knot Parameterization

Esta propiedad está disponible únicamente para el tipo de spline Catmull-Rom.

Ajusta la curvatura y la suavidad del spline. Especifique un valor para posibilitar la parametrización.

Un valor de 0 crea un spline Catmull-Rom estándar. Un valor de 1 crea un spline Catmull-Rom cordal.

Para obtener más información, consulte los ejemplos de parametrización de nudos.

Edit (Editar)

Seleccione Edit (Editar) y el componente está bloqueado para edición. Para obtener más información, consulte Edición de componentes en la ventanilla.

Los componentes Spline tienen de forma predeterminada cuatro vértices espaciados de manera uniforme en una línea. Las posiciones de vértices se almacenan en el espacio local de la entidad.


            Valor predeterminado [EMPTY] con el tipo lineal.

Trabajar con componentes Spline

Puede mover los vértices en el espacio local de la entidad a lo largo de cada eje. Cada vértice tiene un manipulador planar, lineal y de superficie. En conjunto, se denominan manipulador de traslación. Puede usar el manipulador de conversión para mover los vértices.

Para cambiar las posiciones de vértice de un spline

  1. Aplique una de las siguientes acciones:

  2. Aplique una de las siguientes acciones:

    • Seleccione un vértice en el componente y arrastre la flecha azul, verde o roja (manipulador lineal) o el cuadro azul, verde, azul o rojo hueco (manipulador planar) a una posición.

    • Seleccione un vértice en el componente y arrastre el punto amarillo (manipulador de superficie) para mover el vértice.

nota

Los manipuladores siguen el ajuste de cuadrícula, que puede especificar en la barra de herramientas de Lumberyard Editor. Para obtener más información, consulte Uso de la barra de herramientas superior.


                    Seleccione un vértice y aparecerá un manipulador de traslación en el [EMPTY] componente.
nota

Si la entidad se escala, los manipuladores continúan manteniendo un comportamiento correcto, pero el escalado debe ser uniforme de forma que los valores de escala x, y y z coincidan (por ejemplo, 2.0, 2,0, 2.0). Le recomendamos que utilice el escalado uniforme para entidades con un componente Spline.

También puede seleccionar varios vértices.

Para seleccionar varios vértices en un spline

  • Mantenga presionada la tecla Ctrl y seleccione los vértices. Los vértices seleccionados aparecen en color amarillo.

    
                            Seleccione y mueva varios vértices.
    nota

    Actualmente no puede hacer clic y trazar un cuadro alrededor de los vértices para seleccionarlos.

También puede colocar un vértice en otra posición sobre el terreno.

Para colocar un vértice en otra posición

  1. Seleccione un vértice.

  2. Mantenga pulsada la tecla Mayús+Ctrl y, a continuación, haga clic en otra posición sobre el terreno. El vértice se coloca en esa posición.

También puede agregar vértices al spline.

Para añadir un vértice a un spline

  1. Colóquese sobre una línea y mantenga pulsada la tecla Ctrl. Aparece una vista previa donde puede añadir el vértice.

    
                            Aparece un punto verde donde puede añadir un vértice al [EMPTY] componente.
  2. Haga clic para añadir el vértice al spline.

    
                            Haga clic para añadir un vértice al spline. Aparece un manipulador de conversión allí donde añade el vértice.

También puede eliminar vértices del spline.

Para eliminar un vértice del spline

  1. Mantenga pulsada la tecla Alt y colóquese sobre un vértice. El vértice aparece en gris.

    
                            Seleccione el vértice que desea eliminar. El vértice se vuelve de color gris.
  2. Haga clic en el vértice para eliminarlo. También puede seleccionar un vértice y pulsar Delete (Eliminar).

    nota

    Los splines Linear y Bézier deben tener un mínimo de dos vértices. Los splines Catmull-Rom deben tener un mínimo de cuatro vértices.

    
                            El vértice eliminado desaparece del spline.

Si cambia el tipo de spline, el componente se actualiza para representar el nuevo método de interpolación.

ejemplo Bézier


                        El spline Linear cambia a un spline Bézier.

ejemplo Catmull-Rom


                        El spline Linear cambia a un spline Catmull-Rom.
nota

El primer vértice y el último de un spline Catmull-Rom solo son puntos de control. No forman parte de la curva. Un spline Catmull-Rom bien formado debe tener un mínimo de cuatro vértices. El spline no se representa si hay menos de cuatro vértices.

Los siguientes ejemplos muestran cómo los splines Catmull-Rom cambian al ajustar la propiedad Knot Parameterization.

ejemplo Knot Parameterization = 0


                        El valor de parametrización del nudo es 0 para el spline de Catmull-Rom.

ejemplo Knot Parameterization =1


                        El valor de parametrización del nudo es 1 para el spline de Catmull-Rom.

ejemplo Splines Linear y Bézier

Los siguientes ejemplos son splines Linear y Bézier con los mismos vértices, pero con bucles abiertos y cerrados.


                        Ejemplo de splines Linear y Bézier abiertos y cerrados.

EBus Solicitar interfaz de bus

Utilice las siguientes funciones de solicitud con la SplineComponentRequestBus EBus para comunicarse con otros componentes del juego. El componente Spline también utiliza funciones VertexContainer. Para obtener más información, consulte Contenedores de vértice.

Para obtener más información acerca del uso de la interfaz de bus de eventos (EBus), consulte Trabajar con el sistema de bus de eventos (EBus).

Nombre de la solicitud ​Descripción Parameters Return Capacidad de ejecución de script
GetSpline

Devuelve un puntero constante al tipo de spline subyacente. Puede utilizar esta función para consultar los splines con respecto a raycasts y posiciones. También puede solicitar información, como la longitud del spline, su posición, normal y tangente en diversos puntos a lo largo del spline.

Ninguna

AZ::ConstSplinePtr
ChangeSplineType

Cambia el tipo de spline. El valor AZ::u64 hace referencia al hash de RTTI del tipo de spline subyacente.

Por ejemplo, AZ::LinearSpline::RTTI_Type().GetHash()).

AZ::u64 Ninguna
SetClosed

Especifique si el spline forma un bucle abierto o cerrado.

Booleano Ninguna

ejemplo

El script siguiente utiliza la interfaz de bus de solicitudes.

local spline = SplineComponentRequestBus.Event.GetSpline(self.entityId); -- GetNearestAddressPosition local posSplineQueryResult = spline:GetNearestAddressPosition(Vector3(0, 0, 0)); posSplineQueryResult.splineAddress posSplineQueryResult.splineAddress.segmentIndex posSplineQueryResult.splineAddress.segmentFraction posSplineQueryResult.distanceSq -- GetNearestAddressRay local raySplineQueryResult = spline:GetNearestAddressRay(Vector3(10, -1, 0), Vector3(0, -1, 0)); raySplineQueryResult.splineAddress.segmentIndex raySplineQueryResult.splineAddress.segmentFraction raySplineQueryResult.distanceSq raySplineQueryResult.rayDistance local splineAddressFromDistance = spline:GetAddressByDistance(3.0); local splineAddressFromFraction = spline:GetAddressByFraction(0.75); -- Test SplineAddress Constructor (1 param) local splineAddress_1 = SplineAddress(2); -- Test SplineAddress Constructor (2 params) local splineAddress_2 = SplineAddress(1, 0); spline:GetPosition(splineAddress_1) spline:GetNormal(splineAddress_1) spline:GetTangent(splineAddress_1) spline:GetLength(splineAddress_1) spline:GetSplineLength() spline:GetSegmentLength(1) spline:GetSegmentCount() spline:GetSegmentGranularity() local aabb = spline:GetAabb(Transform:CreateIdentity()); local closed = spline:IsClosed(); local firstVertex = spline.vertexContainer[1]; local lastVertex = spline.vertexContainer[spline.vertexContainer:Size()]; -- Attention: You can use the bus interface directly, but here (at the moment at least) indexing will start from 0, not 1 as is the norm in Lua. Instead, you should use the functions directly on the VertexContainer, listed below SplineComponentRequestBus.Event.AddVertex(self.entityId, lastVertex + Vector3(1, 2, 3)); SplineComponentRequestBus.Event.UpdateVertex(self.entityId, 0, firstVertex + Vector3(1, 2, 3)); SplineComponentRequestBus.Event.InsertVertex(self.entityId, spline.vertexContainer:Size() - 1, lastVertex + Vector3(1, 2, 3)); SplineComponentRequestBus.Event.ClearVertices(self.entityId); SplineComponentRequestBus.Event.RemoveVertex(self.entityId, spline.vertexContainer:Size() - 1); -- Prefer these functions - indexing will start from 1 spline.vertexContainer:AddVertex(lastVertex + Vector3(1, 2, 3)); spline.vertexContainer:UpdateVertex(1, firstVertex + Vector3(1, 2, 3)); spline.vertexContainer:InsertVertex(spline.vertexContainer:Size(), lastVertex + Vector3(1, 2, 3)); spline.vertexContainer:ClearVertices(); spline.vertexContainer:RemoveVertex(spline.vertexContainer:Size());