前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础入门 34:摄像机跟随目标

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

作者头像
韩东吉
发布2018-10-19 17:00:51
6680
发布2018-10-19 17:00:51
举报

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是摄像机的追随速度

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

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

大家下期分享见哈~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档