unity3d编写缓动跟随摄像机

本文介绍了如何使用Unity实现一个3D摄像机跟随物体的简单缓动效果,包括设置跟随距离、鼠标滚轮操作和镜头移动,以及使用Spring Ratio实现平滑跟踪。通过LateUpdate函数实时调整摄像机位置,同时提供物体隐藏与显示的逻辑。
摘要由CSDN通过智能技术生成

首先声明target为需要跟随的物体

public Transform target;

声明跟随距离,以及跟随距离的增长速度,使用鼠标滚轮可以拉伸镜头

public float viewDistance = 8f;
public float viewDistanceMoveSpeed = 1f;

声明缓动系数

public float springRatio = 0.05f;

然后在LateUpdate函数里编写代码,因为摄像机追踪需要发生在物体移动后。
首先鼠标滚轮可以拉伸镜头

viewDistance += Input.GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

之后使用Vector3.MoveTowards将相机移动到目标地点。目标地点的坐标计算过程如下。
target.transform.forward得到目标物体当前朝向的前方在世界坐标系下的方向,和Vector.foraward是不同的。之后用目标物体减去这个值,就是当前目标物体所朝方向的后方。
然后摄像机需要稍稍在y轴方向向上移动,可以给人一种略微俯视的感觉。
最后增加进缓动系数来移动摄像机

this.transform.position = Vector3.MoveTowards(transform.position,
            target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f,
            (moveSpeed + distance * springRatio) * Time.deltaTime);

最后当摄像机离物体过进的时候,可以隐藏物体,这个在许多游戏中都有类似的实现

 bool visible = Vector3.Distance(this.transform.position, target.transform.position) > 1;
        target.GetComponent<MeshRenderer>().enabled = visible;

完整代码如下

using UnityEngine;

public class CameraTrack3D : MonoBehaviour
{
    public Transform target;
    public float moveSpeed = 3;


    public float viewDistance = 8f;
    public float viewDistanceMoveSpeed = 1f;

    public float springRatio = 0.05f;

    void LateUpdate()
    {
        viewDistance += Input.GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

        var distance = Vector3.Distance(this.transform.position, target.transform.position);

        this.transform.position = Vector3.MoveTowards(transform.position,
            target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f,
            (moveSpeed + distance * springRatio) * Time.deltaTime);
        
        this.transform.LookAt(target.position + target.forward * 10);

        bool visible = Vector3.Distance(this.transform.position, target.transform.position) > 1;
        target.GetComponent<MeshRenderer>().enabled = visible;
    }
}

将此代码挂载到摄像机上,赋值要跟随的物体,同时编写方块的移动代码即可完成一个简易的3D缓动追踪相机

调整参数后可以得到如下效果
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值