1. 程式人生 > >使用Unity實現動態2D水效果

使用Unity實現動態2D水效果

http://forum.china.unity3d.com/thread-16044-1-1.html
在這片教程裡面我們將會用簡單的物理效果來模擬動態的2D水效果。我們將會使用Line Renderer,Mesh Renderer,觸發器(Trigger)和粒子來創造這個水效果。最終的的效果將會包含波浪和水花濺起的特效,你可以直接加入自己的遊戲中。你可以在文章的結尾下載此工程。當然,本文中使用的製作原理可以應用於任何遊戲引擎之中。

最終效果
本教程要實現的最終效果如下:


設定水管理器
第一步就是使用Unity的線段渲染器(Line Renderer)和一些節點來實現水浪的形狀。如下圖:



然後還要跟蹤所有節點的位置、速度及加速度。這些資訊使用陣列來儲存,在類的最上面新增以下程式碼:
[C#] 純文字檢視 複製程式碼 ?
float[] xpositions; float[] ypositions; float[] velocities; float[] accelerations; LineRenderer Body;
LineRenderer用來儲存所有節點及水體的輪廓。接下來使用網格來實現水體,還需建立遊戲物件來使用這些網格。新增以下程式碼:

[C#] 純文字檢視 複製程式碼 ?
GameObject[] meshobjects; Mesh[] meshes;
為了讓物體可以與水互動,還需為每個遊戲物件新增碰撞器:
[C#] 純文字檢視 複製程式碼 ?
GameObject[] colliders;
還要定義一些常量:
[C#] 純文字檢視 複製程式碼 ?
constfloat springconstant = 0.02f;
constfloat damping = 0.04f; constfloat spread = 0.05f; constfloat z = -1f;
前三個常量用來控制水流速度、衰減度及傳播速度,最後的z值用於控制水體的顯示層次,這裡設為-1表示會顯示在物件前面。大家也可根據自己的需求進行調整。

還要設定一些值:
[C#] 純文字檢視 複製程式碼 ?
floatbaseheight; floatleft; floatbottom;
這三個變數定義了水的維度。

還要定義一些可以在編輯器中修改的公共變數,首先是製作水波四濺效果所需的粒子系統:
[C#] 純文字檢視 複製程式碼 ?
publicGameObject splash:
接下來是用於Line Renderer的材質:
[C#] 純文字檢視 複製程式碼 ?