Unity使用拓展方法設置和獲取Transfrom信息

       在項目開發中經常需要保存場景中物體的旋轉,位置,大小。爲了每次保存成統一的格式方便複用,給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拓展方法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章