一、开发环境

Unity版本: 2020.1.0f1

二、建立摄像机结构

1、结构如下图

2、将CameraZoomContainer的Position X坐标设置为12,如图

3、将CameraUpAndDown的Rotation Z坐标设置为30,如图:

三、实现摄像机的跟随、旋转、缩放

1、编写相机控制器脚本CameraCtrl挂载到CameraFollowAndRotate上,脚本内容如下:

using UnityEngine;
using System.Collections;/// <summary>
///
/// </summary>
public class CameraCtrl : MonoBehaviour
{public static CameraCtrl Instance;/// <summary>/// 控制摄像机上下/// </summary>[SerializeField]private Transform m_CameraUpAndDown;/// <summary>/// 摄像机缩放父物体/// </summary>[SerializeField]private Transform m_CameraZoomContainer;/// <summary>/// 摄像机容器/// </summary>[SerializeField]private Transform m_CameraContainer;void Awake(){Instance = this;}void Start(){}/// <summary>/// 初始化/// </summary>public void Init(){m_CameraUpAndDown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(m_CameraUpAndDown.transform.localEulerAngles.z, 35f, 80f));}/// <summary>/// 设置摄像机旋转/// </summary>/// <param name="type">0=左 1=右</param>public void SetCameraRotate(int type){transform.Rotate(0, 80 * Time.deltaTime * (type == 0 ? -1 : 1), 0);}/// <summary>/// 设置摄像机上下 0=上 1=下/// </summary>/// <param name="type"></param>public void SetCameraUpAndDown(int type){m_CameraUpAndDown.transform.Rotate(0, 0, 60 * Time.deltaTime * (type == 1 ? -1 : 1));m_CameraUpAndDown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(m_CameraUpAndDown.transform.localEulerAngles.z, 5f, 80f));}/// <summary>/// 设置摄像机 缩放/// </summary>/// <param name="type">0=拉近 1=拉远</param>public void SetCameraZoom(int type){m_CameraContainer.Translate(Vector3.forward * 10 * Time.deltaTime * ((type == 1 ? -1 : 1)));m_CameraContainer.localPosition = new Vector3(0, 0, Mathf.Clamp(m_CameraContainer.localPosition.z, -10f, 10f));}/// <summary>/// 实时看着主角/// </summary>/// <param name="pos"></param>public void AutoLookAt(Vector3 pos){m_CameraZoomContainer.LookAt(pos);}//void OnDrawGizmos()//{//    Gizmos.color = Color.red;//    Gizmos.DrawWireSphere(transform.position, 15f);//    Gizmos.color = Color.blue;//    Gizmos.DrawWireSphere(transform.position, 14f);//    Gizmos.color = Color.green;//    Gizmos.DrawWireSphere(transform.position, 12f);//}
}

2、设置变量,如图:

3、编写角色控制器脚本RoleCtrl,将角色脚本挂载到角色上(本脚本未实现角色移动,角色移动请参考其他资料)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RoleCtrl : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){if (CameraCtrl.Instance != null){CameraCtrl.Instance.Init();}}// Update is called once per framevoid Update(){// 摄像机自动跟随CameraAutoFollow();}#region CameraAutoFollow 摄像机自动跟随/// <summary>/// 摄像机自动跟随/// </summary>private void CameraAutoFollow(){if (CameraCtrl.Instance == null) return;CameraCtrl.Instance.transform.position = gameObject.transform.position;CameraCtrl.Instance.AutoLookAt(gameObject.transform.position + new Vector3(0, 1.2f, 0));if (Input.GetKey(KeyCode.A)){CameraCtrl.Instance.SetCameraRotate(0);}else if (Input.GetKey(KeyCode.D)){CameraCtrl.Instance.SetCameraRotate(1);}else if (Input.GetKey(KeyCode.W)){CameraCtrl.Instance.SetCameraUpAndDown(0);}else if (Input.GetKey(KeyCode.S)){CameraCtrl.Instance.SetCameraUpAndDown(1);}else if (Input.GetKey(KeyCode.I)){CameraCtrl.Instance.SetCameraZoom(0);}else if (Input.GetKey(KeyCode.L)){CameraCtrl.Instance.SetCameraZoom(1);}}#endregion
}

4、测试

运行游戏,按键A与D进行旋转,按键W与S进行调整相机角度,按键I与L进行拉进拉远

5、手势操作-未完待续

Unity 3D系列 摄像机围绕主角进行旋转、缩放相关推荐

  1. Unity鼠标控制摄像机 围绕物体旋转

    Unity鼠标控制摄像机 围绕物体旋转 角度范围判定 // An highlighted block using UnityEngine;public class CameraCtrl : MonoB ...

  2. Unity 触屏手势控制Camera平移旋转缩放

    Unity 触屏手势控制Camera平移旋转缩放 实现思路 单点触屏,位移增量控制相机平移: 两点触屏,两点位移控制相机前后移动(缩放):两点中一点不位移控制相机绕点旋转: 实现需要的API Touc ...

  3. 鼠标控制摄像机围绕主角的移动和转向。

    这几天回顾整理的看了第三人称的游戏控制和摄像机控制的代码. 通过自己写的代码和对比别人写的代码,收获到的东西: 自己:功能随意的叠加,想到什么编辑什么,再查询时就感觉有点混乱.且喜欢建很多个CS些.通 ...

  4. unity 3D场景摄像机跟随人物

    3D场景摄像机跟随人物 2d场景和3d场景跟随不一样,但是有些还是相同的,就因为3d场景中人物旋转方向导致摄像机不能始终和人物方向一致很麻烦.所以下面提供一种挺不错的方法来帮助你. 效果如下: 效果就 ...

  5. Unity摄像机控制插件移动旋转缩放聚焦自动居中

    目录 前言 一.主要特点 二.使用步骤 1.导入插件 2.拖入SR_Camera Prefab到Hierarchy场景中 3.设置场景中需要交互的物体和默认射线检测的地面层 4.限制摄像机的可移动范围 ...

  6. Unity鼠标控制摄像机拖拽、旋转、缩放(模拟编辑器摄像机功能)

    网上有不少类似内容了,不过有些不全面,甚至有有残缺,少了上下文,导致复制代码以后报错,笔者很讨厌这种太监代码!! 话说真传一句话,假传万卷书,代码全文如下:复制到自己脚本中,挂到摄像机上即可运行 us ...

  7. Unity--使用鼠标操纵摄像机,让其围绕屏幕中心旋转

    最近做游戏碰到一个功能:模拟Unity Scene视图中的效果,让视线围绕着屏幕旋转.而在游戏视图中对应的就是让摄像机围绕屏幕中心旋转.这个功能在很多的建模软件中都可以看的到. 在设计这个功能的时候, ...

  8. 【Unity】Unity实现鼠标控制摄像机围绕物体旋转镜头 滑轮控制远近

     在游戏和一些产品展示等项目中会有让摄像机围绕某个物体进行旋转这种需求  下面展示的代码是个删减版的  只保留了主要功能   限制的方面都删除了 在原有的代码中有  移动摄像机功能 围绕的点不做限制每 ...

  9. Unity中摄像机围绕物体旋转的功能

    当然啦其实围绕旋转的功能本身并不难:         // 拖动摄像机围绕物体旋转         if (Input.GetMouseButton(1))         {             ...

最新文章

  1. eclipse调用JNI之环境的搭建
  2. 【转】dijkstra算法
  3. 前端技巧:遍历数组都有哪些方式呢?
  4. C++ STL vector的输出
  5. dell加装固态硬盘_技术丨如何进行笔记本硬盘拆装?
  6. python分片上传_python 分片上传大格式
  7. php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
  8. 下载android平台源码
  9. python—range() 函数—步长为正,左闭右开;步长为负,左开右闭
  10. 幂级数收敛域和和函数定义域的问题
  11. win7系统如何添加显示桌面?显示桌面图标设置方法
  12. 程序猿生存指南-45 迁徙的鸟
  13. python中sample是什么意思_【后端开发】python中的sample什么意思
  14. 恶心的极速输入法windows10 删除
  15. Tensorflow Dataset API 入门
  16. unity实现角色的移动(用状态机控制动画)
  17. 怎么学习英文--英国人教你如何学习英文
  18. 分布式事务(三):分布式事务解决方案之TCC(Try、Confirm、Cancel)
  19. python——之self参数
  20. Vue 2.7 正式发布,代号为 Naruto

热门文章

  1. SBUS转485增程方案,SBUS控制远程机器人方案
  2. 友邦人寿发布非一线差异化发展策略,稳步加速中国市场拓展布局
  3. php正则表达式表情,php正则表达式储存展示表情字符的方法
  4. 写一段wavefront_reader的代码
  5. 八、基于FPGA的以太网协议介绍(二)
  6. rabbitMQ队列解绑
  7. 数据安全之MySQL数据加解密的实现方案
  8. 太原市消防工程师培训_关于消防工程师的满满干货
  9. 如何使用Yii2编程:Google身份验证
  10. IPSC和IPSC衍生细胞