我是編碼新手,我想弄清楚我的相機交換腳本。對于每個方向(N、NE、E、SE、S、SW、W、NW),我有 8 個 Cinemachine 虛擬攝像機圍繞 Y 軸以 45 度增量定位在玩家周圍。我的計劃是使用“Q”和“E”鍵來轉換每個攝像機,以創建圍繞玩家的完整旋轉,但 8 個攝像機的視角是固定的。
我在 State Drive 和影片師中設定了 8 臺攝像機。我希望“Q”回圈通過攝像機以圍繞播放器創建逆時針旋轉,而“E”則順時針旋轉。
[

uj5u.com熱心網友回復:
如果你用過Cinemachine,你肯定很熟悉了State Driven Camera。此功能可以通過Animator. 例如,在從Cinemachine選單創建狀態驅動后,我將三個具有以下名稱的虛擬攝像機放入其中,并將每個攝像機調整到所需的角度。

Cinemachine 狀態驅動攝像機設定
在底部,您將看到該State Driver Camera組件,用于激活虛擬相機、創建影片師并將其放置在 Animated Target 中。此相機自動檢測影片師狀態并根據變化的狀態移動相機:

我如下所示設定影片師,并設定狀態名稱和引數以使其更容易。

切換相機腳本
最后,使用下面的代碼,參考按鍵改變引數,就可以看到攝像機的變化。
public Animator stateDrivenAnimator; // fill state driven animator here
public List<KeyCode> KeyCodes = new List<KeyCode>() // some keys for example
{
KeyCode.Q,
KeyCode.W,
KeyCode.E
};
public void Update()
{
KeyCodes.ForEach(k => { if (Input.GetKeyDown(k)) stateDrivenAnimator.SetTrigger(k.ToString()); });
}
順時針和逆時針旋轉
為此,最好在Index. 只定義一個Index引數就足夠了,而不是Triggers像影像一樣通過旋轉周期來調節每個狀態。
- (N == 0)
- (NE == 1)
- (E == 2)
- (SE == 3)
- (S == 4)
- (SW == 5)
- (W == 6)
- (凈重 == 7)

最后,底部代碼使用CW和CCW鍵在回圈中旋轉索引,而不是將鍵字母放在 中Trigger,并且根據索引設定相機。
public CinemachineStateDrivenCamera stateDriven; // Get state-drive here
public KeyCode CW;
public KeyCode CCW;
private int index;
public void Update()
{
if (!Input.GetKeyDown(CW) && !Input.GetKeyDown(CCW)) return;
var animator = stateDriven.m_AnimatedTarget;
var childCount = stateDriven.transform.childCount;
if (Input.GetKeyDown(CW)) index = index % childCount;
else if (Input.GetKeyDown(CCW)) index = (index == 0) ? childCount - 1 : --index;
animator.SetInteger("Index", index);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477496.html
