国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程)

這篇具有很好參考價值的文章主要介紹了Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

在部分場景搭建中需要整齊擺放一些物品(如倉庫中的貨堆、貨架等),因為有交互的操作在單個模型上,每次總是手動拖動模型操作起來也是繁瑣和勞累。
在這背景下,我編寫了一個在運行或者編輯狀態(tài)下都可以進行一鍵排序模型的腳步。方便在場景搭建時,可以快速搭建這種有規(guī)律的模型;在運行時有模型排序功能需求時,能調用接口一鍵排序。

效果

X軸居中排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

X軸左對齊排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

XY軸左排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

XY軸居中排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

xyz軸居中排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

多重嵌套排序:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

多重嵌套YZ軸排序:

Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

實現(xiàn)

功能的設計是在腳步的Inspector上進行排序相關的參數(shù)設置,并提供一鍵排序的按鈕。點擊后子節(jié)點按配置要求進行位置修改。

配置內容

首先是排序的對齊方式(alignment),這里提供如下枚舉:

public enum RankAlign {
   Center =1,
   Left =2,
   Right = 3
}

Center為居中的方式,Left是以父節(jié)點的位置為左側(這里不是嚴格意義上的左,而是從坐標軸的0–正軸方向排序),Right與Left相反。

其它配置,主要就是三個軸系中的配置內容:

    [Header("x軸對齊方式")]
    public RankAlign rankXAlign = RankAlign.Center;
    [Header("y軸對齊方式")]
    public RankAlign rankYAlign = RankAlign.Center;
    [Header("z軸對齊方式")]
    public RankAlign rankZAlign = RankAlign.Center;

    [Header("啟用x軸排序)")]
    public bool isXAxis;

    [Header("啟用y軸排序)")]
    public bool isYAxis;

    [Header("啟用z軸排序)")]
    public bool isZAxis;

    [Header("x軸間距)")]
    public float XDis;

    [Header("y軸間距)")]
    public float YDis;

    [Header("z軸間距)")]
    public float ZDis;


    [Header("x軸默認值)")]
    public float XDef;

    [Header("y軸默認值)")]
    public float YDef;

    [Header("z軸默認值)")]
    public float ZDef;

其中 isXAxis、isYAxis和isZAxis是啟用對應軸上排序的開關。

完整的配置如圖:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

排序邏輯

再者就是排序處理:

    public void RankingChildren() {
        int total = transform.childCount;
        if (isXAxis)
            XMidIdx = GetMiddleIndex(total, rankXAlign);
        if (isYAxis)
            YMidIdx = GetMiddleIndex(total, rankYAlign);
        if (isZAxis)
            ZMidIdx = GetMiddleIndex(total, rankZAlign);
        for (int i = 0; i < total; i++)
            SetRankPos(transform.GetChild(i), i, total);
     }

這里的處理就是根據(jù)各個軸排序對齊方式找到中間點,根據(jù)這個軸向上的中間點和節(jié)點間距計算出對應軸上的位置,如果不啟用排序的則使用對應軸的默認值。

編輯器拓展

因為要使用編輯器的類Editor,所以要新建一個Editor文件夾放入編輯器拓展的腳本,或者在腳步中判斷是否為編輯器環(huán)境。否則無法打包。這里在Editor文件夾下新建一個ModelRankingEditor腳本:

[CustomEditor(typeof(ModelRanking))]
public class ModelRankingEditor : Editor
{
    // Start is called before the first frame update
    void Start()
    {
        
    }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        ModelRanking modelRanking = (ModelRanking)target;

        if (GUILayout.Button("排序節(jié)點", new GUILayoutOption[] { GUILayout.ExpandWidth(false) }))
        {
            modelRanking.RankingChildren();
        }
}
}

其處理方式就是重寫OnInspectorGUI函數(shù),繪制一個排序節(jié)點的按鈕,按鈕事件綁定RankingChildren() 函數(shù)。 還有一點要在編輯器未運行下可執(zhí)行排序,腳本上需要加上
[ExecuteInEditMode]。

測試場景

測試場景可以隨意搭建一下,基于SampleScene新建一個空節(jié)點,新增幾個Cube節(jié)點作為子節(jié)點:

Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

在排序節(jié)點上添加上排序腳本,進行簡單的配置后,點擊排序節(jié)點按鈕即可:
Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程),Unity3D,c#,Unity拓展,Unity3d源碼,Unity一鍵排序,Unity自定義編輯器

如果需要,在程序運行中進行排序,可以使用AddComponent()來添加組件,
添加后對其配置屬性進行簡單設置,以上步驟也可以預先添加設置好;然后調用==modelRanking.RankingChildren();==函數(shù)進行排序即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-799251.html

到了這里,關于Unity3d C#實現(xiàn)場景編輯/運行模式下3D模型XYZ軸混合一鍵排序功能(含源碼工程)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Unity3D教程:觸發(fā)器實現(xiàn)簡單的場景跳轉

    Unity3D教程:觸發(fā)器實現(xiàn)簡單的場景跳轉

    首先,需確保有一個想要跳轉的目標場景。在本案例中,目標場景是ending。 第一步:創(chuàng)建一個碰撞體,放置在需要的觸發(fā)場景跳轉的位置。 第二步:刪除多余的腳本,并且新建自己的腳本: 第三

    2024年02月12日
    瀏覽(24)
  • GameFrameWork框架(Unity3D)使用筆記(八) 實現(xiàn)場景加載進度條

    GameFrameWork框架(Unity3D)使用筆記(八) 實現(xiàn)場景加載進度條

    ? ? ? ? 游戲在轉換場景的時候,需要花費時間來加載相關的資源。而這個過程往往因為游戲場景的規(guī)模和復雜度以及玩家電腦配置的原因花費一小段時間(雖然這個項目里用不到)。 ? ? ? ? 所以,如果這一小段時間,畫面就卡在這里,啥也做不了,玩家也不知道啥時候能

    2024年02月02日
    瀏覽(25)
  • unity3d:asset store上C#代碼熱重載插件,不需要重運行,重新加載更新后函數(shù)

    unity3d:asset store上C#代碼熱重載插件,不需要重運行,重新加載更新后函數(shù)

    https://assetstore.unity.com/packages/tools/utilities/hot-reload-edit-code-without-compiling-250972?clickref=1011lwHg8abvutm_source=partnerizeutm_medium=affiliateutm_campaign=unity_affiliate#description ●方法1:通過導航到Unity菜單欄中的“窗口”打開熱重裝窗口,然后選擇“熱重裝”。 ●方法2:使用快捷鍵組合“Alt+Shift

    2024年02月02日
    瀏覽(25)
  • Unity3d 獲取場景中攝像頭視頻流,實現(xiàn)直播效果(無需代碼)

    Unity3d 獲取場景中攝像頭視頻流,實現(xiàn)直播效果(無需代碼)

    下面是具體操作流程: ? 1. 搭建服務器,選用github 一個開源的 node.js服務器。 下載地址GitHub - iizukanao/node-rtsp-rtmp-server: RTSP/RTMP/HTTP hybrid server,點擊克隆,選擇ZIP下載。? 2. 下載node.js( 官網鏈接 Node.js) ? 選擇下載最新版本,并根據(jù)提示一步步安裝即可。 3.搭建服務器。 找到

    2023年04月08日
    瀏覽(27)
  • Unity3D實現(xiàn)第一人稱移動,隨鼠標轉動視角+上樓梯(C#)

    Unity3D實現(xiàn)第一人稱移動,隨鼠標轉動視角+上樓梯(C#)

    第一人稱移動: 1、在層級面板創(chuàng)建一個Capsule,命名為Player,將層級面板中的相機拖到Player下方 2、重置Player和攝像機的Transform數(shù)值(方便調整攝像機在Player上的位置),然后調整攝像機在Player上的位置 大概將攝像機放到Player眼睛的位置即可。 3、創(chuàng)建一個腳本,命名為Came

    2024年02月13日
    瀏覽(60)
  • 【Unity3D編輯器開發(fā)】Unity3D中實現(xiàn)Transform快速復制粘貼【非常實用】

    【Unity3D編輯器開發(fā)】Unity3D中實現(xiàn)Transform快速復制粘貼【非常實用】

    推薦閱讀 CSDN主頁 GitHub開源地址 Unity3D插件分享 簡書地址 我的個人博客 大家好,我是佛系工程師 ☆恬靜的小魔龍☆ ,不定時更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。 在開發(fā)中,常常會遇到頻繁復制粘貼物體的坐標、旋轉、縮放的操作。 使用Unity自帶的組件復制粘貼比

    2024年02月07日
    瀏覽(104)
  • 【Unity3D編輯器開發(fā)】Unity3D中實現(xiàn)查看鍵盤對應KeyCode值面板【方便開發(fā)】

    【Unity3D編輯器開發(fā)】Unity3D中實現(xiàn)查看鍵盤對應KeyCode值面板【方便開發(fā)】

    推薦閱讀 CSDN主頁 GitHub開源地址 Unity3D插件分享 簡書地址 我的個人博客 大家好,我是佛系工程師 ☆恬靜的小魔龍☆ ,不定時更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。 在開發(fā)中,會遇到要使用監(jiān)控鍵盤輸入的KeyCode值來執(zhí)行代碼的情況。 比如說: 但是,如果是一些不常

    2024年02月08日
    瀏覽(93)
  • 【Unity3D】縮放、平移、旋轉場景

    【Unity3D】縮放、平移、旋轉場景

    1 前言 ? ? ? ? 場景縮放、平移、旋轉有兩種實現(xiàn)方案,一種是對場景中所有物體進行同步變換,另一種方案是對相機的位置和姿態(tài)進行變換。 ? ? ? ? 對于方案一,如果所有物體都在同一個根對象下(其子對象或孫子對象),那么只需要對根對象施加變換就可以實現(xiàn)場景變

    2023年04月22日
    瀏覽(98)
  • 【Unity3D】Unity3D 軟件安裝 ( 注冊賬號并下載 Unity Hub | 安裝 Unity Hub | 獲取個人版授權 | 中文環(huán)境設置 | 安裝 Unity3D 編輯器 )

    【Unity3D】Unity3D 軟件安裝 ( 注冊賬號并下載 Unity Hub | 安裝 Unity Hub | 獲取個人版授權 | 中文環(huán)境設置 | 安裝 Unity3D 編輯器 )

    Unity 官方網站 : 英文 : https://unity.com 中文 : https://unity.cn 進入 中文網站 https://unity.cn , 點擊右上角的 \\\" 下載 Unity \\\" 按鈕 ; 推薦下載 Unity3D 的長期支持版本 ; 點擊界面中的 \\\" 下載 Unity Hub \\\" 選項 ; 根據(jù)你的系統(tǒng) , 選擇對應的 Unity Hub , 我在 Windows 上開發(fā) , 因此選擇 \\\" Windows 下載 \\\"

    2024年01月25日
    瀏覽(120)
  • Unity3D-場景中3D物體添加點擊事件

    Unity3D-場景中3D物體添加點擊事件

    Unity3D - 場景中3D物體添加鼠標點擊事件 鼠標點擊3D物體觸發(fā),Unity從本質上來說有兩種:一種是通過事件(event)觸發(fā),一種是通過射線(ray)判斷穿過的物體觸發(fā)。這兩種觸發(fā)的原理是不同的,不論哪種觸發(fā)都必須滿足觸發(fā)的要求才可以,既然原理不同,觸發(fā)的要求也不一樣

    2024年02月08日
    瀏覽(101)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包