我对编码很陌生,并且正在努力找出我的相机交换脚本。我有8个Cinemachine虚拟相机定位在玩家周围45度增量围绕Y轴为每个方向(N,NE,E,SE,S,SW,W,NW)。我的计划是使用"Q“和"E”键通过每个摄像机来创建一个完整的旋转围绕玩家,但与固定的视角8相机。
我在国家大道和动画师里安装了我的8部相机。我希望"Q“在相机中循环,在玩家周围产生逆时针旋转,而"E”则是顺时针旋转。
[



发布于 2022-05-18 07:51:42
如果使用Cinemachine,您肯定熟悉State Driven Camera。此功能可以通过Animator切换虚拟相机。例如,在创建了一个从Cinemachine菜单驱动的状态之后,我在其中放置了三个虚拟摄像机,其中包含以下名称,并将每个摄像机调整到所需的角度。

Cinemachine状态驱动摄像机设置
在底部,您将看到State Driver Camera组件,以激活虚拟相机,创建一个动画并将其放置到动画目标中。该相机自动检测动画师状态,并根据变化的状态移动相机:

我设置动画师如下所示,并设置状态的名称和参数,以使它更容易。


切换摄像机脚本
最后,使用下面的代码,引用键来更改参数,您可以看到相机的变化。
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,并按照图像的顺序按旋转周期对每个状态进行条件。
H 122(S == 4)H 223H 124(SW == 5)<代码>H 225H 126(W == 6)H 227H 128(NW == 7)H 229F 230


最后,下面的代码使用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://stackoverflow.com/questions/72283929
复制相似问题