草庐IT

Unity中相机跟随人物移动

泯甜 2023-08-09 原文

方法1:将相机拖到人物的游戏对象上,也就是让相机成为角色的子物体,这样相机就会跟随角色移动

但是这样会存在问题,1.相机会随着人物的翻转而翻转,2.相机跟随人物没有缓冲效果,移动比较僵硬

方法2:代码方式控制相机跟随人物移动

思路一:控制角色和相机的距离,使相机每一帧都和角色保持相等的距离,这样人物移动时,相机也就移动了(代码放在了控制人物的脚本中)不常用!!!仅作了解

 public GameObject Camera;//镜头移动
 private Vector3 Distance;//玩家和摄影机的固定距离
 void Start()
{
    //这是在start中获取到初始时人物和相机的距离,之后要一直保持这个距离
    Distance = this.gameObject.transform.position - Camera.transform.position;
}
void Update()
{
    CameraMove();//镜头移动函数
}
 void CameraMove()//这里只列举了x轴
{
    float currentx;//相机的x坐标
    // Distance.x=this.gameObject.transform.position.x-currentx由这个公式推导出下面
    currentx = this.gameObject.transform.position.x - Distance.x;
    Vector3 temp = new Vector3(currentx, 0, -10);
    Camera.transform.position = temp;//改变相机的位置
}

改方法虽然能够使相机跟随,但是还是存在相机移动太僵硬,不够平滑的问题

思路二:利用Lerp函数控制相机(Lerp函数在人物的几种移动方式中有讲)常用!!!

public Transform playerTarget;//相机靠近的目标(一般是角色)
public float moveTime;//相机移动时间 
private void LateUpdate()//注意这里一定要写在LateUpdate函数中,因为LateUpdate在Update之后执行,人物移动是在upadte中,因此是先人物移动再相机移动
{
   if (playerTarget!=null)//角色不为空
  {
     if (playerTarget.position!=transform.position)//相机和角色位置不相等的时候
        {
            transform.position = Vector3.Lerp(transform.position, playerTarget.position, moveTime*Time.deltaTime); 
        }
  }

}

一般是新建一个控制相机的空对象,把相机挂变成该对象的子对象,然后该对象挂载上面的代码脚本

方法一和方法三都还有个缺陷,那就是没有将相机设置在特定的移动范围内(也可以用代码完成)

方法3:利用cinemachine插件控制相机(可以快速设定相机跟随目标,并且将相机设定在特定范围内)

在使用cinemachine插件之前需要在包管理器中搜索Cinemachine插件,并安装

安装后由于unity版本不同,2020.3的版本的cinemachine会显示在窗口旁边(有些版本的需要在层级窗口中点击鼠标右键才可以创建cinamachine)

由于cinemahcine的功能过于繁杂,目前只要求会使用它到达相机跟随的目的,点击Create 2D Camera

这时就会出现CM vcam1对象,该对象上就挂载了虚拟相机的组件(参数过于复杂,Follow就是虚拟相机跟随的目标)

同时主相机Main Camera会自动添加CinamachineBrain组件(用来控制显示哪一个虚拟相机)

概念性的东西以后再深入研究,目前就掌握如何使用达到效果即可,1.在创建好CM vcam1对象后,将虚拟相机的Follow参数选择为想要跟随的对象,就可以实现相机跟随人物(注意,在设置好后有时会出现人相机跟随运动的角色导致角色画面模糊的情况,这个时候把CinamachineBrain的更新方法改为FixedUpadte即可)这时相机跟随已经完成了,接下来就是做相机的运动范围,

1.先在Cinema chineVirtualCamera组件中点击Add Extension

为相机添加一个边界

2.创建一个空游戏对象(最好取名CameraConfiner)为该游戏对象添加一个2D的碰撞体(这里的2D碰撞体需要是多边形碰撞器才可以),设置号边界范围后就可以给上方的Cooider 2D赋值,设置好之后测试会发现人物等其它碰撞体被挤出地图范围(这是因为人物等其它碰撞体和刚才设置的边界碰撞体相互作用导致的结果,将相机碰撞体单独设置一个图层,随后在游戏设置里面将相机层和其它图层取消碰撞效果即可)

有关Unity中相机跟随人物移动的更多相关文章

  1. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  2. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  5. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  6. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  7. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  8. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  9. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  10. 三分钟集成 TapTap 防沉迷 SDK(Unity 版) - 2

    三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应

随机推荐