marco de juego de la unidad para construir 2019 (XVI-XVII) localPosition simplificar y transformar reinicio

En el último que hemos recogido una pequeña herramienta de detección de una resolución de la pantalla. Explorarlo más abajo en la actualidad.

problema

A continuación, explorar la actualidad. Ya sea escribiendo interfaz de usuario o escritura de juego, más o menos necesidad de operar Transformar.

Y cuando me nuevo a la Unidad tiene un lugares muy poco acostumbrados. Es para transformar la posición, el ángulo, la asignación de zoom.

Por ejemplo, si sólo es asignación transform.localPosition.x.

El código para ser escrito.

var localPosition = transform.localPosition;
localPosition.x = 5.0f;
transform.localPosition = localPosition;

o escritura

transform.localPosition = new Vector3(5.0f,transform.localPosition.y,transform.localPosition.z)

La razón es porque es Vector3 tipo de estructura. Podemos entenderlo como un tipo de valor, cuando se recibe una copia del objeto es el valor Vector3, en lugar de asignar referencia. Esto es un poco de C # detalles de sintaxis, si usted no entiende los zapatos para niños, la búsqueda propuesto.

En la necesidad Quick-Cocos2dx una sola línea de código es suficiente.

self:setPositionX(5)

Nota: Este es un código Lua.

El autor de la misma, antes de tocarlos Unidad, comienza a correr desde la escuela para hacer una Cocos2dx de dos años, naturalmente difícil deshacerse de este hábito. Desde el principio es muy sencillo simplemente escribir el suyo propio.

Código es el siguiente:

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformLocalPosImprovements
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/10.Transform 赋值优化")]
#endif
		private static void GenerateUnityPackageName()
		{
			var transform = new GameObject("transform").transform;

			SetLocalPosX(transform, 5.0f);
		}

		public static void SetLocalPosX(Transform transform, float x)
		{
			var localPos = transform.localPosition;
			localPos = x;
			transform.localPosition = localPos;
		}
	}
}

El código es muy fácil de entender, teniendo en cuenta la longitud de un nombre de método, se convertirá en abreviatura Posición Pos.

código de resultado de la ejecución se muestra a continuación:
006tNc79gy1fzdi1ise58j31aa0e2n06.jpg

El resultado es correcto.

Soporte Y y Z

Además de transformar soporte para X, Y y Z. También ayuda Debido a que también se utiliza con mucha frecuencia.

Código es el siguiente:

		public static void SetLocalPosY(Transform transform, float y)
		{
			var localPos = transform.localPosition;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosZ(Transform transform, float z)
		{
			var localPos = transform.localPosition;
			localPos.z = z;
			transform.localPosition = localPos;
		}

Soporta XY, XZ e YZ

Por supuesto, XY, XZ e YZ es igualmente necesitados de apoyo. Pero también en este caso, en realidad se puede tener dos opciones:

  1. Llamada SetPositionX, SetPositionY, SetPositionZ
  2. Lógica para lograr la plena

La primera ventaja es que el código puede ser reutilizado, pero cada vez que se realiza una llamada, de hecho, es un tipo de valor de la operación de copia. No es recomendable desde el punto de vista del rendimiento.

La segunda ventaja es que el rendimiento es relativamente mejor, pero aumentará la cantidad de código.

Tomados en conjunto, elegir la segunda.

Código es el siguiente:

		public static void SetLocalPosXY(Transform transform, float x, float y)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosXZ(Transform transform, float x, float z)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.z = z;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosYZ(Transform transform, float y, float z)
		{
			var localPosition = localPos;
			localPos.y = y;
			localPos.z = z;
			transform.localPosition = localPos;
		}

Código no es nada difícil.

Todo el código es el siguiente:

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformLocalPosImprovements
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/10.Transform 赋值优化")]
#endif
		private static void GenerateUnityPackageName()
		{
			var transform = new GameObject("transform").transform;

			SetLocalPosX(transform, 5.0f);
			SetLocalPosY(transform, 5.0f);
			SetLocalPosZ(transform, 5.0f);
		}

		public static void SetLocalPosX(Transform transform, float x)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosY(Transform transform, float y)
		{
			var localPos = transform.localPosition;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosZ(Transform transform, float z)
		{
			var localPos = transform.localPosition;
			localPos.z = z;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosXY(Transform transform, float x, float y)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosXZ(Transform transform, float x, float z)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.z = z;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosYZ(Transform transform, float y, float z)
		{
			var localPos = transform.localPosition;
			localPos.y = y;
			localPos.z = z;
			transform.localPosition = localPos;
		}
	}
}

Este es nuestro ejemplo 10º.

Podemos derivar.

transformar reinicio

Hoy exploramos más abajo entonces, nuestra transformación.

A menudo escribimos esta lógica, una posición Transformar, rotación, valores de escala se ponen a cero.

Código es el siguiente:

transform.localPosition = Vector3.zero;
transform.localScale = Vector3.one;
transform.localRotation = Quaternion.identity;

Siempre se debe escribir el código.

Método después de que el extracto de la siguiente manera:

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformIdentity : MonoBehaviour
	{
		
#if UNITY_EDITOR
		[MenuItem("QFramework/11.Transform 归一化")]
#endif
		private static void MenuClicked()
		{
			var transform = new GameObject("transform").transform;

			Identity(transform);
		}

		/// <summary>
		/// 重置操作
		/// </summary>
		/// <param name="trans">Trans.</param>
		public static void Identity(Transform transform)
		{
			transform.localPosition = Vector3.zero;
			transform.localScale = Vector3.one;
			transform.localRotation = Quaternion.identity;
		}
	}
}

Los resultados de la aplicación del código es correcto.

Entonces alguien le preguntará Identidad ¿Qué significa? La identidad es realmente un tipo de matriz, la diagonal es 1 y todas las otras partes son todos 0, como se muestra a continuación.
006tNc79gy1fzdi20inapj302b03lgle.jpg

Transformada es esencialmente una matriz de 4x4 es en realidad, esta matriz puede registrar la posición de los valores de la matriz, la rotación y escalado. Transformar matriz de identidad correspondiente a la posición es 0, escalado a 1, el valor de rotación Quaternion.identity una matriz tal.

Aquí los estudiantes no entienden que no importa, la atención se centra método de Identidad para conseguir el código de seguridad.

OK, aquí, podemos una vez derivada.

Hasta la fecha, hemos recogido una muestra de diez. cosecha completa, debemos recolectar más ejemplos, ¿verdad?

el contenido de hoy en éstos.

Dirección reimpresión especifique: sandalias notas: liangxiegame.com

más

Supongo que te gusta

Origin www.cnblogs.com/liangxiegame/p/12617707.html
Recomendado
Clasificación