如何實作轉向時的圖片變化
轉向之后脖子的轉折點和屁股的跟隨變化和頭的變化
還沒入門的
萌新一枚
uj5u.com熱心網友回復:
1.紀錄按下按鈕時頭的位置及方向,當身體到達頭的位置時跟著移動及旋轉2.假設有頭、身、尾,先用尾判斷身的方向,再用身判斷頭的方向
原因在于第一秒你從往上變往左時
頭一定會先改變位置,尾這時應該會到身、身在到頭,反過來會變成同時運作
uj5u.com熱心網友回復:
// 方向類
public class Dir
{
public Vector3 position;
public Vector3 dir;
}
// 貪吃蛇頭類
public class Head
{
public readonly List<Dir> dirs = new List<Dir>();
private Vector3 currentDir = Vector3.Zero;
public float Speed {get; set;} = 3.0f;
private void Start()
{
currentDir = tranform.forword;
}
private void Update()
{
if( Input.KeyDown( KeyCode.UP ))
currentDir = Vector3.UP;
else if( Input.KeyDown( KeyCode.Down ))
currentDir = Vector3.Down;
else if( Input.KeyDown( KeyCode.Left ))
currentDir = Vector3.Left;
else if( Input.KeyDown( KeyCode.Right ))
currentDir = Vector3.Right;
if( currentDir != tranform.forword )
{
tranform.forword = currentDir;
dirs.Add( new Dir( tranform.position, tranform.forword ));
}
tranform.position += tranform.forword * Speed * Time.delta;
}
}
// 貪吃蛇身體
public class Body
{
protected Head head = null;
private void Awake()
{
head = GameObject.Find<Head>();
}
private void Update()
{
Dir dir = head.Dirs[ head.Dirs.Length - 1 ];
if(( dir.position - tranform.position ).magnitude < 0.001f )
{
tranform.forword = dir.dir;
OnForwordChanged();
}
tranform.position += tranform.forword * head.Speed * Time.delta;
}
protected virtual void OnForwordChanged()
{
}
}
// 尾巴,繼承自身體
public class Tail : Body
{
protected override void OnForwordChanged()
{
head.Dirs.RemoveAt( head.Dirs.Length - 1 ];
}
}
上面的代碼分別放到頭、身體、尾巴的預制體上。另外處理一下吃到食物時變長,就是實體化一個身體預制體,追加到尾巴前面。
這段代碼只是提供思路,身體的代碼還可以再改改,改成追隨前一個身體的,把整個貪吃蛇做成鏈表結構。。。就更好了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23858.html
標籤:Unity3D
下一篇:網格模型分解成立方體
