中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站主體信息俄羅斯搜索引擎入口 yandex

網(wǎng)站主體信息,俄羅斯搜索引擎入口 yandex,長春火車站核酸檢測多久出結(jié)果,杭州建站程序推薦閱讀 CSDN主頁GitHub開源地址Unity3D插件分享簡書地址我的個人博客 大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。 一、前言 在開發(fā)中,常常會遇到頻繁復(fù)制粘貼物體的坐標(biāo)、旋轉(zhuǎn)…

推薦閱讀

  • CSDN主頁
  • GitHub開源地址
  • Unity3D插件分享
  • 簡書地址
  • 我的個人博客

大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。

一、前言

在開發(fā)中,常常會遇到頻繁復(fù)制粘貼物體的坐標(biāo)、旋轉(zhuǎn)、縮放的操作。

使用Unity自帶的組件復(fù)制粘貼比較麻煩:
復(fù)制:
在這里插入圖片描述
粘貼:
在這里插入圖片描述
還有一些需要復(fù)制位置、旋轉(zhuǎn)、縮放的值到到代碼中,如果一個一個復(fù)制粘貼非常麻煩,還要一些需要復(fù)制添加自定義文本,也很不方便。

所以,就開發(fā)了一個小工具,來提升開發(fā)效率。

二、正文

2-1、實現(xiàn)快速復(fù)制/粘貼,位置/旋轉(zhuǎn)/縮放功能

效果圖:
在這里插入圖片描述
在Editor文件夾中新建腳本,隨便命名,然后編輯代碼:

using UnityEngine;
using UnityEditor;
using System.Text;
using static UnityEditor.IMGUI.Controls.PrimitiveBoundsHandle;
using static UnityEngine.UI.Image;[CanEditMultipleObjects]
[CustomEditor(typeof(Transform), true)]
public class TransformEditor : Editor
{static public TransformEditor instance;//當(dāng)前的本地坐標(biāo)SerializedProperty mPos;//當(dāng)前的本地旋轉(zhuǎn)SerializedProperty mRot;//當(dāng)前的本地縮放SerializedProperty mScale;void OnEnable(){instance = this;if (this){try{var so = serializedObject;mPos = so.FindProperty("m_LocalPosition");mRot = so.FindProperty("m_LocalRotation");mScale = so.FindProperty("m_LocalScale");}catch { }}}void OnDestroy() { instance = null; }/// <summary>/// Draw the inspector widget.繪制inspector小部件。/// </summary>public override void OnInspectorGUI(){//設(shè)置label的寬度EditorGUIUtility.labelWidth = 15f;serializedObject.Update();DrawPosition();DrawRotation();DrawScale();DrawCopyAndPaste();serializedObject.ApplyModifiedProperties();}void DrawCopyAndPaste(){GUILayout.BeginHorizontal();bool reset = GUILayout.Button("Copy");bool reset2 = GUILayout.Button("Paste");GUILayout.EndHorizontal();if (reset){//把數(shù)值打印出來var select = Selection.activeGameObject;if (select == null)return;//Debug.Log(select.name+"("+ mPos.vector3Value.x.ToString()+ ","+ mPos.vector3Value.y.ToString() + ","+ mPos.vector3Value.z.ToString() + ")");//Debug.Log(select.name + mRot.quaternionValue);//Debug.Log(select.name + "(" + mScale.vector3Value.x.ToString() + "," + mScale.vector3Value.y.ToString() + "," + mScale.vector3Value.z.ToString() + ")");StringBuilder s = new StringBuilder();s.Append("TransformInspector_" + "(" + mPos.vector3Value.x.ToString() + "," + mPos.vector3Value.y.ToString() + "," + mPos.vector3Value.z.ToString() + ")" + "_");s.Append(mRot.quaternionValue + "_");s.Append("(" + mScale.vector3Value.x.ToString() + "," + mScale.vector3Value.y.ToString() + "," + mScale.vector3Value.z.ToString() + ")");//添加到剪貼板UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();}if (reset2){//把數(shù)值打印出來//Debug.Log(UnityEngine.GUIUtility.systemCopyBuffer);string s = UnityEngine.GUIUtility.systemCopyBuffer;string[] sArr = s.Split('_');if (sArr[0] != "TransformInspector"){Debug.LogError("未復(fù)制Transform組件內(nèi)容!Transform component content not copied!");return;}//Debug.Log("Pos:" + sArr[1]);//Debug.Log("Rot:" + sArr[2]);//Debug.Log("Scale:" + sArr[3]);try{mPos.vector3Value = ParseV3(sArr[1]);mRot.quaternionValue = new Quaternion() { x = ParseV4(sArr[2]).x, y = ParseV4(sArr[2]).y, z = ParseV4(sArr[2]).z, w = ParseV4(sArr[2]).w };mScale.vector3Value = ParseV3(sArr[3]);}catch (System.Exception ex){Debug.LogError(ex);return;}}}/// <summary>/// String To Vector3/// </summary>/// <param name="strVector3"></param>/// <returns></returns>Vector3 ParseV3(string strVector3){strVector3 = strVector3.Replace("(", "").Replace(")", "");string[] s = strVector3.Split(',');return new Vector3(float.Parse(s[0]), float.Parse(s[1]), float.Parse(s[2]));}/// <summary>/// String To Vector4/// </summary>/// <param name="strVector4"></param>/// <returns></returns>Vector4 ParseV4(string strVector4){strVector4 = strVector4.Replace("(", "").Replace(")", "");string[] s = strVector4.Split(',');return new Vector4(float.Parse(s[0]), float.Parse(s[1]), float.Parse(s[2]), float.Parse(s[3]));}#region Position 位置void DrawPosition(){GUILayout.BeginHorizontal();EditorGUILayout.PropertyField(mPos.FindPropertyRelative("x"));EditorGUILayout.PropertyField(mPos.FindPropertyRelative("y"));EditorGUILayout.PropertyField(mPos.FindPropertyRelative("z"));bool reset = GUILayout.Button("P", GUILayout.Width(20f));GUILayout.EndHorizontal();if (reset) mPos.vector3Value = Vector3.zero;}#endregion#region Scale 縮放void DrawScale(){GUILayout.BeginHorizontal();{EditorGUILayout.PropertyField(mScale.FindPropertyRelative("x"));EditorGUILayout.PropertyField(mScale.FindPropertyRelative("y"));EditorGUILayout.PropertyField(mScale.FindPropertyRelative("z"));bool reset = GUILayout.Button("S", GUILayout.Width(20f));if (reset) mScale.vector3Value = Vector3.one;}GUILayout.EndHorizontal();}#endregion#region Rotation is ugly as hell... since there is no native support for quaternion property drawing 旋轉(zhuǎn)是丑陋的地獄。。。因為四元數(shù)屬性繪圖沒有本地支持enum Axes : int{None = 0,X = 1,Y = 2,Z = 4,All = 7,}Axes CheckDifference(Transform t, Vector3 original){Vector3 next = t.localEulerAngles;Axes axes = Axes.None;if (Differs(next.x, original.x)) axes |= Axes.X;if (Differs(next.y, original.y)) axes |= Axes.Y;if (Differs(next.z, original.z)) axes |= Axes.Z;return axes;}Axes CheckDifference(SerializedProperty property){Axes axes = Axes.None;if (property.hasMultipleDifferentValues){Vector3 original = property.quaternionValue.eulerAngles;foreach (Object obj in serializedObject.targetObjects){axes |= CheckDifference(obj as Transform, original);if (axes == Axes.All) break;}}return axes;}/// <summary>/// Draw an editable float field. 繪制可編輯的浮動字段。/// </summary>/// <param name="hidden">Whether to replace the value with a dash 是否將值替換為破折號</param>/// <param name="greyedOut">Whether the value should be greyed out or not 值是否應(yīng)灰顯</param>static bool FloatField(string name, ref float value, bool hidden, GUILayoutOption opt){float newValue = value;GUI.changed = false;if (!hidden){newValue = EditorGUILayout.FloatField(name, newValue, opt);}else{float.TryParse(EditorGUILayout.TextField(name, "--", opt), out newValue);}if (GUI.changed && Differs(newValue, value)){value = newValue;return true;}return false;}/// <summary>/// Because Mathf.Approximately is too sensitive.因為數(shù)學(xué)近似值太敏感了。/// </summary>static bool Differs(float a, float b) { return Mathf.Abs(a - b) > 0.0001f; }/// <summary>/// 注冊Undo/// </summary>/// <param name="name"></param>/// <param name="objects"></param>static public void RegisterUndo(string name, params Object[] objects){if (objects != null && objects.Length > 0){UnityEditor.Undo.RecordObjects(objects, name);foreach (Object obj in objects){if (obj == null) continue;EditorUtility.SetDirty(obj);}}}/// <summary>/// 角度處理/// </summary>/// <param name="angle"></param>/// <returns></returns>static public float WrapAngle(float angle){while (angle > 180f) angle -= 360f;while (angle < -180f) angle += 360f;return angle;}void DrawRotation(){GUILayout.BeginHorizontal();{Vector3 visible = (serializedObject.targetObject as Transform).localEulerAngles;visible.x = WrapAngle(visible.x);visible.y = WrapAngle(visible.y);visible.z = WrapAngle(visible.z);Axes changed = CheckDifference(mRot);Axes altered = Axes.None;GUILayoutOption opt = GUILayout.MinWidth(30f);if (FloatField("X", ref visible.x, (changed & Axes.X) != 0, opt)) altered |= Axes.X;if (FloatField("Y", ref visible.y, (changed & Axes.Y) != 0, opt)) altered |= Axes.Y;if (FloatField("Z", ref visible.z, (changed & Axes.Z) != 0, opt)) altered |= Axes.Z;bool reset = GUILayout.Button("R", GUILayout.Width(20f));if (reset){mRot.quaternionValue = Quaternion.identity;}else if (altered != Axes.None){RegisterUndo("Change Rotation", serializedObject.targetObjects);foreach (Object obj in serializedObject.targetObjects){Transform t = obj as Transform;Vector3 v = t.localEulerAngles;if ((altered & Axes.X) != 0) v.x = visible.x;if ((altered & Axes.Y) != 0) v.y = visible.y;if ((altered & Axes.Z) != 0) v.z = visible.z;t.localEulerAngles = v;}}}GUILayout.EndHorizontal();}#endregion
}

運行結(jié)果:
在這里插入圖片描述
這樣就實現(xiàn)了基本的快速復(fù)制/粘貼,位置/旋轉(zhuǎn)/縮放功能。

接下來,就實現(xiàn)單獨的位置、旋轉(zhuǎn)、縮放的復(fù)制和粘貼吧。

2-2、單獨的位置、旋轉(zhuǎn)、縮放的賦值粘貼功能

效果圖:
在這里插入圖片描述
示例代碼:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEngine;public class ButtonHandler
{public string showDescription;public Action onClickCallBack;public ButtonHandler(string showDescription, Action onClickCallBack){this.showDescription = showDescription;this.onClickCallBack = onClickCallBack;}
}
[CanEditMultipleObjects]
[CustomEditor(typeof(Transform))]
public class TransformEditor2 : Editor
{static public Editor instance;private bool extensionBool;ButtonHandler[] buttonHandlerArray;//當(dāng)前的本地坐標(biāo)SerializedProperty mPos;//當(dāng)前的本地旋轉(zhuǎn)SerializedProperty mRot;//當(dāng)前的本地縮放SerializedProperty mScale;private void OnEnable(){instance = this;var editorType = Assembly.GetAssembly(typeof(Editor)).GetTypes().FirstOrDefault(m => m.Name == "TransformInspector");instance = CreateEditor(targets, editorType);if (this){try{var so = serializedObject;mPos = so.FindProperty("m_LocalPosition");mRot = so.FindProperty("m_LocalRotation");mScale = so.FindProperty("m_LocalScale");}catch { }}extensionBool = EditorPrefs.GetBool("extensionBool");buttonHandlerArray = new ButtonHandler[9];buttonHandlerArray[0] = new ButtonHandler("Position Copy", () =>{var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();// x,y,zs.Append(mPos.vector3Value.x.ToString() + "," + mPos.vector3Value.y.ToString() + "," + mPos.vector3Value.z.ToString());//添加到剪貼板UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();});buttonHandlerArray[1] = new ButtonHandler("Position Paste", () =>{//把數(shù)值打印出來string s = UnityEngine.GUIUtility.systemCopyBuffer;try{mPos.vector3Value = ParseV3(s);}catch (System.Exception ex){Debug.LogError(ex);return;}});buttonHandlerArray[2] = new ButtonHandler("Position Reset", () =>{mPos.vector3Value = Vector3.zero;});buttonHandlerArray[3] = new ButtonHandler("Rotation Copy", () =>{//把數(shù)值打印出來var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();s.Append(mRot.quaternionValue.eulerAngles.x + "," + mRot.quaternionValue.eulerAngles.y + "," + mRot.quaternionValue.eulerAngles.z);//添加到剪貼板UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();});buttonHandlerArray[4] = new ButtonHandler("Rotation Paste", () =>{//把數(shù)值打印出來Debug.Log(UnityEngine.GUIUtility.systemCopyBuffer);string s = UnityEngine.GUIUtility.systemCopyBuffer;try{mRot.quaternionValue = Quaternion.Euler(ParseV3(s));}catch (System.Exception ex){Debug.LogError(ex);return;}});buttonHandlerArray[5] = new ButtonHandler("Rotation Reset", () =>{mRot.quaternionValue = Quaternion.identity;});buttonHandlerArray[6] = new ButtonHandler("Scale Copy", () =>{//把數(shù)值打印出來var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();s.Append(mScale.vector3Value.x.ToString() + "," + mScale.vector3Value.y.ToString() + "," + mScale.vector3Value.z.ToString());//添加到剪貼板UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();});buttonHandlerArray[7] = new ButtonHandler("Scale Paste", () =>{//把數(shù)值打印出來Debug.Log(UnityEngine.GUIUtility.systemCopyBuffer);string s = UnityEngine.GUIUtility.systemCopyBuffer;try{mScale.vector3Value = ParseV3(s);}catch (System.Exception ex){Debug.LogError(ex);return;}});buttonHandlerArray[8] = new ButtonHandler("Scale Reset", () =>{mScale.vector3Value = Vector3.one;});}private void OnDisable(){EditorPrefs.SetBool("extensionBool", extensionBool);}public override void OnInspectorGUI(){instance.OnInspectorGUI();GUI.color = Color.cyan;extensionBool = EditorGUILayout.Foldout(extensionBool, "拓展功能");if (extensionBool){EditorGUILayout.BeginHorizontal();for (int i = 0; i < buttonHandlerArray.Length; i++){ButtonHandler temporaryButtonHandler = buttonHandlerArray[i];if (GUILayout.Button(temporaryButtonHandler.showDescription, "toolbarbutton"))//, GUILayout.MaxWidth(150){temporaryButtonHandler.onClickCallBack();}GUILayout.Space(5);if ((i + 1) % 3 == 0 || i + 1 == buttonHandlerArray.Length){EditorGUILayout.EndHorizontal();if (i + 1 < buttonHandlerArray.Length){GUILayout.Space(5);EditorGUILayout.BeginHorizontal();}}}}GUI.color = Color.white;serializedObject.ApplyModifiedProperties();}Vector3 ParseV3(string strVector3){string[] s = strVector3.Split(',');return new Vector3(float.Parse(s[0]), float.Parse(s[1]), float.Parse(s[2]));}
}

演示:
在這里插入圖片描述
這樣就實現(xiàn)了單獨的位置/旋轉(zhuǎn)/縮放復(fù)制/粘貼功能。

接下來,就實現(xiàn)單獨的位置/旋轉(zhuǎn)/縮放復(fù)制/粘貼功能以及位置/旋轉(zhuǎn)/縮放一起復(fù)制和粘貼功能。

以及,自定義文本拼接的功能。

2-3、自定義文本拼接的功能

效果圖:
在這里插入圖片描述

參考代碼:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEditor.AnimatedValues;
using UnityEngine;
using static UnityEditor.IMGUI.Controls.PrimitiveBoundsHandle;
using static UnityEngine.GraphicsBuffer;
using static UnityEngine.UI.Image;[CanEditMultipleObjects]
[CustomEditor(typeof(Transform))]
public class TransformEditor : Editor
{static public Editor instance;Transform m_Transform;private bool extensionBool;string axisName = "Local";bool isAxis = false;bool isDefined = false;string row1;string row2;string row3;string row4;//當(dāng)前的本地坐標(biāo)SerializedProperty mPos;//當(dāng)前的本地旋轉(zhuǎn)SerializedProperty mRot;//當(dāng)前的本地縮放SerializedProperty mScale;private void OnEnable(){instance = this;var editorType = Assembly.GetAssembly(typeof(Editor)).GetTypes().FirstOrDefault(m => m.Name == "TransformInspector");instance = CreateEditor(targets, editorType);isAxis = EditorPrefs.GetBool("isAxis");isDefined = EditorPrefs.GetBool("isDefined");m_Transform = this.target as Transform;if (this){try{var so = serializedObject;mPos = so.FindProperty("m_LocalPosition");mRot = so.FindProperty("m_LocalRotation");mScale = so.FindProperty("m_LocalScale");}catch { }}}private void OnDisable(){EditorPrefs.SetBool("extensionBool", extensionBool);EditorPrefs.SetBool("isDefined", isDefined);}public override void OnInspectorGUI(){instance.OnInspectorGUI();extensionBool = EditorPrefs.GetBool("extensionBool");extensionBool = EditorGUILayout.Foldout(extensionBool, "拓展功能");if (extensionBool){OnTopGUI();OnTransformGUI();OnPositionGUI();OnRotationGUI();OnScaleGUI();OnDefindGUI();}}void OnTopGUI(){EditorGUILayout.BeginHorizontal();GUILayout.Label("Name");if (GUILayout.Button("Local/Global")){isAxis = !isAxis;EditorPrefs.SetBool("isAxis", isAxis);}axisName = isAxis ? "Local" : "Global";GUILayout.Label("當(dāng)前坐標(biāo)軸:" + axisName);EditorGUILayout.EndHorizontal();}void OnTransformGUI(){EditorGUILayout.BeginHorizontal();GUILayout.Label("Transform");if (GUILayout.Button("Copy")){var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();s.Append("Transform_");if (isAxis){s.Append(FormatVe3(m_Transform.localPosition) + "_");s.Append(FormatVe3(m_Transform.localRotation.eulerAngles) + "_");s.Append(FormatVe3(m_Transform.localScale));}else{s.Append(FormatVe3(m_Transform.position) + "_");s.Append(FormatVe3(m_Transform.rotation.eulerAngles) + "_");s.Append(FormatVe3(m_Transform.localScale));}UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();}if (GUILayout.Button("Paste")){if (isDefined){Debug.LogError("不支持自定義文本!");UnityEngine.GUIUtility.systemCopyBuffer = "";return;}string s = UnityEngine.GUIUtility.systemCopyBuffer;string[] sArr = s.Split('_');if (sArr[0] != "Transform" || s == ""){Debug.LogError("未復(fù)制Transform組件內(nèi)容!");return;}try{m_Transform.position = ParseV3(sArr[1]);m_Transform.rotation = Quaternion.Euler(ParseV3(sArr[2]));m_Transform.localScale = ParseV3(sArr[3]);}catch (System.Exception ex){Debug.LogError(ex);return;}}if (GUILayout.Button("Reset")){m_Transform.position = Vector3.zero;m_Transform.rotation = Quaternion.identity;m_Transform.localScale = Vector3.one;}EditorGUILayout.EndHorizontal();}void OnPositionGUI(){EditorGUILayout.BeginHorizontal();GUILayout.Label("Position");if (GUILayout.Button("Copy")){var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();if (isAxis){s.Append(FormatVe3(m_Transform.localPosition));}else{s.Append(FormatVe3(m_Transform.position));}UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();Debug.Log(s);}if (GUILayout.Button("Paste")){if (isDefined){Debug.LogError("不支持自定義文本!");UnityEngine.GUIUtility.systemCopyBuffer = "";return;}string s = UnityEngine.GUIUtility.systemCopyBuffer;if (s == ""){Debug.LogError("未復(fù)制Position內(nèi)容!");return;}try{m_Transform.position = ParseV3(s);}catch (System.Exception ex){Debug.LogError(ex);return;}}if (GUILayout.Button("Reset")){m_Transform.position = Vector3.zero;}EditorGUILayout.EndHorizontal();}void OnRotationGUI(){EditorGUILayout.BeginHorizontal();GUILayout.Label("Rotation");if (GUILayout.Button("Copy")){var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();if (isAxis){s.Append(FormatVe3(m_Transform.localRotation.eulerAngles));}else{s.Append(FormatVe3(m_Transform.rotation.eulerAngles));}UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();}if (GUILayout.Button("Paste")){if (isDefined){Debug.LogError("不支持自定義文本!");UnityEngine.GUIUtility.systemCopyBuffer = "";return;}string s = UnityEngine.GUIUtility.systemCopyBuffer;if (s == ""){Debug.LogError("未復(fù)制Rotation內(nèi)容!");return;}try{m_Transform.rotation = Quaternion.Euler(ParseV3(s));}catch (System.Exception ex){Debug.LogError(ex);return;}}if (GUILayout.Button("Reset")){m_Transform.rotation = Quaternion.identity;}EditorGUILayout.EndHorizontal();}void OnScaleGUI(){EditorGUILayout.BeginHorizontal();GUILayout.Label("Scale");if (GUILayout.Button("Copy")){var select = Selection.activeGameObject;if (select == null)return;StringBuilder s = new StringBuilder();s.Append(FormatVe3(m_Transform.localScale));UnityEngine.GUIUtility.systemCopyBuffer = s.ToString();}if (GUILayout.Button("Paste")){if (isDefined){Debug.LogError("不支持自定義文本!");UnityEngine.GUIUtility.systemCopyBuffer = "";return;}string s = UnityEngine.GUIUtility.systemCopyBuffer;if (s == ""){Debug.LogError("未復(fù)制Scale內(nèi)容!");return;}try{m_Transform.localScale = ParseV3(s);}catch (System.Exception ex){Debug.LogError(ex);return;}}if (GUILayout.Button("Reset")){m_Transform.localScale = Vector3.one;}EditorGUILayout.EndHorizontal();}void OnDefindGUI(){GUILayout.BeginVertical();isDefined = GUILayout.Toggle(isDefined, "啟用自定義文本拼接");if (isDefined){GUILayout.BeginHorizontal();row1 = GUILayout.TextField(row1);GUILayout.Label("X");row2 = GUILayout.TextField(row2);GUILayout.Label("Y");row3 = GUILayout.TextField(row3);GUILayout.Label("Z");row4 = GUILayout.TextField(row4);GUILayout.EndHorizontal();}GUILayout.EndVertical();}// x,y,zVector3 ParseV3(string strVector3){string[] s = strVector3.Split(',');return new Vector3(float.Parse(s[0]), float.Parse(s[1]), float.Parse(s[2]));}// x,y,zstring FormatVe3(Vector3 ve3){string str;if (!isDefined){str = ve3.x + "," + ve3.y + "," + ve3.z;}else{str = row1 + ve3.x + row2 + ve3.y + row3 + ve3.z + row4;}return str;}
}

三、后記

如果覺得本篇文章有用別忘了點個關(guān)注,關(guān)注不迷路,持續(xù)分享更多Unity干貨文章。


你的點贊就是對博主的支持,有問題記得留言:

博主主頁有聯(lián)系方式。

博主還有跟多寶藏文章等待你的發(fā)掘哦:

專欄方向簡介
Unity3D開發(fā)小游戲小游戲開發(fā)教程分享一些使用Unity3D引擎開發(fā)的小游戲,分享一些制作小游戲的教程。
Unity3D從入門到進(jìn)階入門從自學(xué)Unity中獲取靈感,總結(jié)從零開始學(xué)習(xí)Unity的路線,有C#和Unity的知識。
Unity3D之UGUIUGUIUnity的UI系統(tǒng)UGUI全解析,從UGUI的基礎(chǔ)控件開始講起,然后將UGUI的原理,UGUI的使用全面教學(xué)。
Unity3D之讀取數(shù)據(jù)文件讀取使用Unity3D讀取txt文檔、json文檔、xml文檔、csv文檔、Excel文檔。
Unity3D之?dāng)?shù)據(jù)集合數(shù)據(jù)集合數(shù)組集合:數(shù)組、List、字典、堆棧、鏈表等數(shù)據(jù)集合知識分享。
Unity3D之VR/AR(虛擬仿真)開發(fā)虛擬仿真總結(jié)博主工作常見的虛擬仿真需求進(jìn)行案例講解。
Unity3D之插件插件主要分享在Unity開發(fā)中用到的一些插件使用方法,插件介紹等
Unity3D之日常開發(fā)日常記錄主要是博主日常開發(fā)中用到的,用到的方法技巧,開發(fā)思路,代碼分享等
Unity3D之日常BUG日常記錄記錄在使用Unity3D編輯器開發(fā)項目過程中,遇到的BUG和坑,讓后來人可以有些參考。
http://www.risenshineclean.com/news/53783.html

相關(guān)文章:

  • 中國紀(jì)檢監(jiān)察報網(wǎng)站關(guān)鍵詞查詢工具
  • 保險網(wǎng)站建設(shè)的總體目標(biāo)seo優(yōu)化交流
  • 中文域名可以做網(wǎng)站嗎企業(yè)官網(wǎng)搭建
  • dw設(shè)計做網(wǎng)站完整案例市場調(diào)研報告怎么寫范文
  • wordpress調(diào)用文章列表廣州營銷seo
  • 用c 做的網(wǎng)站怎么打開嗎百度seo關(guān)鍵詞優(yōu)化公司
  • 做網(wǎng)站加模塊今日熱榜
  • 網(wǎng)站做關(guān)鍵詞搜索要好多錢潮州seo建站
  • 招聘網(wǎng)絡(luò)營銷推廣人員seo搜索引擎優(yōu)化試題及答案
  • 做空調(diào)的網(wǎng)站蘭州模板網(wǎng)站seo價格
  • php網(wǎng)站開發(fā)技術(shù)廣州seo營銷培訓(xùn)
  • 天津網(wǎng)站建設(shè)索王道下拉怎么做網(wǎng)絡(luò)推廣最有效
  • 廣州網(wǎng)站優(yōu)化渠道北京網(wǎng)站搭建哪家好
  • 臨海建設(shè)局官方網(wǎng)站濟(jì)南網(wǎng)絡(luò)優(yōu)化哪家專業(yè)
  • 用html做網(wǎng)站搜索框可以投放廣告的網(wǎng)站
  • 鹽山網(wǎng)站開發(fā)百度競價怎么做開戶需要多少錢
  • 微信公眾號可以做幾個微網(wǎng)站嗎公眾號開發(fā)網(wǎng)站公司
  • 西安誰家做網(wǎng)站seo營銷培訓(xùn)
  • 云南住房和建設(shè)廳網(wǎng)站首頁小程序推廣的十種方式
  • 男女做爰真人視頻免費網(wǎng)站網(wǎng)絡(luò)seo優(yōu)化推廣
  • 公司網(wǎng)站制作天強(qiáng)科技windows優(yōu)化大師和360哪個好
  • 個人網(wǎng)站做什么好北京做網(wǎng)站公司哪家好
  • 徐州有哪些做網(wǎng)站百度推廣
  • 做spa會所網(wǎng)站深圳網(wǎng)絡(luò)推廣收費標(biāo)準(zhǔn)
  • .net做網(wǎng)站用什么的多雅虎搜索
  • 專業(yè)的網(wǎng)站建設(shè)設(shè)計價格怎么做一個免費的網(wǎng)站
  • 制作網(wǎng)站必做步驟域名注冊
  • 專業(yè)公司網(wǎng)站設(shè)計企業(yè)seo網(wǎng)絡(luò)推廣知識
  • 慈溪做無痛同濟(jì)&網(wǎng)站福州今日頭條新聞
  • 音響網(wǎng)站模板免費下載網(wǎng)絡(luò)推廣外包要多少錢