今天,跟隊長一起將我之前做的怪物系統與他自己做的人物行為、技能系統整合到一起,
但是我由于第一次做怪物AI,所以整體并不是很熟練,導致整合程序中耦合問題挺大的= =…
甚至有一些腳本名稱重合導致隊長那邊的系統冒出了挺多的報錯,
下午隊長就跟我開騰訊會議,分享螢屏讓我把一個一個怪物設計邏輯講清楚(其實我也寫了檔案的,但是對著代碼講或許更清晰)
然后因為耦合大的問題,我們重新把代碼里的功能重新復制進去,還好每一只怪物地代碼不多,所以這也解耦就還好,也蠻快的,
首先是一只設定是繞著平臺不斷行走地“壁虎精”,無攻擊狀態,玩家觸碰則受傷,
它的主要邏輯最簡單,就是設定4個點,調好角度引數,搭上影片,寫好行走代碼,
public class EasyMons : Enemy
{
public float moveSpeed;
public GameObject[] wayPoints;
int nextWaypoint = 1;
float distToPoint;
void Update()
{
Move();
}
void Move()
{
//計算兩點之間的距離
distToPoint = Vector2.Distance(transform.position,
wayPoints[nextWaypoint].transform.position);
transform.position = Vector2.MoveTowards(transform.position,
wayPoints[nextWaypoint].transform.position,moveSpeed*Time.deltaTime);
if (distToPoint < 0.2f)
{
TakeTurn();
}
//轉向
void TakeTurn()
{
Vector3 currRot = transform.eulerAngles;
currRot.z += wayPoints[nextWaypoint].transform.eulerAngles.z;
transform.eulerAngles = currRot;
ChooseNextWaypoint();
}
//選擇下一個點
void ChooseNextWaypoint()
{
nextWaypoint++;
if (nextWaypoint == wayPoints.Length)
{
nextWaypoint = 0;
}
}
}
}
運行之后我們感覺轉向的地方有點生硬了,試圖優化,
首先隊長考慮了能不能使用【插值】的方法解決,然后搜了一下unity的檔案,查用法(我們都是第一次做游戲)
確實是可以的,然后就有了下面的優化措施:(雖然好像有點繁瑣hhh不過我們只想優化出效果)
void TakeTurn()
{
targetRotZ = wayPoints[nextWaypoint].transform.eulerAngles.z;
if (Math.Abs(transform.eulerAngles.z - targetRotZ) > 0.1f)
{
float curZ = transform.eulerAngles.z + 90 / (50 * rotationTime);
transform.eularAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, curZ);
}
if (Math.Abs(transform.eulerAngles.z - targetRotZ) < 0.1f)
ChooseNextWaypoint();
}
優化之后,壁虎精在轉角處的轉向確實更順滑了許多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325841.html
標籤:其他
上一篇:組合博弈入門(Simple Game Theory)
下一篇:Python:數字游戲
