- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
推拉变焦(又称“伸缩”变焦)
推拉变焦是一种广为人知的视觉效果,相机朝目标对象移动的同时进行缩放。使得该对象大致看起来还是相同大小,但场景中的所有其他对象都改变了视角。推拉变焦处理巧妙,可突出目标对象,因为该对象是图像场景中唯一没有改变位置的物体。变焦也可有意进行快速处理,造成定向障碍的效果。
如屏幕上看到的一样,刚好符合垂直内视椎体的对象将占据视图的整个高度。不论对象到相机的距离有多远,不论视野如何,都是如此。例如,可将相机移近对象,然后拓宽视角,使对象刚好符合内视椎体的高度。该特定对象在屏幕上将显示相同大小,但其他所有对象的大小将随着距离和视野的改变而改变。这是推拉变焦效果的实质。
在代码中创造这种效果可在变焦开始时于对象所在位置减少内视椎体的高度。然后随着相机的移动,找到新距离并调整视野,保持在对象位置的相同高度。下列代码可完成该效果:-
var target: Transform; private var initHeightAtDist: float; private var dzEnabled: boolean; // Calculate the frustum height at a given distance from the camera. function FrustumHeightAtDistance(distance: float) { return 2.0 * distance * Mathf.Tan(camera.fieldOfView * 0.5 * Mathf.Deg2Rad); } // Calculate the FOV needed to get a given frustum height at a given distance. function FOVForHeightAndDistance(height: float, distance: float) { return 2 * Mathf.Atan(height * 0.5 / distance) * Mathf.Rad2Deg; } // Start the dolly zoom effect. function StartDZ() { var distance = Vector3.Distance(transform.position, target.position); initHeightAtDist = FrustumHeightAtDistance(distance); dzEnabled = true; } // Turn dolly zoom off. function StopDZ() { dzEnabled = false; } function Start() { StartDZ(); } function Update () { if (dzEnabled) { // Measure the new distance and readjust the FOV accordingly. var currDistance = Vector3.Distance(transform.position, target.position); camera.fieldOfView = FOVForHeightAndDistance(initHeightAtDist, currDistance); } // Simple control to allow the camera to be moved in and out using the up/down arrows. transform.Translate(Input.GetAxis("Vertical") * Vector3.forward * Time.deltaTime * 5); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论