Unity3D第三人称视角摄像机、跟随与球面旋转

  • 逻辑释义
  • 图解分析
  • Unity C#代码

逻辑释义

【关键transform】 1[玩家] 2[注视目标点] 3[摄像机]
[摄像机]跟随[注视目标点],[注视目标点]跟随[玩家]

【看向注视目标点】 摄像机 用transform.LookAt()方法. 始终看向 注视目标点

【视角垂直旋转】 摄像机始终根据 注视目标点的后方向量与上方向量或下方向量 插值获得 偏移向量.
调整插值 以获得 垂直旋转的效果

【视角水平旋转】 注视目标点水平旋转, 带动 摄像机水平旋转

【视角远近缩放】 获得偏移向量后 修改偏移向量长度

【Unity使用】 脚本组件挂到[摄像机]上 [玩家]物体 需添加Tag“Player” (或public Transform player ;手动挂载)

图解分析

Unity C#代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SphereCamera : MonoBehaviour
{private Transform player; //玩家private Transform watchPoint; //注视目标点private float watchPointHeight = 1.7f; //注视目标点高度private float distance = 2.8f; //当前 摄像机到目标点距离private float distanceMax = 5.0f; //到目标点最大距离private float distanceMin = 1.0f; //到目标点最小距离private float distanceSpeed = 0.3f; //距离增减速度private float rotationY; //水平旋转private float rotationYSpeed = 1.5f; //水平旋转速度private float AngleLerp; //当前垂直角度 插值系数private float AngleMax = 80.0f; //最大垂直角度private float AngleMin = -40.0f; //最小垂直角度private float AngleSpeed = 0.02f; //垂直旋转速度private Vector3 finalVec = new Vector3(); //最终偏移向量private void Start(){//寻找标签 获得玩家Transformplayer = GameObject.FindGameObjectWithTag("Player").transform;//实例化注视目标点物体watchPoint = new GameObject().transform;}private void FixedUpdate(){ChangeDistance(); //滚轮增减 摄像机到目标点距离ChangeRotationY(); //水平旋转ChangeAngle(); //垂直旋转FinalCameraPos(); //摄像机最终位置}private void ChangeDistance() //滚轮增减 摄像机到目标点距离{//接收鼠标滚轮输入if (Input.GetAxis("Mouse ScrollWheel") < 0){//改变 当前到目标点距离distance += distanceSpeed;//限制 到目标点距离最大值if (distance > distanceMax){distance = distanceMax;}}else if (Input.GetAxis("Mouse ScrollWheel") > 0){//改变 当前到目标点距离distance -= distanceSpeed;//限制 到目标点距离最小值if (distance < distanceMin){distance = distanceMin;}}}private void ChangeRotationY() //水平旋转{//获得鼠标X轴移动值 修改水平旋转值rotationY = Input.GetAxis("Mouse X") * rotationYSpeed;//注视目标点 水平旋转watchPoint.Rotate(0, rotationY, 0);}private void ChangeAngle() //垂直旋转{//鼠标Y轴移动 修改 垂直角度插值系数AngleLerp -= Input.GetAxis("Mouse Y") * AngleSpeed;//限制 垂直角度插值系数 最大最小值if (AngleLerp > AngleMax / 90.0f) //除90度 获得 最大 垂直角度插值系数{AngleLerp = AngleMax / 90.0f;}else if (AngleLerp < AngleMin / 90.0f) {AngleLerp = AngleMin / 90.0f;}//判断 当前垂直角度插值系数 正负//根据 注视目标点的 后方向量 上方或下方向量 与 当前垂直角度插值系数//获得 偏移向量的方向if (AngleLerp > 0)finalVec = Vector3.Lerp(-watchPoint.forward, watchPoint.up, AngleLerp);elsefinalVec = Vector3.Lerp(-watchPoint.forward, -watchPoint.up, -AngleLerp); //垂直角度插值系数 取正finalVec.Normalize(); //单位化偏移向量长度为1finalVec *= distance; //设定 偏移向量的长度}private void FinalCameraPos() //摄像机最终位置{//注视目标点位置 跟随 玩家位置Vector3 PointPos = player.position;PointPos.y += watchPointHeight; //修改 注视目标点 高度//弹簧移动效果 插值实现watchPoint.position = Vector3.Lerp(watchPoint.position, PointPos, 0.9f);//摄像机位置 根据注视目标点位置 进行偏移Vector3 cameraPos = watchPoint.position + finalVec;//弹簧移动效果 插值实现transform.position = Vector3.Lerp(transform.position, cameraPos, 0.2f);//摄像机始终看向 注视目标点transform.LookAt(watchPoint.position);}
}

Unity3D第三人称视角摄像机、跟随与球面旋转相关推荐

  1. Unity3D之第三人称视角相机跟随

    文章目录 前言 角色层级 挂载脚本 实现效果 后话 前言 这次实现类似绝地求生这个游戏中的 第三人称视角 的相机跟随 角色层级 直接把相机挂载到角色模型作为子级 调整好角度与位置,初步实现第三人称视角 ...

  2. 摄像机跟随之第三人称视角(一)

    在我们开发游戏的时候,总避免不了对摄像机的设置,当然,这也因为每款游戏类型不一样,所以摄像机的跟随或者说放置位置不一样,这也要求我们写出合适的算法.本篇就主要是针对第三人称视角的摄像机,进行算法设计分 ...

  3. Unity3D第三人称摄像机控制脚本

    好久没有敲Blog该.感谢您的留言.注意.私人信件和其他支持,但我似乎没有办法继续自己曾经写了一篇博客系列,因为我在网上找到有关unity3D太少的内容,U3D相关的文章!.. 第三人称视角 第三人称 ...

  4. Unity3D 人称设置(第一人称视角、第三人称视角)

    设置第一人称视角 1.把物体的坐标和摄像机的坐标设置成一样的,这样摄像机就在物体内部,就是第一人称的视角. 2.把摄像机拖拽进物体对象内,摄像机变成物体的子对象,这样摄像机就能跟着物体一起移动. 设置 ...

  5. [Unity3d]第一人称和第三人称视角完美切换

    最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂 ...

  6. Unity3d--实现第三人称视角(相机跟随)

    实现第三人称视角有三种: 方案1: 最简单的就是 直接 把主相机作为Player角色的子物体,并自行固定好相机的位置 方案2: 设置一个空的GameObject,并且与Player的旋转和位置保持一致 ...

  7. 我的世界java版mac切视角_我的世界怎么视角切换攻略 第三人称视角

    我的世界中除了常用的第一视角外,为了方便截图和视频拍摄还提供了第三人称视角,这个视角也就是从玩家的人物外观看玩家,镜头并不显示视线所及的摄像,而是从人物后方(0度/0弧度)或前方(180度/3.14弧 ...

  8. rust第三人称视角插件_一个第三人称游戏相机的实现(基于rust语言和cgmath库)...

    我在学校时就对角色扮演类3D游戏感兴趣,毕业那会研究过第三人称视角的游戏相机的实现(基于D3D),但由于没有想到合适的计算方法,最后实现出来的程序有BUG,并且没找出原因. 最近看到git有rust写 ...

  9. Spectator view——Hololens第三人称视角技术的详细实现过程

    Spectator view--Hololens第三人称视角技术的详细实现过程 距离微软发布首个不受线缆限制的全息计算机设备Hololens已经快过去三个年头,而随着新技术的不断出现,MR这一曾经&q ...

最新文章

  1. Apache学习路线
  2. 【leetcode】258. Add Digits
  3. Codeforces Round #350 (Div. 2) B. Game of Robots 水题
  4. 每日记载内容总结39
  5. hive udaf_Hive UDAF 函数的编写
  6. 【优化预测】基于matlab粒子群算法优化DBN预测【含Matlab源码 1420期】
  7. wp-autoblog_AutoBlog简介
  8. Itil v3 process model
  9. linux异步io缺陷,具有libaio性能问题的Linux异步IO
  10. fitbit手表中文说明书_fitbit感觉智能手表动手
  11. 白话前沿IT技术系列—云计算
  12. ctfshow 密码挑战(上)
  13. 深入理解扩展运算符实现原理
  14. 【高通SDM660平台 Android 10.0】(21) --- 高通Camera persist使用手册
  15. 关闭 Flink Checkpoint,引发 P3 故障
  16. rabbitmq添加插件和配置文件的添加
  17. 实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)
  18. [Linux学习笔记] 浅谈信号(文章含不少学习资源)
  19. 作为Gatekeeper,请守好交付质量关口(Quality Gate)
  20. java语音识别(科大讯飞版)

热门文章

  1. 用pytorch构造GELU激活函数
  2. MPI(OpenMPI和MPICH(IntelMPI、MVAPICH))和OpenMP
  3. dubbo负载均衡策略解析
  4. 小马哥---高仿苹果7P 主板A7136D系列刷机拆机主板图与开机识别多图
  5. 小马哥--高仿苹果7p s89p 6582 201709机型拆机主板图示
  6. 票据信息识别(Matlab)
  7. 虚幻商城ConfigBP的使用
  8. 非最大值抑制(NMS)(二)
  9. 2018年UCB61A--hog Fall
  10. [nowcoder]优美的回文串