【unity笔记】相机跟随人物---镜头跟着人跑

Unity 2D平滑相机跟随是一种让相机能够跟随玩家移动的方式,使得游戏场景可以随着玩家的移动而有所变化,从而提高游戏的流畅度和玩家体验。在本文中,我们将介绍Unity 2D平滑相机跟随的实现方法。

在这里插入图片描述

第一步,创建相机

首先,在Unity中创建一个相机对象。创建相机的方法很简单:在Hierarchy视图中右键点击空白处,选择“Camera”。

第二步,设置相机参数

接下来,我们需要设置相机的参数。在Inspector视图中,找到相机组件并展开它。我们需要设置的参数有:

  1. Projection:选择正交投影或透视投影。一般来说,2D游戏都使用正交投影。

  2. Size:设置相机的大小,以适应游戏场景中的元素。

  3. Depth:控制相机的渲染顺序,一般不需要修改。

  4. Clear Flags:选择相机的背景清除方式,可以选择为纯色、天空盒或不清除。

  5. Background:如果选择纯色,需要设置背景颜色。

第三步,编写脚本

接下来,我们需要编写一个脚本,让相机能够跟随玩家的移动。在Unity中,可以使用C#或JavaScript编写脚本。这里我们使用C#。

首先,定义一个变量来存储玩家对象:

public Transform target;

然后,定义一个变量来控制相机的跟随速度:

public float smoothSpeed = 0.125f;

接下来,使用Vector3的Lerp方法,使相机平滑跟随玩家移动

 			// 计算目标位置在屏幕上的坐标
            Vector3 targetPosition = Camera.main.WorldToViewportPoint(target.position);
            // 计算摄像机应该移动的向量
            Vector3 delta = target.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, targetPosition.z));
            // 计算摄像机的目标位置
            Vector3 destination = transform.position + delta;
            // 使用平滑阻尼移动摄像机
            transform.position = Vector3.Lerp(transform.position, destination, smoothSpeed * Time.deltaTime);

我们将玩家的位置保存在一个Vector3对象destination中,然后使用Lerp方法,将相机当前的位置(transform.position)平滑地移向玩家的位置(destination),然后将相机的位置设置为这个新位置。

第四步,将脚本应用到相机对象上

最后,将编写好的脚本应用到相机对象上。在Inspector视图中,将脚本拖拽到相机对象的Add Component的区域即可。还要指定好跟踪的对象(Target)。
在这里插入图片描述

至此,我们已经完成了Unity 2D平滑相机跟随的实现。在游戏运行时,相机将能够平滑地跟随玩家的移动,从而让游戏更加流畅。

using UnityEngine;

public class follow_camera: MonoBehaviour
{
    public Transform target; // 跟随的玩家对象
    public float smoothSpeed = 0.125f; // 跟随的平滑程度

    private void LateUpdate()
    {
        if (target != null)
        {
            // 计算目标位置在屏幕上的坐标
            Vector3 targetPosition = Camera.main.WorldToViewportPoint(target.position);
            // 计算摄像机应该移动的向量
            Vector3 delta = target.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, targetPosition.z));//表示屏幕中心点在视口坐标系中的位置,其中z轴坐标等于目标位置在世界坐标系中的z轴坐标,保证在同一平面上,即摄像机与目标在同一水平线上。要想调镜头就在0.5f上下手。
            // 计算摄像机的目标位置
            Vector3 destination = transform.position + delta;
            // 使用平滑阻尼移动摄像机
            transform.position = Vector3.Lerp(transform.position, destination, smoothSpeed * Time.deltaTime);
        }
    }
}

LateUpdate()在update()之后执行。
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值