效果图:

代码:

using UnityEngine;
using System.Collections;  public class CameraMOve : MonoBehaviour {/// <summary>/// 移动速度/// </summary>public float moveSpeed = 3f;/// <summary>/// 放置速度/// </summary>public float turnSpeed = 10f;/// <summary>/// 玩家/// </summary>private Transform player;/// <summary>/// 摄像机鱼玩家之间的向量/// </summary>private Vector3 direction;/// <summary>/// 射线碰撞/// </summary>private RaycastHit hit;/// <summary>/// 摄像机与玩家之间的距离/// </summary>private float distance;/// <summary>/// 摄像机的观测点/// </summary>private Vector3[] currentPoints;void Start () {player = GameObject.FindWithTag(Tags.Player).transform;currentPoints = new Vector3[5];distance = Vector3.Distance(transform.position, player.position );//从摄像机指向玩家的偏移量direction= player.position - transform.position;}  /// <summary>/// 摄像机代码放到LateUpdate中/// 物理操作代码放到FixedUpdate/// </summary>void LateUpdate () {//Player与摄像机之间的距离Vector3 startPoint = player.position - direction ;//Player垂直上方 与摄像机同高的点Vector3 endPoint = player.position + Vector3.up * distance;//循环获取 摄像机到Player上方 点之间的5个点for (int i = 0; i < currentPoints.Length ; i++){currentPoints[i] = Vector3.Lerp(startPoint, endPoint, i * 0.25f);}//取数组中的一个值为默认位置Vector3 viewPosition= currentPoints[0];//循环调用射线检测 找到能看到Player的点for (int i=0;i<currentPoints.Length; i++){if (CheckView (currentPoints[i])){viewPosition = currentPoints[i];break;}}//刷新位置transform.position = Vector3.Lerp(transform.position, viewPosition, Time.deltaTime * moveSpeed);//调整角度SmoothRotate();}/// <summary>/// 检测能否看到玩家/// </summary>/// <param name="pos"></param>/// <returns></returns>bool CheckView(Vector3 pos) {//获取点到摄像机的位置Vector3 dir = player.position - pos;//发射射线if(Physics .Raycast (pos ,dir ,out hit)){if(hit .collider .tag ==Tags .Player){return true;}}return false;}/// <summary>/// 调整摄像机旋转角度/// </summary>void SmoothRotate(){//获取摄像机到Player的向量Vector3 dir = player.position - transform.position;//返回一个角度 这个角度就是朝向Player的夹角Quaternion qua = Quaternion.LookRotation(dir );//旋转角度transform.rotation = Quaternion.Lerp(transform.rotation, qua, Time.deltaTime * turnSpeed);//锁定yz轴 transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0);}
}

解决摄像机被遮挡问题相关推荐

  1. Unity3D实践1.1:解决摄像机跟随中的视野遮挡问题

    前文:https://blog.csdn.net/Jaihk662/article/details/87632727(摄像机跟随) 前面已经提到了摄像机跟随角色的多种方法以及优化,但是很多时候摄像机与 ...

  2. Android实例-解决虚拟键盘遮挡问题(XE8+小米2)

    Android实例-解决虚拟键盘遮挡问题(XE8+小米2) 参考文章: (1)Android实例-解决虚拟键盘遮挡问题(XE8+小米2) (2)https://www.cnblogs.com/FKde ...

  3. php控件不显示,解决控件遮挡问题:关于有窗口元素和无窗口元素

    解决控件遮挡问题:关于有窗口元素和无窗口元素 更新时间:2007年01月28日 00:00:00   作者: 不知道朋友们有没有碰到过控件的遮挡问题,最典型的就是DropdownList和Active ...

  4. android 软键盘遮挡登陆按钮的问题,Android优雅的方式解决软键盘遮挡按钮问题

    前言 比如在进行登录的操作中,用户输入完密码之后,肯定是想直接点击登录按钮的.返回键隐藏软键盘这样的体验肯定很糟糕,程序员,遇到问题解决问题. 实现1 xml android:id="@+i ...

  5. android,键盘遮挡了输入框,完美解决android键盘遮挡问题

    登录界面经常会出现输入框被键盘遮挡的情况,这里处理的方式是当软件盘出现的时候在界面的最底部空出键盘的高度.需要代码和xml布局一起修改来实现. 1.xml布局通过ScrollView包裹住内容,内容使 ...

  6. rn android软键盘遮挡布局处理,完美解决RN 键盘遮挡问题

    当输入框在底部的时候, 唤起键盘会造成遮挡问题,解决方法如下: class ForumDetail extends React.Component { render(){ let behavior = ...

  7. 【个人UNITY笔记】{基础} 2D游戏中使用Shader或Camera解决Sprite前后遮挡关系

    因为个人制作的奇葩游戏2D游戏是用Sprite当作角色和物体,然而Unity里不应该使用带透视的相机来渲染Sprite,因为会2个Sprite距离太近会出现闪烁,但是我就是想保留透视,同时使用Spri ...

  8. Android 模仿QQ登录界面解决软键盘遮挡问题

    Android 软件盘弹出可能会遮挡住界面上的某些控件.当 windowSoftInputMode 为 adjustPan 时,一般不会挡住 EditText,但是假如 EditText 下面是一个登 ...

  9. vue表单项目解决安卓键盘遮挡输入框问题

    一.思路 设计动态class,当输入框onfocus状态触发事件激活class,并且滚动到页面底部,当输入框onblur状态关闭class <style> .center-box-inpu ...

最新文章

  1. EIRP/ERP(有效辐射功率)基本概念
  2. InfluxData【付诸实践 01】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
  3. 本文中的问题直接重装mysql即可,但是注意数据也会一并消失
  4. Spark技术内幕:Stage划分及提交源码分析
  5. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序_提取排序规则
  6. 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...
  7. sql经典题目(1)
  8. AHCI驱动中的cmd
  9. 解决Ubuntu16.04解压cudnn文件时报错could not create a hard link file
  10. 第1-6课:绘制箱线图、饼图和直方图
  11. 腾讯裁员,裁出“财务自由”
  12. iPhone iPad 设备型号对应表
  13. PayPal社交游戏及移动娱乐产业的海外商机
  14. 阿里云服务器和腾讯云不同的地方
  15. 51JOB:根据HR处理简历的一般流程,简历投递后会有如下几种状态出现
  16. Ehabs Last Corollary
  17. 100天精通Python(基础篇)——第7天:高级变量类型复习
  18. boss直聘python_python分析BOSS直聘的某个招聘岗位数据
  19. 【洛谷P1970】花匠【贪心】
  20. 如何使同vlan中ip禁止访问?端口隔离与vlan有何不同?

热门文章

  1. 前后端分离/前端模块化/传统页面和单页面
  2. 计算机毕业设计Android宠物领养救助系统app(源码+系统+mysql数据库+Lw文档)
  3. linux cc***防范
  4. PLASTIGAUGE塑料间隙规的正确使用步骤你知道多少?
  5. V神赞许的Aztec,如何让以太坊更隐私?
  6. java按比例压缩图片到指定的大小(kb、mb)
  7. 淘宝/天猫API开发流程
  8. 如何用数据分析,搞定新媒体运营的定位和内容初始化?
  9. 算法题---leetcode-1
  10. Android Keep screen on(保持屏幕唤醒)