如何start/stop 相机的运动?
How to start/stop camera's movement?
我有两个摄像头:摄像头 #1 和摄像头 #2。
从场景一开始,Camera #1 就被启用并显示场景。一段时间后,我将更改为 Camera #2(启用它以便它可以显示场景)。
这是我的代码:
foreach(Camera c in GameObject.FindObjectsOfType(typeof(Camera)))
{
if ((c.name == "Camera #1") && (c.transform.position.x>30))
{
c.enabled = false;
foreach(Camera d in GameObject.FindObjectsOfType(typeof(Camera)))
{
if(d.name == "Camera #2")
{
d.enabled = true;
}
}
}
我可以在摄像机之间成功切换,但我有一个问题:不仅摄像机 #1,摄像机 #2 也从场景的开头开始移动。所以当我切换到 Camera #2 时,我可以看到 Camera #2 几乎完成了他的终点。
我只想在更改为 Camera #2 时才启动它。
如何start/stop Camera #2' 移动?
要么
如何将 Camera #2 的运动重置到起点?
(我正在使用 Camera Path Animator 资源。)
有几个可能的问题:
- Camera #2 从一开始就没有被禁用,所以它的运动会执行。通过在编辑器中禁用它来解决这个问题。
- Camera #2' Path Animator 未附加到 Camera #2。因此,即使 Camera #2 处于禁用状态,它也不会被禁用。通过将 Animator 放在 Camera #2 上或通过其他方式禁用它的移动来解决此问题。
- Camera #2 是 Camera #1 的子项,因此继承了 Camera #1 的平移。通过将 Camera #2 移出 Camera #1
来解决这个问题
我会考虑为整个上下文使用动画(如果可能)。看来你在制作某种电影动画。
将您的相机放在游戏对象下。那个人获取 Animator 并创建动画。
该动画将控制位置以及相机是否随时间启用。动画曲线和摄影表可以轻松高效地进行控制。除此之外,如果需要调用一些外部方法,也可以使用AnimationEvent。
http://docs.unity3d.com/Manual/class-AnimatorController.html
这是禁用 camerapathanimator 并停止 Camera #2 移动直到 Camera #1 到达特定坐标的代码。
- 创建新的游戏对象。
- 使用 Camera Path Animator 资产创建 2 个 Camerapaths
- 将两个相机路径的 "Play on start" 值设置为 TRUE
- 为游戏对象创建一个新的 C# 脚本。
将下面的代码Poipulate成void Update(){}
foreach(GameObject.FindObjectsOfType(typeof(Camera))) {
如果 ((c.name == "Main Camera")) {
如果 ((c.transform.position.z > -20)) {
c.enabled = 假;
foreach(GameObject.FindObjectsOfType(typeof(相机))中的相机d){
如果(d.name == "Main Camera (1)"){
foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) {
如果(e.name == "Main Camera Path (1)"){
e.enabled = 真;
d.enabled = 真;
}
}
}
}
} 别的 {
foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) {
如果(e.name == "Main Camera Path (1)"){
e.enabled = 假;
}
}
c.enabled = 真;
}
}
}
我有两个摄像头:摄像头 #1 和摄像头 #2。 从场景一开始,Camera #1 就被启用并显示场景。一段时间后,我将更改为 Camera #2(启用它以便它可以显示场景)。
这是我的代码:
foreach(Camera c in GameObject.FindObjectsOfType(typeof(Camera)))
{
if ((c.name == "Camera #1") && (c.transform.position.x>30))
{
c.enabled = false;
foreach(Camera d in GameObject.FindObjectsOfType(typeof(Camera)))
{
if(d.name == "Camera #2")
{
d.enabled = true;
}
}
}
我可以在摄像机之间成功切换,但我有一个问题:不仅摄像机 #1,摄像机 #2 也从场景的开头开始移动。所以当我切换到 Camera #2 时,我可以看到 Camera #2 几乎完成了他的终点。
我只想在更改为 Camera #2 时才启动它。
如何start/stop Camera #2' 移动? 要么 如何将 Camera #2 的运动重置到起点?
(我正在使用 Camera Path Animator 资源。)
有几个可能的问题:
- Camera #2 从一开始就没有被禁用,所以它的运动会执行。通过在编辑器中禁用它来解决这个问题。
- Camera #2' Path Animator 未附加到 Camera #2。因此,即使 Camera #2 处于禁用状态,它也不会被禁用。通过将 Animator 放在 Camera #2 上或通过其他方式禁用它的移动来解决此问题。
- Camera #2 是 Camera #1 的子项,因此继承了 Camera #1 的平移。通过将 Camera #2 移出 Camera #1 来解决这个问题
我会考虑为整个上下文使用动画(如果可能)。看来你在制作某种电影动画。
将您的相机放在游戏对象下。那个人获取 Animator 并创建动画。
该动画将控制位置以及相机是否随时间启用。动画曲线和摄影表可以轻松高效地进行控制。除此之外,如果需要调用一些外部方法,也可以使用AnimationEvent。
http://docs.unity3d.com/Manual/class-AnimatorController.html
这是禁用 camerapathanimator 并停止 Camera #2 移动直到 Camera #1 到达特定坐标的代码。
- 创建新的游戏对象。
- 使用 Camera Path Animator 资产创建 2 个 Camerapaths
- 将两个相机路径的 "Play on start" 值设置为 TRUE
- 为游戏对象创建一个新的 C# 脚本。
将下面的代码Poipulate成void Update(){}
foreach(GameObject.FindObjectsOfType(typeof(Camera))) { 如果 ((c.name == "Main Camera")) { 如果 ((c.transform.position.z > -20)) { c.enabled = 假; foreach(GameObject.FindObjectsOfType(typeof(相机))中的相机d){ 如果(d.name == "Main Camera (1)"){ foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) { 如果(e.name == "Main Camera Path (1)"){ e.enabled = 真; d.enabled = 真; } } } } } 别的 { foreach(CameraPathAnimator e in GameObject.FindObjectsOfType(typeof(CameraPathAnimator))) { 如果(e.name == "Main Camera Path (1)"){ e.enabled = 假; } } c.enabled = 真; } } }