---恢復內容開始---
已經有很長一段時間沒做項目了上半年大多數時間都荒廢在王者榮耀,哈哈,S8賽季也上了王者,美滋滋
轉回正題,公司需要開個新項目,需要把原有的moba游戲,改成類似絕地求生那玩法
原有moba項目是用unity 做的,本人已經有很長一段時間沒接觸,頹廢哎~~,還好經過幾天努力基本熟悉了
絕地求生游戲 基本玩法就是把100個玩家放到一個荒島上,每過幾分鍾島上就會出現毒霧圈,然后慢慢縮小,
直到剩下最后一個玩家,就是最后冠軍,我目前就是需要實現毒霧圈功能
首先需要在游戲場景里面放置一個毒霧圈prefab,這個我是從原先項目里面暫時借用的美術資源,毒霧圈開始時候放置在(0,0)位置
初始化大小 UIEffectItem_Home_Scale = new Vector3(470.0f, 200.0f, 470.0f);//場均毒霧初始大小,
怎么計算出scale 大小呢,我通過以下代碼實現
在 void OnDrawGizmos() 里面放入以下代碼
// for hs
Vector3 center = Vector3.zero;
Gizmos.color = Color.yellow;
int r = 140;
for (int i = 0;i < 360;i++)
{
float x1 = center.x + r * Mathf.Cos(i * Mathf.PI / 180);
float z1 = center.z + r * Mathf.Sin(i * Mathf.PI / 180);
Vector3 pos1 = new Vector3(x1, 0, z1);
float x2 = center.x + r * Mathf.Cos((i + 1) * Mathf.PI / 180);
float z2 = center.z + r * Mathf.Sin((i + 1) * Mathf.PI / 180);
Vector3 pos2 = new Vector3(x2, 0, z2);
Gizmos.DrawLine(pos1, pos2);
}
在場景里面畫出毒霧圈(黃色線條),逐步調整 毒霧圈scale場景,得出 縮放比例(470.0f, 200.0f, 470.0f);
放置好毒霧圈后,還需要顯示在小地圖上面,原本設想也可以在場景里面放置一個圓圈prefab
但是碰到一個問題,就是縮放時候會出現圓圈的邊緣同時放大,十分困擾,於是問百度說可以用shader畫出來
效果下圖,只要設置好畫的原點和半徑就可以了
下面就是畫圓圈的關鍵shader代碼
bool circle(vec2 pos, vec2 center, float radius, float3 color, float antialias) {
//float d = length(pos - center) - radius;
//float t = smoothstep(0, antialias, d);
//return vec4(color, 1.0 - t);
if (abs(length(pos - center) - radius) < 2)
{
// In the circle
//return vec4(color, 1.0);
return true;
}
else
{
//return vec4(0, 0, 0, 0);
return false;
}
}
shader學習參考 http://blog.csdn.net/candycat1992/article/details/44039077 多謝這個博主 寫得簡單明了
大概學習1天也能基本明白shader怎么寫了
寫好shader后,新建一個material 命名為circle.mat 再把shader 拖進入circle.mat
在場景里面建立一個gameobject 加入image 組件,把circle.mat拖入image組件的material里面。
UnityEngine.UI.Image image = UIBattleManager.Self.duwucircle.GetComponent<UnityEngine.UI.Image>();
image.material.SetVector("_safeParameters", new Vector4(center.x, center.y, safe_r * getmapscale(), 10));
代碼里面這樣就可以控制shader參數(也是問百度才知道這樣寫的)
好了,幾個關鍵步驟都寫完了,剩下需要補齊 坐標移動,坐標轉動的代碼需要讀者自己去動手好了
資料參考
http://blog.csdn.net/candycat1992/article/details/44039077
http://blog.csdn.net/candycat1992/article/details/44244549