마지막에서 우리는 작은 도구 화면 해상도 감지를 수집했다. 그리고 오늘 더 아래를 살펴 봅니다.
문제
우리는 오늘 탐구. 다소 필요 변환 작동 UI 또는 쓰기 게임 플레이를 작성 여부.
나는 통일에 새 때 매우 익숙하지 못한 곳이있다. 그것은 위치, 각도, 줌 할당을 변환하는 것입니다.
예를 들어, 경우에만 transform.localPosition.x 할당입니다.
코드 작성한다.
var localPosition = transform.localPosition;
localPosition.x = 5.0f;
transform.localPosition = localPosition;
또는 쓰기
transform.localPosition = new Vector3(5.0f,transform.localPosition.y,transform.localPosition.z)
Vector3이 구조체 타입이기 때문입니다. 우리는 객체의 복사본을 수신 값 유형으로 이해할 수있는 것은 오히려 참조를 할당하는 것보다, Vector3 값입니다. 당신이 어린이 신발, 제안 된 검색을 이해하지 못하는 경우 구문은 C #을 조금 세부입니다.
빠른-Cocos2dx 필요에 단 한 줄의 코드 만은 충분하다.
self:setPositionX(5)
참고 :이 루아 코드입니다.
그것의 저자는, 감동 유니티하기 전에,이 습관을 없애 자연스럽게 어려운, 2 년 Cocos2dx을하기 위해 학교에서 실행하기 시작합니다. 원칙은 매우 간단하기 때문에 단순히 자신을 작성합니다.
다음과 같이 코드입니다 :
#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;
}
}
}
코드, 그것은 약자의 위치 포스 될 것입니다 방법 이름의 길이를 고려, 이해하기 쉽습니다.
실행 결과 코드는 다음과 같습니다 :
결과는 정확합니다.
지원 Y 및 Z
또한 X, Y 및 Z를 또한 우리 지원에 대한 지원을 변환하기 그들은 또한 매우 자주 사용하기 때문에.
다음과 같이 코드입니다 :
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;
}
XY, XZ 및 YZ 지원
물론, XY, XZ 및 YZ는 동등하게 지원을 필요로한다. 그러나 여기 너무, 당신은 실제로 두 가지 옵션이 있습니다 :
- 전화 SetPositionX, SetPositionY, SetPositionZ
- 로직 전체 달성하기 위해
첫 번째 장점은 코드를 재사용 할 수 있지만 통화가 이루어질 때마다, 사실, 복사 동작의 값 타입이다. 그것은 성능의 관점에서 바람직하지 않습니다.
두 번째 장점은 성능이 상대적으로 더 나은,하지만 코드의 양을 증가시킬 것입니다.
함께 찍은, 두 번째를 선택합니다.
다음과 같이 코드입니다 :
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;
}
코드는 어려운 아무것도 아니다.
다음과 같이 모든 코드는 다음과 같습니다
#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;
}
}
}
이것은 우리의 10 번째 예이다.
우리는 유도 될 수있다.
다시 변환
오늘 우리는 우리의 변환 후 더 아래를 살펴 봅니다.
우리는 종종 스케일링 값이 리셋되어,이 논리하는 변환 위치, 회전 물품.
다음과 같이 코드입니다 :
transform.localPosition = Vector3.zero;
transform.localScale = Vector3.one;
transform.localRotation = Quaternion.identity;
그것은 항상 코드를 작성해야합니다.
방법 우리는 다음과 추출 후 :
#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;
}
}
}
코드의 실행 결과는 정확합니다.
그런 사람은 무엇을 의미 하는가 신원을 물어볼 것입니다? 신원 실제 행렬의 형태이며, 사선은 1이고, 아래와 같이 다른 모든 부분은 모두 0이다.
본질적으로 4 × 4 행렬 실제로,이 매트릭스는 매트릭스, 회전 및 스케일링 값의 위치를 기록 할 수있다 변환된다. 위치에 대응하는 행렬을 변환하는 1 확장, 0, 회전 값 Quaternion.identity 같은 매트릭스.
여기서 학생들은 그 초점은 위의 코드를 달성하기 위해 식별 방법이 아닙니다 문제이다 않습니다 이해가 안 돼요.
OK, 여기, 우리는 한 번 유도 할 수 있습니다.
지금까지 우리는 10 샘플을 수집했다. 전체 수확, 우리는 바로, 더 많은 예제를 수집해야합니까?
이러한 오늘의 내용.
주소 무단 전재 지정하십시오 샌들 노트 : liangxiegame.com
더
-
QFramework 주소 : https://github.com/liangxiegame/QFramework
-
QQ 교환 그룹 : 623 597 263
-
유니티는 작은 클래스를 고급 :
- 주요 교육 내용 :
- 프레임 워크 설정 교육 (첫 해)
- 쉐이더와 함께 사례 연구 (제 1 년)
- 측선 배양 (제 년 제 년)
- 강의의 형태로 자본의 구체적인 내용은,, 등은 참조하십시오 "작은 클래스 제품 매뉴얼" : https://liangxiegame.com/master/intro를
- 주요 교육 내용 :
-
있는 공개 문제 없습니다, 제 1 시간 업데이트 알림을 획득 liangxiegame, 그리고 더 많은 무료 콘텐츠.