首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摄像机切换脚本为8定向相机?

摄像机切换脚本为8定向相机?
EN

Stack Overflow用户
提问于 2022-05-18 06:05:28
回答 1查看 94关注 0票数 1

我对编码很陌生,并且正在努力找出我的相机交换脚本。我有8个Cinemachine虚拟相机定位在玩家周围45度增量围绕Y轴为每个方向(N,NE,E,SE,S,SW,W,NW)。我的计划是使用"Q“和"E”键通过每个摄像机来创建一个完整的旋转围绕玩家,但与固定的视角8相机。

我在国家大道和动画师里安装了我的8部相机。我希望"Q“在相机中循环,在玩家周围产生逆时针旋转,而"E”则是顺时针旋转。

[

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-18 07:51:42

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

Cinemachine状态驱动摄像机设置

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

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

切换摄像机脚本

最后,使用下面的代码,引用键来更改参数,您可以看到相机的变化。

代码语言:javascript
复制
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)

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中,并根据索引设置摄像机。

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72283929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档