Spline - Lumberyard Guía del usuario

Si proporcionásemos una traducción de la versión en inglés de la guía, prevalecerá la versión en inglés de la guía si hubiese algún conflicto. La traducción se proporciona mediante traducción automática.

Spline

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

Puede crear líneas y curvas en Lumberyard Editor utilizando la función [EMPTY] componente,

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

Propiedades de spline


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

El [EMPTY] El componente tiene las siguientes propiedades.

Nombre Descripción
Visible (Visible)

El componente siempre aparece en la ventanilla, incluso si la entidad no está seleccionado.

Tipo de spline

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

  • Lineal

  • Berzí

  • Cápula-Rom

Cerrado

Especifica si una spline es un bucle cerrado o abierto.

Granularidad

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

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

Parametrización de nudos

Esta propiedad solo está disponible para la spline Catmull-Rom escriba.

Ajusta la curvatura y la suavidad del spline. Especificar un para admitir la parametrización.

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

Para obtener más información, consulte Nudo Ejemplos de parametrización.

[EMPTY]

Elegir [EMPTY] y el componente está bloqueado durante editando. Para obtener más información, consulte Edición de componentes en la ventanilla.

Por defecto, un [EMPTY] El componente tiene cuatro vértices espaciados de manera uniforme en una línea. Las posiciones de vértice se almacenan en el espacio local de la entidad.


            Valor predeterminado [EMPTY] con el tipo lineal.

Uso de componentes de spline

Puede mover los vértices en el espacio local de la entidad a lo largo de cada eje. Cada El vértice de tiene un manipulador planar, lineal y de superficie. Estos se denominan combinados manipulador de traslación. Puede utilizar la traducción para mover los vértices.

Para cambiar las posiciones de vértice de un spline

  1. Realice una de las siguientes acciones:

  2. Realice una de las siguientes acciones:

    • Seleccione un vértice en el componente y arrastre el campo azul, verde, o la flecha roja (manipulador lineal) o el azul hueco, verde o rojo cuadrado (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 la configuración de ajuste de cuadrícula que puede especificar en Lumberyard Editor barra de herramientas. 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

Los manipuladores se comportan correctamente si la entidad se escala, pero el escalado debe ser uniforme para que los valores de x, y z coincidan (por ejemplo, 2.0de 2,0de 2.0). Le recomendamos que utilizar el escalado uniforme para entidades con un [EMPTY] componente.

También puede seleccionar varios vértices.

Para seleccionar varios vértices en una spline

  • En espera Control y seleccione los vértices. Vértices seleccionados amarillo.

    
                            Seleccione y mueva varios vértices.
    nota

    Actualmente, no puede hacer clic y dibujar un cuadro alrededor de los vértices para selecciónelos.

También puede ajustar un vértice a otra posición en el terreno.

Para ajustar un vértice a otra posición

  1. Seleccione un vértice.

  2. En espera Mayús+Ctrl y haz clic en otra posición en la pestaña terreno. El vértice se ajusta a esa posición.

También puede añadir vértices a la spline.

Para añadir un vértice a una spline

  1. Deténgase sobre una línea y mantenga pulsado Control. 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 en para añadir el vértice al spline.

    
                            Haga clic en para añadir un vértice al spline. Un manipulador de traslación
                                aparece donde se añade el vértice.

También puede eliminar vértices del spline.

Para eliminar un vértice del spline

  1. En espera [EMPTY] y pausar en un vértice. Aparece el vértice gris.

    
                            Seleccione el vértice para eliminar. El color del vértice gira
                                gris.
  2. Haga clic en el vértice para eliminarlo. También puede seleccionar un vértice y pulsar Eliminar.

    nota

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

    
                            El vértice eliminado se elimina del spline.

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

ejemplo Berzí


                        El spline lineal cambia a un spline de Bézier.

ejemplo Cápula-Rom


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

El primer y el último vértice de un spline Catmull-Rom son solo 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 los vértices.

Los siguientes ejemplos muestran cómo cambian las splines de Catmull-Rom cuando se ajusta el Parametrización de nudos propiedad.

ejemplo Parametrización de nudo = 0


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

ejemplo Parametrización de nudo =1


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

ejemplo Estrías lineales y Bézier

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


                        Ejemplo abierto y cerrado de splines lineales y Bézier.

Interfaz de bus de solicitud EBus

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

Para obtener más información sobre el 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 Parámetros [EMPTY] Se puede escribir
GetSpline

Devuelve un puntero constante al tipo de spline subyacente. Puedes utilizar esta función para consultar el spline contra raycasts y posiciones. También puede solicitar información, como la longitud de la spline, su posición, normal y tangente en varios puntos a lo largo del spline.

Ninguno

AZ::ConstSplinePtr
ChangeSplineType

Cambia el tipo de spline. El AZ::u64 valor se refiere a el hash de RTTI del tipo de spline subyacente.

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

AZ::u64 Ninguno
SetClosed

Especifica si la spline forma un bucle cerrado o abierto.

Valor booleano Ninguno

ejemplo

El siguiente script utiliza la interfaz de bus de solicitud.

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());