版本:unity 5.4.1 語言:C#
參考實戰核心技術的第七章,不過只分析了其中核心的代碼。
與之前的換裝核心有點像,但此次是直接新建一個對象,只替換material、mesh兩個,并沒有涉及到骨骼的添加。
下面來看看代碼:
Material mat = null; //殘影的材質float colorA = 1f; //殘影當前的透明度// Use this for initializationvoid Start (){ // 獲取對象的皮膚渲染 SkinnedMeshRenderer meshRenderer = gameObject.GetComponent<SkinnedMeshRenderer>(); // 烘培出當前的網格 Mesh mesh = new Mesh(); meshRenderer.BakeMesh(mesh); // 新建一個殘影 GameObject go = new GameObject(); go.hideFlags = HideFlags.HideAndDontSave; //在Hierarchy中不顯示,并保留到新場景中 // 添加MeshFilter、MeshRenderer的情況 //MeshFilter goMeshFilter = go.AddComponent<MeshFilter>(); //goMeshFilter.mesh = mesh; //MeshRenderer goMeshRenderer = go.AddComponent<MeshRenderer>(); //goMeshRenderer.material = meshRenderer.material; // 添加SkinnedMeshRenderer的情況 SkinnedMeshRenderer goSkinnedMeshRenderer = go.AddComponent<SkinnedMeshRenderer>(); goSkinnedMeshRenderer.material = meshRenderer.material; //添加材質 goSkinnedMeshRenderer.sharedMesh = mesh; //添加網格 // 將殘影放到原對象的上一格 go.transform.position = (gameObject.transform.position + new Vector3(0, 1f, 0)); go.transform.rotation = gameObject.transform.rotation; // 替換能夠透明顯示的Shader //mat = goMeshRenderer.material; mat = goSkinnedMeshRenderer.material; mat.shader = Shader.Find("JiuYinT/Toon/Basic Replace");} // Update is called once per framevoid Update (){ if (mat == null) return; // 漸變消失的效果 colorA -= Time.deltaTime; if (colorA <= 0f) colorA = 1f; Color col = mat.GetColor("_Color"); col.a = colorA; mat.SetColor("_Color", col);}我用了個球做測試,不過出現了一個問題:

編輯器中正常顯示,但下面的Game窗口下的顯示就。。

直接變全黑了,找了組里的美工詢問原因,估計是Shader的原因,換成Standard就正常了,老版本的Shader無法在新版本中使用啊。具體Shader是什么原因,我會過一段時間仔細研究一下Unity的光照、Shader系統。
新聞熱點
疑難解答