项目中要求实现摄像机跟踪人物移动,并且可以水平360°,上下接近180°的自由旋转。这些操作网上已近有很多版本的实现,在此不再赘述。我在此想说的是,当摄像机移动到场景边界,或者触碰到场景中的障碍物的时候,自动拉近与人物之间的距离,当人物再次走回场景中央的时候,逐渐恢复摄像机与人物之间的距离。

我是通过unity里的光线投射来处理这个问题的。具体的实现代码如下:

    private GameObject targetObj = null;                //摄像机追踪的游戏对象
private GameObject camera = null; //摄像机
private RaycastHit hit;
private string obstacleName = "Obstacle"; //障碍物的名字
private int obstacleLayer = ; //障碍物所在的Layer
private Vector3 offPos = new Vector3(, , ); //因为人物中心位于脚底,但是希望摄像机以人物要不为观察点,故有此值
Quaternion rotation; //摄像机当前的旋转角度
Vector3 position; //摄像机当前的位置 void LateUpdate(int x)
{
if (null == targetObj || null == camera)
return;
rotation = new Quaternion(); //简写
position = Vector3.zero; //这里的position是当人物为触碰场景边界或者障碍物的时候,计算出的是相机的位置,需要计算,这里是简写.
//下面对摄像机触碰到场景边界或者障碍物的情况做处理
if (Physics.Linecast(targetObj.transform.position + offPos, position, out hit, << obstacleLayer))
{
if (hit.transform.gameObject.name == obstacleName)
{
position = hit.point;
}
}
camera.transform.position = position;
camera.transform.rotation = rotation;
}

Unity中利用光线投射实现摄像机拉近追踪对象的更多相关文章

  1. Unity中利用柏林噪声(perlinnoise)制作摇摆效果

    perlinnoise是unity中Mathf下的一个函数,需要两个float参数x和y进行采样,返回一个0-1的float型. 项目里经常要随机摇摆某些东西,比如摄像机,某个随机运动的目标等等,都可 ...

  2. Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题

    主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐 ...

  3. Unity中利用委托与监听解耦合的思路

    这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...

  4. Unity3D题目,Unity中利用GUI输出九九乘法表

    网上看到的这题,下面贴出源代码 using UnityEngine;using System.Collections; public class c99 : MonoBehaviour//C#脚本名: ...

  5. unity中利用纯物理工具制作角色移动跳跃功能

    using System.Collections;using System.Collections.Generic;using UnityEngine; public class Player : M ...

  6. winform中利用反射实现泛型数据访问对象基类(3)

    继续完善了几点代码 满足没有主键的情况下使用 并且完善实体字段反射设置value时的类型转换 /// <summary> /// DAO基类 实体名必须要与数据表字段名一致 /// < ...

  7. winform中利用反射实现泛型数据访问对象基类(2)

    在1的基础上做了一点改进 参数化处理 看上去更简洁 无主键情况下 update 方法需要改进 insert delete没有问题  /// <summary>     /// DAO基类 ...

  8. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  9. Unity 基于Cinemachine计算透视摄像机在地图中的移动范围

    Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...

随机推荐

  1. java不常用但很有用的问题排查工具(持续完善)

    因为用的频率不是很多,老忘掉,每次都要搜下,特记录下备忘. 查看进程的启动jvm选项 [root@iZ23nn1p4mjZ ~]# jinfo -flags 16603Attaching to pro ...

  2. 01:CENTOS使用VIRTUALENV搭建独立的PYTHON环境-PYTHON虚拟环境

    1.1 安装virtualenv环境 https://www.cnblogs.com/liuyansheng/p/6141197.html 1.安装virtualenv yum install pyt ...

  3. Computer Study

    2017.12.15日开始制定长期学习计划: 大二上: 目前短期计划: 1.每天一道PAT乙级(弄完PAT乙级)+校OJ(打基础).   2.先复习C++,17周后开始复习数据结构.(补任务  刚刚发 ...

  4. 将svn下载的项目转化为java project

    1.选中项目,右键点击弹出窗口,点击窗口中的[Properties],弹出[Properties for test]窗口, 如下: 2.点击窗口中的[Project Facets],右边显示[Conv ...

  5. topcoder srm 485 div1

    problem1 link 枚举第一个数和第二个数即可确定公差. problem2 link 设高度为$n$,宽度为$m$,且$n \ge m$ 如果$m \ge 5$,那么答案为0.这个可以通过抽屉 ...

  6. Python3基础 list list()生成空列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. repo forall -c 用法【转】

    本文转载自:https://blog.csdn.net/u010164190/article/details/78332484 .repo forall命令 # repo forall -help # ...

  8. 没有使用Material组件

    // 这个App没有使用Material组件, 如Scaffold. // 一般来说, app没有使用Scaffold的话,会有一个黑色的背景和一个默认为黑色的文本颜色. // 这个app,将背景色改 ...

  9. ag 命令的帮助文档

    安装 the silver searcher 在各大平台上都可以从软件库直接安装.除了 Debian/Ubuntu 外,其他系统使用的包名都是一样的. MacOS: brew install the_ ...

  10. FileAttributes Enum

    https://docs.microsoft.com/en-us/dotnet/api/system.io.fileattributes?view=netframework-4.7.2 读取FileA ...