找回密码
 注册帐号

扫一扫,访问微社区

外文翻译 在Unity中平滑相机轨道运动

11
回复
4493
查看
[ 复制链接 ]
排名
8650
昨日变化

35

主题

117

帖子

482

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
75030
好友
13
蛮牛币
1001
威望
0
注册时间
2015-2-16
在线时间
132 小时
最后登录
2019-7-20
2016-9-26 23:08:12 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 manew_JR 于 2016-9-27 09:51 编辑

在Unity中平滑相机做轨道运动

目标
给你一个关于在Unity中平滑相机做轨道运动的想法

最终效果如下:

1.gif

Step 1:轨道运动

什么是轨道运动呢?

相机是游戏中重要的一部分。

相机为体验者提供了游戏对象的可视化。

为了更好的演示,为游戏玩家提供一些用于增强可视化效果的功能。因此,相机的定位运动是必须的。

相机围绕游戏物体做轨道运动是相机运动的方式之一。

Step 2相机轨道运动的需求

在什么情况下需要相机轨道运动?

有一些基本功能,需要相机轨道运动。

例如,在一个赛车游戏中,玩家可以选择一辆车。当玩家进入一个车库去选择一辆车时,为了展示车的各个表面,而使用了多个相机,这不是一个很好的想法。因此,在这种情况下使用相机轨道运动是个非常棒的想法。相机围绕车子进行轨道运动,让相机一直聚焦着车子。

第二,行星围绕太阳旋转的情况下。

有一些效果和功能是必须需要相机轨道运动的。

但是,我们将根据上面的例子,制作一个简单的轨道运动。


Step 3:实现

3.1基本步骤

相机如何围绕游戏物体做轨道运动呢?

  • 下面使用不同方法让相机围绕游戏物体做轨道运动。
  • 创建一个游戏物体(把它的Position归0),并命名为“Camera Parent”,用于相机做轨道运动的需要。
  • 创建一个空的游戏物体
  • 根据需求设置相机的位置
  • 让相机绑定为Camera Parent的子物体。
  • 现在来自用户的输入(例如鼠标拖动)旋转相机的父对象。


   
现在让我们看一个工程案例。

3.2工程案例

在脚本中使用委托声明了一个名为“MouseMoved”的事件,该事件用于相机的控制。获得用户在横坐标轴和纵坐标轴上移动的输入值,把值传给Cameracontroller。创建CameraController脚本,将其分配给相机的父对象。

  • 放置一个汽车模型
    如果你没有汽车模型,那么你就去网上随便弄一个过来使用,也可以从文章的尾部链接去下载(案例工程放在文章的尾部)
  • 根据你的需要设置相机的位置



1.png

  3.现在创建一个空的游戏物体,并且移到汽车的中心位置

4.让空物体绑定为相机的父亲,如下图所示:

2.png

3.3示例代码

设置已经完成,现在开始写代码。创建一个名为InputManager的C#脚本,用于获取输入和调用输入操作。

创建一个空的游戏物体,命名为“InputManager”,并未其添加InputManager脚本。

[C#] 纯文本查看 复制代码
public delegate void MouseMoved(float xMovement, float yMovement);
public class InputManager : MonoBehaviour
{
#region Private References
private float _xMovement;
private float _yMovement;
#endregion
#region Events
public static event MouseMoved MouseMoved;
#endregion
#region Event Invoker Methods
private static void OnMouseMoved(float xmovement, float ymovement)
{
var handler = MouseMoved;
if (handler != null) handler(xmovement, ymovement);
}
#endregion
#region Private Methods
private void InvokeActionOnInput()
{
if (Input.GetMouseButton(0))
{
_xMovement = Input.GetAxis("Mouse X");
_yMovement = Input.GetAxis("Mouse Y");
OnMouseMoved(_xMovement, _yMovement);
}
}
#endregion
#region Unity CallBacks
void Update()
{
InvokeActionOnInput();
}
#endregion
}


在脚本中使用委托声明了一个名为“MouseMoved”的事件,该事件用于相机的控制。

获得用户在横坐标轴和纵坐标轴上移动的输入值,把值传给Cameracontroller。

创建一个空的游戏物体,命名为“CameraParent”,并未其添加如下脚本:

[C#] 纯文本查看 复制代码
public class CameraController : MonoBehaviour {
#region Private References
[SerializeField, Range(0.0f, 1.0f)]
private float _lerpRate;
private float _xRotation;
private float _yYRotation;
#endregion
#region Private Methods
private void Rotate(float xMovement, float yMovement)
{
_xRotation += xMovement;
_yYRotation += yMovement;
}
#endregion
#region Unity CallBacks
void Start ()
{
InputManager.MouseMoved += Rotate;
}
void Update ()
{
_xRotation = Mathf.Lerp(_xRotation, 0, _lerpRate);
_yYRotation = Mathf.Lerp(_yYRotation, 0, _lerpRate);
transform.eulerAngles += new Vector3(0, _xRotation, -_yYRotation);
}
void OnDestroy()
{
InputManager.MouseMoved -= Rotate;
}
#endregion
}


在Start()方法中,用Rotate方法来注册MouseMoved事件

在Rotate()中,获得鼠标在纵坐标和横坐标上的移动值,添加到三角旋转容器(在脚本中使用的是欧拉角(transform.eulerAngles))中去。

在Updata()中,通过添加欧拉角来旋转Camera Parent。在你按下鼠标左键之后,使用Mathf.Lerp函数来使你的相机能更平滑的旋转。

现在,你可以使相机围绕物体轨迹运动了。

    设置欧拉角时,可以依据Camera Parent坐标轴的方向来决定你想要在哪个轴上旋转相机。在我们的例子中对于鼠标的水平运动(横坐标),我们需要相机绕Y轴旋转。对于鼠标的垂直运动(纵坐标),我们需要相机绕Z轴旋转。你可以按照你的需求来设置它。

3.4我们实际上做了什么?

事实上,相机是跟随CameraParent旋转的。

这样做是有好处的,因为这避免了万向锁的问题

相机一直聚焦着车子。不需要去移动和旋转相机。一行代码搞定。

总之相机轨道运动,相机没有进行旋转。

希望这篇文章能给你带来一定的帮助。

原文作者:Brijesh Bhikadiya
原文链接:
http://www.theappguruz.com/blog/smooth-camera-orbit-movement-in-unity
翻译原文链接:http://mp.weixin.qq.com/s?__biz=MzI1MzE0MDg3Nw==&mid=2651812900&idx=1&sn=50e75c324d0996b288120e728264d186#rd
扫描下方二维码关注游戏蛮牛官方微信~每日都有精选干货与你分享哟~

155547iluo7umxezrb2ekr.png

本文由蛮牛驿馆倾情奉献,翻译:Unity墙外的世界(公众号),如有问题请及时联系,除 合作社区 及 合作媒体 外,禁止转载。


回复

使用道具 举报

7日久生情
3387/5000
排名
348
昨日变化

8

主题

347

帖子

3387

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
137142
好友
2
蛮牛币
12003
威望
0
注册时间
2016-2-21
在线时间
1264 小时
最后登录
2020-2-21
2016-9-27 01:24:32 显示全部楼层
mark interesting
回复 支持 反对

使用道具 举报

2初来乍到
123/150
排名
64942
昨日变化

0

主题

36

帖子

123

积分

Rank: 2Rank: 2

UID
29549
好友
0
蛮牛币
318
威望
0
注册时间
2014-6-13
在线时间
85 小时
最后登录
2017-7-11
2016-9-27 07:22:19 显示全部楼层

感谢分享~~~~
回复

使用道具 举报

7日久生情
3499/5000
排名
255
昨日变化

2

主题

333

帖子

3499

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
38772
好友
9
蛮牛币
1757
威望
0
注册时间
2014-8-8
在线时间
1170 小时
最后登录
2020-1-14
QQ
2016-9-27 08:53:27 显示全部楼层
感谢分享~~~~
回复

使用道具 举报

7日久生情
2181/5000
排名
440
昨日变化

4

主题

97

帖子

2181

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1680
好友
4
蛮牛币
1831
威望
20
注册时间
2013-8-8
在线时间
502 小时
最后登录
2019-7-27
2016-9-27 09:05:27 显示全部楼层
应切实听
回复

使用道具 举报

6蛮牛粉丝
1397/1500
排名
1870
昨日变化

7

主题

332

帖子

1397

积分

Rank: 6Rank: 6Rank: 6

UID
104110
好友
0
蛮牛币
258
威望
0
注册时间
2015-5-29
在线时间
341 小时
最后登录
2020-5-12
2016-9-27 09:08:11 显示全部楼层
感觉国外作者写的文章或产品文档都很详细周到,甚至是啰嗦,但这才是真正对用户友好的文章,国内很多产品的文档在这方面差距很大。
回复 支持 反对

使用道具 举报

3偶尔光临
217/300
排名
9776
昨日变化

0

主题

52

帖子

217

积分

Rank: 3Rank: 3Rank: 3

UID
157665
好友
0
蛮牛币
607
威望
0
注册时间
2016-7-19
在线时间
51 小时
最后登录
2017-10-9
QQ
2016-9-29 08:49:41 显示全部楼层
感谢楼主分享 , 链接失效, 麻烦再给一次 ,我是新手, 想下载源文件学习, 麻烦了。
回复 支持 反对

使用道具 举报

排名
48141
昨日变化

0

主题

6

帖子

16

积分

Rank: 1

UID
108918
好友
0
蛮牛币
15
威望
0
注册时间
2015-6-17
在线时间
6 小时
最后登录
2018-4-11
2016-9-29 11:43:49 显示全部楼层
感谢楼主分享 , 链接失效, 麻烦再给一次 ,我是新手, 想下载源文件学习, 麻烦了。
回复 支持 反对

使用道具 举报

排名
48141
昨日变化

0

主题

6

帖子

16

积分

Rank: 1

UID
108918
好友
0
蛮牛币
15
威望
0
注册时间
2015-6-17
在线时间
6 小时
最后登录
2018-4-11
2016-9-29 11:45:02 显示全部楼层
感谢楼主分享 , 链接失效, 麻烦再给一次 ,我是新手, 想下载源文件学习, 麻烦了。
回复 支持 反对

使用道具 举报

排名
8650
昨日变化

35

主题

117

帖子

482

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
75030
好友
13
蛮牛币
1001
威望
0
注册时间
2015-2-16
在线时间
132 小时
最后登录
2019-7-20
楼主 2016-9-29 12:38:45 显示全部楼层
小宋110 发表于 2016-9-29 11:45
感谢楼主分享 , 链接失效, 麻烦再给一次 ,我是新手, 想下载源文件学习, 麻烦了。 ...
http://pan.baidu.com/s/1bAs45g
案例工程 链接地址,请查收。
回复 支持 反对

使用道具 举报

7日久生情
2826/5000
排名
2100
昨日变化

13

主题

1167

帖子

2826

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
168159
好友
6
蛮牛币
6762
威望
0
注册时间
2016-9-12
在线时间
974 小时
最后登录
2020-4-30
2016-10-8 10:33:21 显示全部楼层
好东西。。。。。
回复

使用道具 举报

5熟悉之中
727/1000
排名
4267
昨日变化

3

主题

160

帖子

727

积分

Rank: 5Rank: 5

UID
243239
好友
0
蛮牛币
1793
威望
0
注册时间
2017-9-13
在线时间
220 小时
最后登录
2020-5-19
2018-2-5 14:43:08 显示全部楼层
666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则