零基础入门 34:摄像机跟随目标

hello,今天来抽出时间给大家更新一发,之前有好多同学和我反馈说特别想要一个收藏贴可以分享如何制作摄像机追随目标,经过大家一而再再而三的催促,今天来给大家分享一下如何实现这个功能。

正题开始


很多时候我们都需要有一个摄像机来跟随着移动的目标,最好还可以调节一些参数来控制追随的速度,高度等等参数。

大家先来看一下下面的效果图吧

如上图所示,当人物向前移动的时候,摄像机可以跟随物体进行移动。

那如何实现摄像机追随呢?

我直接把全部代码贴出来

以上是代码图,下面是代码段

//Add by Jimin at 2017/11/8

using UnityEngine;

using System.Collections;

using UnityEngine.UI.Collections;

namespace CinemaDirector

{

public class CameraFollow : MonoBehaviour

{

#region Public Attributes

[Tooltip("要控制移动的摄像机")]

public Camera m_camera;

[Tooltip("摄像机要跟随的目标")]

public GameObject m_target;

[Tooltip("摄像机的旋转角度")]

public Vector3 m_cameraRotation;

[Tooltip("摄像机距离目标的距离")]

public float startingDistance = 11f;

[Tooltip("摄像机距离目标的高度")]

public float targetHeight = 1.0f;

[Tooltip("摄像机跟随速度")]

[Range(0,1)]

public float cameraMoveSpeed = 1f;

#endregion

#region Private Attributes

private GameObject m_currentTarget = null;

private Vector3 m_focusPosition;

private bool isCanUpdateCameraToTarget = false;

#endregion

#region Public Methods

#endregion

#region Unity Methods

public void Start()

{

if (m_camera != null && m_target != null)

{

m_currentTarget = m_target;

m_focusPosition = m_currentTarget.transform.position;

isCanUpdateCameraToTarget = true;

}

else

{

isCanUpdateCameraToTarget = false;

}

}

void Update()

{

if(isCanUpdateCameraToTarget)

{

m_focusPosition = m_currentTarget.transform.position;

Vector3 trm = m_camera.transform.rotation * Vector3.forward * startingDistance + new Vector3(0, -1 * targetHeight, 0);

Vector3 targetPos = m_focusPosition - trm;

Vector3 movespeed = (targetPos - m_camera.transform.position) * cameraMoveSpeed;

Vector3 targetMov = Vector3.zero;

targetMov = movespeed * Time.deltaTime;

Vector3 position = m_camera.transform.position + targetMov;

targetPos = Vector3.Lerp(m_camera.transform.position, targetPos, cameraMoveSpeed);

m_camera.transform.position = targetPos;

m_camera.transform.rotation = Quaternion.Euler (m_cameraRotation);

}

}

#endregion

#region Override Methods

#endregion

#region Private Methods

#endregion

#region Inner

#endregion

}

}

创建一个空脚本后,大家只要把我的代码复制粘贴进去即可。

之后我们把脚本放到场景的空对象上,将需要关联的对象拖动上去。如下图

因为我在Public定义的时候有ToolTip的定义,所以大家可以把鼠标放到字段定义即可看见我们的注释内容。当做一个小技巧告诉大家。

Camera就是我们要移动的摄像机

Target是我们要追随的目标

Camera Rotation是摄像机的旋转角度

StartingDistance是摄像机的起始距离

Target Height是摄像机距离目标的高度

Camera Move Speed是摄像机的追随速度

好了, 以上就是今天摄像机追随目标的功能实现,最后再看一次我们的效果图。

好了,今天的分享就到这里啦。

大家下期分享见哈~

原文发布于微信公众号 - 韩东吉的Unity杂货铺(DeveloperJimin)

原文发表时间:2017-11-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

有没有一段代码,让你觉得人类的智慧也可以璀璨无比?

Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推...

963
来自专栏ACM算法日常

5行位运算,map靠边站——位操作进阶

Given an array of integers, every element appears three times except for one. F...

1191
来自专栏程序员的诗和远方

Canvas基础-粒子动画Part2

紧接上一篇文章 Canvas基础-粒子动画Part1 其实这篇早在一个星期之前就应该发了,无奈事情太多,而且我又跑去写微信公众号了。 粒子动起来 有了上一...

3197
来自专栏章鱼的慢慢技术路

OpenGL光照设置

1943
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

O(1)效率的表面模糊算法优化。

     很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前...

2466
来自专栏小红豆的数据分析

小蛇学python(2)两百行代码实现旅游中国34座大城市最短路径

直接说基础语法,也许大家不会感兴趣。前言之后的这一章,给大家介绍一下我最近写出来的一个小功能。用python语言实现GA算法来解决TSP问题,希望以此来激发大家...

2764
来自专栏marsggbo

什么是P问题、NP问题和NPC问题

    这或许是众多OIer最大的误区之一。     你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你...

1162
来自专栏Java面试通关手册

六道面试中常见的智力题 来看看你会做几道?

下面的题目来自滴滴出行2017秋招题。这些题目是我自己觉得比较难或者比较容易出错的题目。

2284
来自专栏数据派THU

教你用Python进行自然语言处理(附代码)

3708
来自专栏技术总结

iOS进阶之CAEmitterLayer

2938

扫码关注云+社区

领取腾讯云代金券