在项目开发中经常需要保存场景中物体的旋转,位置,大小。为了每次保存成统一的格式方便复用,给Transfrom加入设置和获取的拓展方法。关于拓展方法的可以推荐 拓展方法 这篇文章。下面是改功能的实现:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 类必须是静态类,
/// 另外扩展方法(Extension Methods)必须也是静态方法,
/// 方法的参数中必须要有被扩展类作为其中一个参数,
/// 此参数前面用this关键字修饰。
/// </summary>
public static class TransformExtension {
/// <summary>
/// 根据字符串设置Transform的位置旋转和缩放
/// </summary>
/// <param name="transform"></param>
/// <param name="info">px,py,pz;rx,ry,rz;sx,sy,sz</param>
public static void SetTransformByString(this Transform transform, string info)
{
string[] infos = info.Split(';');
if (infos.Length >= 3)
{
transform.localPosition = GetVectorFromString(infos[0]);
transform.localEulerAngles = GetVectorFromString(infos[1]);
transform.localScale = GetVectorFromString(infos[2]);
}
}
/// <summary>
/// 获取transform 9轴信息的字符串
/// </summary>
/// <param name="transform"></param>
/// <returns>px,py,pz;rx,ry,rz;sx,sy,sz</returns>
public static string GetTransformDetails(this Transform transform)
{
string result = "";
result += GetVectorString(transform.localPosition) + ";";
result += GetVectorString(transform.localEulerAngles) + ";";
result += GetVectorString(transform.localScale);
return result;
}
public static Vector3 GetVectorFromString(string str)
{
Vector3 result = Vector3.zero;
try
{
string[] temps = str.Split(',');
result.x = float.Parse(temps[0]);
result.y = float.Parse(temps[1]);
result.z = float.Parse(temps[2]);
}
catch (Exception e)
{
throw e;
}
return result;
}
public static string GetVectorString(Vector3 vec)
{
string result = vec.x.ToString("0.00") + "," + vec.y.ToString("0.00") + "," + vec.z.ToString("0.00");
return result;
}
}
下面我收集了两篇Transfrom和GameObject很实用的拓展方法Transfrom拓展方法 GameObject拓展方法