我不太確定我是否爲該問題選擇正確的標題,隨意編輯它如果您發現它具有誤導性。將方向應用到當前變換位置
我正在開發一個涉及音樂作爲遊戲玩法核心的動作遊戲。它包含一組移動到幾個方向的實體(遊戲對象);頂部,右側,左側,底部和對角線移動(例如:左上角,右上角,左下角等)。
要確定這些實體的位置,需要計算一個涉及音樂節奏和實體本身的幾個屬性的值,我可以在Unity中生成它。
我用下面的函數來確定的變換實體的位置:
private Vector3 _position;
private void DeterminePosition(float offset)
{
// In actual code, the _position is initialized under Start() method
// But for this simplification sake, I'll just put it here
_position = _position == null ? new Vector3(0, 0, 1f) : _position;
if (Direction == Direction.Up || Direction == Direction.RightUp || Direction == Direction.LeftUp)
{
_position.y = offset;
}
if (Direction == Direction.Down || Direction == Direction.RightDown || Direction == Direction.LeftDown)
{
_position.y = -offset;
}
if (Direction == Direction.Left || Direction == Direction.LeftDown || Direction == Direction.LeftUp)
{
_position.x = -offset;
}
if (Direction == Direction.Right || Direction == Direction.RightDown || Direction == Direction.RightUp)
{
_position.x = offset;
}
transform.position = _position;
}
凡offset
的是,我在談論前的值。
該代碼的工作原理完美,但遊戲需要改變。 而不是固定方向(例如:向上,向右,向左,向下,向右向上,向左向下等),我們決定使用度數值作爲方向(0到360度)。
現在我不知道如何去阻止這件事。我試過使用下面的代碼,但它不起作用:
_position = new Vector3(offset, offset, transform.position.z);
// Where the direction is between 0 .. 360
transform.position = Quaternion.Euler(0, direction, 0) * _position;
其他人能想出解決方案嗎?
在此先感謝!
謝謝你的回答,這幾乎是正確的(它確實有效,但是..)我忘了提及遊戲競技場的形狀是方形而不是圓形。在我之前使用度的實現中,當實體進入角落(頂點,頂點等)時,變換位置與速度匹配(當音樂偏移量達到0時,實體撞擊到舞臺的邊界)。但是,當我更新與實施,實體似乎有點慢,音樂偏移量達到0,但實體甚至沒有擊中競技場的邊界。它有點將舞臺轉變爲圓形而不是方形。 – SirusDoma
但是,如果實體向前移動,則變換位置和音樂偏移似乎是匹配的(例如方向爲180度) – SirusDoma
以下圖片描述發生了什麼:http://imgur.com/e780D88或此:http: //imgur.com/tmLY4Pt – SirusDoma