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

Unity場景物體動(dòng)態(tài)合批

這篇具有很好參考價(jià)值的文章主要介紹了Unity場景物體動(dòng)態(tài)合批。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1)Unity場景物體動(dòng)態(tài)合批
?2)Unity內(nèi)置音頻Android平臺(tái)播放延遲問題
3)對(duì)Unity Package中的Shader打包避免冗余的方案
4)UnityEditor PropertyField并排顯示錯(cuò)誤


這是第307篇UWA技術(shù)知識(shí)分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關(guān)的問題,建議閱讀時(shí)間10分鐘,認(rèn)真讀完必有收獲。

UWA 問答社區(qū):answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)

Rendering

Q1:問題1:為了能使場景中物體合批(同材質(zhì)球),場景在制作的時(shí)候相同的預(yù)制體放在了一起,但是FrameDebug看到的卻是亂序。請(qǐng)問在這個(gè)Frame里的順序是如何定義才能達(dá)到相同的合批?也就是如何能最少化的Objects have different materials?

Unity場景物體動(dòng)態(tài)合批

Unity場景物體動(dòng)態(tài)合批

問題2:在FrameDebug上下排列且相同物體,依然沒有合批。給出的原因是“Objects are lightmapped”。網(wǎng)上給出的解釋是使用了不同的光照貼圖(這里是一樣的),或在相同的光照貼圖中由不同的光照貼圖UV轉(zhuǎn)換關(guān)系。這個(gè)轉(zhuǎn)換關(guān)系是什么意思?是UV對(duì)應(yīng)的Offset幾個(gè)參數(shù)必須要一樣么?但是物體在不同的位置,理論上一定會(huì)不一樣。請(qǐng)問這個(gè)要怎么解決?目前場景中物體占用了120個(gè)DrawCall,想盡可能優(yōu)化。

Unity場景物體動(dòng)態(tài)合批

A:第一個(gè)問題,針對(duì)不透明物體,Unity默認(rèn)由近往遠(yuǎn)繪制(離相機(jī)的距離),所以如果想要相同的材質(zhì)球是連續(xù)繪制的,可以通過調(diào)整RenderQueue來強(qiáng)行連續(xù)繪制,不過可能會(huì)導(dǎo)致渲染效果不符合預(yù)期(遮擋關(guān)系錯(cuò)亂),另外的壞處是會(huì)破壞Early-Z的功能,尤其在沒有HSR功能的低端機(jī)上,Overdraw會(huì)造成高復(fù)雜度的Shader帶來的GPU高壓力,所以需要權(quán)衡CPU提交Batch的耗時(shí)和GPU的壓力。

第二個(gè)問題,同類型材質(zhì)球(Shader一樣,變體也一樣),如果Lightmap index不一樣(也就是Lightmap不一樣),肯定是不能合批的(SRP Batcher除外,SRP Batch無視材質(zhì)球,只要Shader和變體一樣就可以)。在Lightmap相同的情況下,如果對(duì)應(yīng)的unity_LightmapST不一樣,也是不能合批的。這里有兩種方法解決,一種是用Static Batching,這樣會(huì)讓unity_LightmapST變成同一種,具體的UV會(huì)變成頂點(diǎn)數(shù)據(jù)(本來子Mesh的UV都是(0,1)的,合并Combined Mesh后會(huì)變成類似于(0.3,0.5)這樣的區(qū)間),就是說頂點(diǎn)里面的UV本來存儲(chǔ)的是Local空間的,變成Combined Mesh后,合體的Mesh數(shù)據(jù)里面存儲(chǔ)的是World空間的,這樣外在的unity_LightmapST對(duì)于不同的子Mesh就會(huì)變成共用的(1,1,0,0)這樣的共同屬性,也就可以合批了。另外一種是開啟GPU Instancing,這樣unity_LightmapST會(huì)變成CBuffer,這樣也是會(huì)合批的。

如下圖所示,Cube1和Cube2在FrameDebugger的唯一區(qū)別就是unity_LightmapST不一樣,所以不開啟GPU Instancing和Static Batching的情況下,是不能合批的,雖然它們是相鄰的繪制順序,Lightmap也是相同的。另外兩個(gè)Cube(1)和Cube分別用的Lightmap2和Lightmap0。

Unity場景物體動(dòng)態(tài)合批

Unity場景物體動(dòng)態(tài)合批

Unity場景物體動(dòng)態(tài)合批

開啟靜態(tài)合批后,中間的2個(gè)Cube合成了一個(gè)Batch,它們的unity_LightmapST變成了共同的(1,1,0,0),如下圖:

Unity場景物體動(dòng)態(tài)合批

材質(zhì)球勾選GPU Instancing后,在FrameDebugger面板里面,已經(jīng)看不到unity_LightmapST這個(gè)屬性了。這兩個(gè)Cube也是合成了一個(gè)Instanced Batch。如下圖:

Unity場景物體動(dòng)態(tài)合批

感謝Xuan@UWA問答社區(qū)提供了回答

Q2:對(duì)于第二個(gè)問題的解決方法。因?yàn)槲覀兪莿?dòng)態(tài)創(chuàng)建物體。所以無法用靜態(tài)合批。當(dāng)我嘗試使用GPU Instancing 后,批次幾乎沒變,一種是我們的不同的Mesh,使用同一個(gè)材質(zhì)球,無法合批;其次是同一個(gè)Mesh也無法合批。如下提示:

Unity場景物體動(dòng)態(tài)合批

另外依然還有“Objects are lightmaped”的提示,且已經(jīng)沒有Lightmap_ST,材質(zhì)球都已勾選GPU:

Unity場景物體動(dòng)態(tài)合批

還有Shader是有兩個(gè)PASS的。是否另一個(gè)PASS也需要加入GPU Instancing 的代碼?附Shader代碼:

Shader "WF/SceneObj"
{
    Properties
    {
        [NoScaleOffset]_MainTex("主貼圖 (RGBA)", 2D) = "white" {}
        [Space(20)]
        _OutlineWidth("描邊寬度", Range(0, 0.5)) = 0.018
        _OutlineColor("描邊顏色", Color) = (0, 0, 0, 1)
        [Space(20)]
        _EmissionMask("自發(fā)光遮罩 (G)", Range(0, 5)) = 1
        [HDR]_EmissionColor("自發(fā)光顏色", Color) = (1, 1, 1, 1)
        _Color("Color", Color) = (1, 1, 1, 1)
    }

        SubShader
        {

            Tags{ "RenderType" = "Opaque" "Queue" = "Geometry+1" }
            // lightmap
            Pass
            {
                Tags { "LightMode" = "ForwardBase" }

                CGPROGRAM
                #pragma multi_compile_fwdbase
                #pragma multi_compile_instancing
                #pragma vertex vert
                #pragma fragment frag

                #include "UnityCG.cginc"
                #include "Lighting.cginc"
                #include "AutoLight.cginc"
                #pragma multi_compile_fog
                #define USING_FOG (defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2))

            struct a2v
                {
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                    float2 texcoord : TEXCOORD0;
                    float3 uv1 : TEXCOORD1; // lightmap
                    UNITY_VERTEX_INPUT_INSTANCE_ID
                };

                struct v2f
                {
                    float4 pos : SV_POSITION;
                    float2 uv : TEXCOORD0;
                    float2 uv1 : TEXCOORD2;
                    half3 worldlight : TEXCOORD1;
#if USING_FOG
                        fixed fog : TEXCOORD3;
#endif
                    UNITY_VERTEX_OUTPUT_STEREO
                    UNITY_VERTEX_INPUT_INSTANCE_ID
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;

                float _EmissionMask;
                fixed4 _EmissionColor;

                UNITY_INSTANCING_BUFFER_START(Props)
                    UNITY_DEFINE_INSTANCED_PROP(float4, _Color)
                    UNITY_INSTANCING_BUFFER_END(Props)


                v2f vert(a2v v)
                {
                    v2f o;
                    UNITY_SETUP_INSTANCE_ID(v);
                    UNITY_TRANSFER_INSTANCE_ID(v, o);

                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                    // 
                    o.worldlight = UnityObjectToViewPos(v.normal);
                    o.uv1 = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;

                    // fog
#if USING_FOG
                    float3 eyePos = UnityObjectToViewPos(v.vertex);
                    float fogCoord = length(eyePos.xyz);  // radial fog distance
                    UNITY_CALC_FOG_FACTOR_RAW(fogCoord);
                    o.fog = saturate(unityFogFactor);
#endif

                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    UNITY_SETUP_INSTANCE_ID(i);
                    fixed4 originalCol = tex2D(_MainTex, i.uv) * UNITY_ACCESS_INSTANCED_PROP(Props, _Color);

                    ------------------------------漫反射------------------------------
                    //-----------------------------------自發(fā)光
                    //float emission = originalCol.a * _EmissionMask;
                    //自發(fā)光
                    //float emisstionValue = emission < 0.5 ? 0 : 1;
                    fixed3 emisstionCol = originalCol.rgb * _EmissionColor.rgb * _EmissionMask;
                    //
                    //疊加
                    fixed3 finnalCol = originalCol;
                    fixed4 col = (fixed4)1;
#if defined(LIGHTMAP_ON)
                    //
                    half4 bakedColorTex = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv1.xy);

                    col.rgb = DecodeLightmap(bakedColorTex);
#endif
                    finnalCol = lerp(finnalCol, emisstionCol, originalCol.a) * col.rgb;

                    // fog
#if USING_FOG
                    finnalCol.rgb = lerp(unity_FogColor.rgb, finnalCol.rgb, i.fog);
#endif

                    return fixed4(finnalCol, 1);
                }
                ENDCG
            }

            Pass
            {
                NAME "OUTLINE"
                Cull Front

                CGPROGRAM
                #pragma multi_compile_fog
                #pragma vertex vert
                #pragma fragment frag

                #include "UnityCG.cginc"

                struct a2v
                {
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                };

                struct v2f
                {
                    float4 pos : SV_POSITION;
                    UNITY_FOG_COORDS(0)
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                fixed4 _OutlineColor;
                float _OutlineWidth;
                v2f vert(a2v v)
                {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    float3 viewNormal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
                    float2 ndcNormal = normalize(TransformViewToProjection(viewNormal.xy)) * pow(o.pos.w, 0.6) * 2;
                    float4 nearUpperRight = mul(unity_CameraInvProjection, float4(1, 1, UNITY_NEAR_CLIP_VALUE, _ProjectionParams.y));
                    float aspect = abs(nearUpperRight.y / nearUpperRight.x);
                    ndcNormal.x *= aspect;
                    o.pos.xy += ndcNormal * _OutlineWidth * 0.1;
                    UNITY_TRANSFER_FOG(o,o.pos);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    fixed3 col = _OutlineColor.rgb ;
                    return fixed4(col, 0);
                }
                ENDCG
            }
        }

            Fallback "Diffuse"

A:動(dòng)態(tài)創(chuàng)建物體的靜態(tài)合批的方法可以參考StaticBatchingUtility.Combine的API,這是一項(xiàng)運(yùn)行時(shí)靜態(tài)合批的做法;其次如果使用了多個(gè)Pass的Shader,想要使用GPU Instancing進(jìn)行合批,每個(gè)Pass都要設(shè)置成GPU Instancing才能正常合批。

感謝宗卉軒@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
收集完Shader Variants后,URP/UberPost 變成雙份了,怎么刪掉? -- UWA問答 | 游戲開發(fā)者互動(dòng)問答社區(qū) | 侑虎科技


Audio

Q:最近遇到Unity使用內(nèi)置音頻方案在Android平臺(tái)音頻延遲問題,而且是有時(shí)候會(huì)延遲。不知道各位使用的是什么方案來解決這個(gè)問題?

A:安卓延遲比較大是比較正常的,特別是在一些低端機(jī)上。

可以先試試Unity內(nèi)置的延遲解決方案:ProjectSettings的Audio中的DSP Buffer Size設(shè)置為Best latency,然后短音效的AudioType改為Decomppress On Load。

如果無法解決 可以嘗試一下官方提供的插件:NativeAudio SDK

如果不想用Unity內(nèi)置的FMOD,可以嘗試一下以下方案:Wwise、Criware

感謝蕭小俊@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
收集完Shader Variants后,URP/UberPost 變成雙份了,怎么刪掉? -- UWA問答 | 游戲開發(fā)者互動(dòng)問答社區(qū) | 侑虎科技


AssetBundle

Q:收集完Shader Variants后,URP/UberPost變成雙份了,怎么刪掉?

Unity場景物體動(dòng)態(tài)合批

Unity場景物體動(dòng)態(tài)合批

A:這個(gè)問題我的判斷是UberPost沒有被指定AssetBundle,所以在打包SVC文件時(shí),增加了一個(gè)額外的引用。而此時(shí)SVC文件需要指定AssetBundle,就將其依賴的未指定AssetBundle文件額外添加了進(jìn)來。

這個(gè)問題的難點(diǎn)是:UberPost是在Packages下的,而Packages文件無法指定AssetBundle。

解決方案1:將URP放到工程中,而非Packages下,這樣就可以指定AssetBundle。
解決方案2:改用了可以修改AssetBundle關(guān)聯(lián)性的ScriptableBuildPipeline,手動(dòng)為UberPost指定打包到某個(gè)AssetBundle中,這樣打包系統(tǒng)檢測(cè)到UberPost已有AssetBundle,就不會(huì)重復(fù)打包了。

感謝小楓不會(huì)飛@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
收集完Shader Variants后,URP/UberPost 變成雙份了,怎么刪掉? -- UWA問答 | 游戲開發(fā)者互動(dòng)問答社區(qū) | 侑虎科技


Editor

Q:我在制作一個(gè)工具,用來編輯很多內(nèi)容,其中我有一個(gè)需求,就是在Editor窗口中去修改List的內(nèi)容,比如添加新的項(xiàng)、刪除和修改等。

我是用EditorGUILayout.PropertyField,效果如下:

Unity場景物體動(dòng)態(tài)合批

但是我需要在若干列中展示多個(gè)PropertyField,此時(shí)效果成了這樣子,可以明顯看到第二個(gè)列表的文本框短了一大截:

Unity場景物體動(dòng)態(tài)合批

如果是三個(gè)的話,根本就不顯示:

Unity場景物體動(dòng)態(tài)合批

我限制了前兩個(gè)的長度,然后拉長界面,可以發(fā)現(xiàn)其實(shí)他可以顯示,就是離得太遠(yuǎn)了:

Unity場景物體動(dòng)態(tài)合批

求問這種情況怎么解決?以下是源碼:

public class TestWindow : EditorWindow
    {

        [MenuItem("test2/open")]
        private static void Test()
        {
            var s_CurrentWindow = GetWindow<TestWindow>("My Tool");
            s_CurrentWindow.Show();

        }
        XmlNode node;
        XmlNode node2;
        XmlNode node3;
        SerializedObject serObj;
        SerializedProperty serPty;

        SerializedObject serObj2;
        SerializedProperty serPty2;

        SerializedObject serObj3;
        SerializedProperty serPty3;

        private void OnGUI()
        {
            using (var scope2 = new EditorGUILayout.HorizontalScope())
            {
                serObj.Update();
                serObj2.Update();
                serObj3.Update();
                EditorGUI.BeginChangeCheck();

                using (var scope = new EditorGUILayout.VerticalScope(GUILayout.Width(500)))
                {
                    //temp = EditorGUILayout.TextField("What: ", temp);
                    EditorGUILayout.PropertyField(serPty, true);
                }

                using (var scope = new EditorGUILayout.VerticalScope(GUILayout.Width(500)))
                {
                    //temp = EditorGUILayout.TextField("What: ", temp);
                    EditorGUILayout.PropertyField(serPty2, true);
                }

                using (var scope = new EditorGUILayout.VerticalScope())
                {

                    EditorGUILayout.PropertyField(serPty3, true, GUILayout.ExpandWidth(true));
                }

                if (EditorGUI.EndChangeCheck())
                {
                    serObj.ApplyModifiedProperties();
                    serObj2.ApplyModifiedProperties();
                    serObj3.ApplyModifiedProperties();
                }
            }
        }

        private void OnEnable()
        {
            //var titleRow = NewRow(
            //    new Label() { text = "Old" },
            //    new Label() { text = "new" }
            //    );
            //titleRow.name = "title-compare-box";
            //rootVisualElement.Add(titleRow);
            //rootVisualElement

            node = ScriptableObject.CreateInstance<XmlNode>();
            node2 = ScriptableObject.CreateInstance<XmlNode>();
            node3 = ScriptableObject.CreateInstance<XmlNode>();

            node.InnerTextList.Add("QwQ");
            node.CType = ContentType.List;
            node2.InnerTextList.Add("heiheihie");
            node2.CType = ContentType.List;
            node3.InnerTextList.Add("WWW");
            node3.CType = ContentType.List;

            serObj = new SerializedObject(node);
            serPty = serObj.FindProperty("InnerTextList");
            serObj2 = new SerializedObject(node2);
            serPty2 = serObj2.FindProperty("InnerTextList");
            serObj3 = new SerializedObject(node3);
            serPty3 = serObj3.FindProperty("InnerTextList");
        }
        private class XmlNode : ScriptableObject
        {
            public string Path { get; set; }
            public string Name { get; set; }
            public ContentType CType { get; set; }
            public Dictionary<string, string> AttributeDict { get; set; } = new Dictionary<string, string>();
            public List<string> InnerTextList = new List<string>();
            public string InnerText { get; set; }

            //public XmlNode(string path, string name, ContentType cType)
            //{
            //    Path = path;
            //    Name = name;
            //    CType = cType;
            //    AttributeDict = new Dictionary<string, string>();
            //    InnerTextList = new List<string>();
            //}
        }

        private enum ContentType
        {
            String, // 單行文本 InnerText
            List // 多行的內(nèi)容,用List存
        }
    }

A1:建議直接使用Odin插件。

感謝張迪@UWA問答社區(qū)提供了回答

A2:這種List在Editor下可以使用ReorderableList,供EditorGUI使用,表現(xiàn)看起來跟你的需求差不多。

Unity場景物體動(dòng)態(tài)合批

Unity場景物體動(dòng)態(tài)合批

感謝范世青@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
收集完Shader Variants后,URP/UberPost 變成雙份了,怎么刪掉? -- UWA問答 | 游戲開發(fā)者互動(dòng)問答社區(qū) | 侑虎科技

封面圖來源于網(wǎng)絡(luò)


今天的分享就到這里。當(dāng)然,生有涯而知無涯。在漫漫的開發(fā)周期中,您看到的這些問題也許都只是冰山一角,我們?cè)缫言赨WA問答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來探索和分享。歡迎熱愛進(jìn)步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官網(wǎng):www.uwa4d.com
官方技術(shù)博客:blog.uwa4d.com
官方問答社區(qū):answer.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
官方技術(shù)QQ群:793972859(原群已滿員)
文章來源地址http://www.zghlxwxcb.cn/news/detail-476929.html

到了這里,關(guān)于Unity場景物體動(dòng)態(tài)合批的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • unity點(diǎn)擊場景內(nèi)物體進(jìn)行交互

    unity點(diǎn)擊場景內(nèi)物體進(jìn)行交互

    提示:本文展示點(diǎn)擊事件,另有其他自行研究 前言 一、原理 二、使用步驟 1.使用前提 2.使用腳本 總結(jié) 很多情況下我們需要對(duì)場景內(nèi)的物體進(jìn)行交互,今天我們采用射線檢測(cè)的方法進(jìn)行點(diǎn)擊。 例如:點(diǎn)擊場景內(nèi)的Cube 進(jìn)行開始旋轉(zhuǎn) 提示:以下是本篇文章正文內(nèi)容,下面案例

    2024年02月11日
    瀏覽(23)
  • Unity中查找場景中物體的方法

    Unity中查找場景中物體的方法

    unity中查找物體的方法一共分為四種 在代碼中定義后直接拖拽上去即可識(shí)別 第一步先設(shè)置Tag:(可以通過Add Tag添加自己需要的標(biāo)簽) ps:本人在校大學(xué)生一枚,單純寫自己學(xué)習(xí)unity的經(jīng)驗(yàn)分享,文章內(nèi)容如有錯(cuò)誤,希望各位指正!????????

    2024年02月11日
    瀏覽(35)
  • 筆記:Unity多相機(jī)場景下,物體顯示常用設(shè)置

    1、主相機(jī):MainCamera; 2、子相機(jī):ClippingCamera、FieldViewCamera、UICamera: 注:為了減少干擾 每個(gè)子相機(jī)僅顯示特定物體,不和主相機(jī)同時(shí)渲染; 每個(gè)物體也僅被唯一的相機(jī)渲染; 3、把子相機(jī)顯示內(nèi)容按不同先后順序渲染到主相機(jī)里方法: (1)將子相機(jī)添加進(jìn)MainCamera的Stack模

    2023年04月08日
    瀏覽(30)
  • Unity3D-場景中3D物體添加點(diǎn)擊事件

    Unity3D-場景中3D物體添加點(diǎn)擊事件

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

    2024年02月08日
    瀏覽(101)
  • 使用DoTween插件在Unity中實(shí)現(xiàn)物體或場景的振動(dòng)效果

    在Unity中,我們可以使用DoTween插件來實(shí)現(xiàn)物體或場景的振動(dòng)效果。DoTween是一個(gè)功能強(qiáng)大的插件,可以簡化動(dòng)畫的創(chuàng)建和管理過程,并提供了豐富的插值和緩動(dòng)函數(shù),使得振動(dòng)效果的實(shí)現(xiàn)變得更加容易。 首先,我們需要確保已經(jīng)安裝了DoTween插件,并將其導(dǎo)入到Unity項(xiàng)目中。接

    2024年04月17日
    瀏覽(95)
  • unity中:從主場景切換到另一個(gè)子場景后,子場景里的3D物體都變黑,單獨(dú)播放該場景,是正常的

    從主場景切換到另一個(gè)子場景后,子場景里的3D物體都變黑,UI是正常的,可以看見,單獨(dú)播放該場景,是正常的。 這種情況通常是由于Unity的光照系統(tǒng)和場景之間的不兼容性導(dǎo)致的。當(dāng)你從一個(gè)場景切換到另一個(gè)場景時(shí),Unity會(huì)自動(dòng)卸載舊場景中的所有對(duì)象和光照信息,并加

    2023年04月20日
    瀏覽(16)
  • unity給子物體動(dòng)態(tài)添加boxcollider(碰撞盒)

    unity給子物體動(dòng)態(tài)添加boxcollider(碰撞盒)

    在工作中遇到過給物體拍照截圖的功能,由于物體是動(dòng)態(tài)加載并且大小不一,但是要求拍的照片正好被物體填充,因此需要?jiǎng)討B(tài)計(jì)算物體大小,從而進(jìn)行調(diào)整,這種方法也可以進(jìn)行相機(jī)檢測(cè)物體是否在視野內(nèi)。使用方法非常簡單,只需要將要計(jì)算的物體放到空物體的子物體下

    2024年02月11日
    瀏覽(28)
  • unity NGO 代碼教程:網(wǎng)絡(luò)上動(dòng)態(tài)生成物體

    unity NGO 代碼教程:網(wǎng)絡(luò)上動(dòng)態(tài)生成物體

    生成一個(gè)網(wǎng)絡(luò)對(duì)象有多種辦法,但始終 只能由Server/Host生成/銷毀 必須有network? object組件 要在NetworkManager中的NetworkPrefebList中注冊(cè) 建議先看完第一章:unity netcode for gameobject(NGO)邏輯代碼教程-CSDN博客 ?簡單的Debug程序: 生成 銷毀 注意Despawn會(huì)默認(rèn)銷毀對(duì)象 ,可以理解為在其后調(diào)

    2024年02月02日
    瀏覽(16)
  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 場景中添加 FBX 模型 | 3D 物體渲染 | 3D 物體材質(zhì)設(shè)置 )

    【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 場景中添加 FBX 模型 | 3D 物體渲染 | 3D 物體材質(zhì)設(shè)置 )

    Unity 中使用的 3D 模型格式為 FBX , 使用如下建模軟件 可制作該類型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 將 3D 模型導(dǎo)出為 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目錄 下 , 創(chuàng)建一個(gè)模型目錄 Models , 將 模型文件直接從文件系統(tǒng)中拖到該目錄中

    2023年04月15日
    瀏覽(116)
  • unity 性能優(yōu)化之合批和剔除

    unity 性能優(yōu)化之合批和剔除

    批次對(duì)渲染的性能影響是比較大的,批次過多會(huì)導(dǎo)致cpu提交的次數(shù)過多,導(dǎo)致每幀渲染時(shí)間過長,所以我們需要對(duì)其優(yōu)化,減少Bathches數(shù)量和SetPassCall次數(shù)。 批次合并的方法有多種,下面一一列出: 將相同材質(zhì)的Mesh,合并為一個(gè)新的Mesh,這樣一次渲染,最方便調(diào)節(jié),雖然現(xiàn)

    2024年02月15日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包