(关于其他几种角色移动的控制在我之前的博客有写到)

首先我们需要先理解一下第三人称相机控制的原理:
我们要实现的效果就是:获取鼠标的移动输入,转化成角色以及相机的旋转,通过鼠标输入Input.GetAxis(“Mouse X”)让相机围绕目标角色旋转(transform.RotateAround)角色通过相机改变的角度改变自身方向(Quaternion.Euler)。

那么先介绍一下transform.RotateAround(目标物体位置,轴,旋转角度)方法,这个方法是让自身围绕目标物体旋转,所以我们用

float inputX = Input.GetAxis("Mouse X");
float inputY = Input.GetAxis("Mouse Y");
transform.RotateAround(CameraPivot.transform.position, Vector3.up, rotateSpeed * inputX);
transform.RotateAround(CameraPivot.transform.position, TargetBody.transform.right, -rotateSpeed * inputY);

CameraPivot是相机的焦点物体(最好是设置角色的头部);
然后 我们将相机的这个旋转角度记录下来(transform.localEulerAngles),并且用Quaternion.Euler改变角色的面向;

Quaternion TargetBodyCurrentRotation = TargetBody.transform.rotation;
TargetBody.transform.rotation = Quaternion.Lerp(TargetBodyCurrentRotation, Quaternion.Euler(new Vector3(TargetBody.transform.localEulerAngles.x, transform.localEulerAngles.y, TargetBody.transform.localEulerAngles.z)), TargetBodyRotateLerp);

为了方便理解,给大家画一个示意图:


下面给大家简单操作一下!
还是先创建一个新的场景,里面添加一个plane和一个cube并且调整一下相机位置:

然后上代码!把代码加载摄像机上:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class cameraFollow : MonoBehaviour {[Header("相机距离")]public float freeDistance = 2;[Header("相机最近距离")]public float minDistance = 0.5f;[Header("相机最远距离")]public float maxDistance = 3;[Header("是否可控制相机距离(鼠标中键)")]public bool canControlDistance=true;[Header("更改相机距离的速度")]public float distanceSpeed = 1;[Header("视角灵敏度")]public float rotateSpeed = 1;[Header("物体转向插值(灵敏度,取值为0到1)")]public float TargetBodyRotateLerp = 0.3f;[Header("需要转向的物体")]public GameObject TargetBody;//此脚本能操作转向的物体[Header("相机焦点物体")]public GameObject CameraPivot;//相机焦点物体  [Header("是否可控制物体转向")]public bool CanControlDirection = true;private Vector3 offset;//偏移// Use this for initializationvoid Start () {//获取目标与相机之间的差值offset = transform.position - CameraPivot.transform.position;}void FreeCamera(){offset = offset.normalized * freeDistance;transform.position =  Vector3.Lerp(transform.position,CameraPivot.transform.position + offset,1f) ;//更新位置if (CanControlDirection)//控制角色方向开关{Quaternion TargetBodyCurrentRotation = TargetBody.transform.rotation;TargetBody.transform.rotation = Quaternion.Lerp(TargetBodyCurrentRotation, Quaternion.Euler(new Vector3(TargetBody.transform.localEulerAngles.x, transform.localEulerAngles.y, TargetBody.transform.localEulerAngles.z)), TargetBodyRotateLerp);}//限制相机距离if(canControlDistance)//控制距离开关{freeDistance -= Input.GetAxis("Mouse ScrollWheel") * distanceSpeed;}freeDistance = Mathf.Clamp(freeDistance, minDistance, maxDistance);//保证相机的注视transform.LookAt(CameraPivot.transform.position);//控制相机随鼠标的旋转float inputY = Input.GetAxis("Mouse Y");float inputX = Input.GetAxis("Mouse X");transform.RotateAround(CameraPivot.transform.position, Vector3.up, rotateSpeed * inputX);transform.RotateAround(CameraPivot.transform.position, TargetBody.transform.right, -rotateSpeed * inputY);//旋转之后以上方向发生了变化,需要更新方向向量offset = transform.position - CameraPivot.transform.position;offset = offset.normalized * freeDistance;transform.position = CameraPivot.transform.position + offset;}// Update is called once per framevoid FixedUpdate () {FreeCamera();}private void Update(){}
}

稍微配置一下参数:

之后 就有相机的初步效果了:

给cube添加上移动的代码 就完成啦!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Control : MonoBehaviour {float ver = 0;float hor = 0;public float turnspeed = 10f;public float speed = 6f;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {hor = Input.GetAxis ("Horizontal");ver = Input.GetAxis ("Vertical");}void move (float hor, float ver) {transform.Translate (hor * speed * Time.deltaTime, 0, ver * speed * Time.deltaTime);}void FixedUpdate () {if (hor != 0 || ver != 0) {//转身move (hor, ver);}}}


完成!

Unity第三人称射击游戏的相机控制相关推荐

  1. unity第三人称射击游戏_在游戏上第3部分完美的信息游戏

    unity第三人称射击游戏 Previous article 上一篇文章 The economics literature distinguishes the quality of a game's ...

  2. Unity 第三人称射击游戏视角控制与武器瞄准

    ===================更新一下源工程链接: 链接:https://pan.baidu.com/s/15bxH-MPregp2ZIN92fK7XA 提取码:e7bp ========== ...

  3. unity 第三人称射击游戏中如何防止跟随摄像机穿墙?

    在制作3d射击类游戏中,会遇到跟随角色的摄像机会穿透墙壁导致视野不佳情况,下面,介绍一下具体的解决方法. 我们需要用到的原理就是unity中射击线函数.具体的原理是,从相机的跟随点向相机的方向发射一条 ...

  4. 【Unity】第三人称射击游戏开发过程之瞄准状态设计(TPS.S.P1)

    [Unity]第三人称射击游戏开发过程之瞄准状态设计(TPS.S.P1) 设计整体的结构与模式 瞄准状态的设计 瞄准相机 瞄准状态 瞄准时的鼠标移动速度限制 瞄准点的处理 角色在瞄准状态下的旋转 瞄准 ...

  5. 【Unity】第三人称射击游戏开发过程之开火设计(TPS.S.P2)

    [Unity]第三人称射击游戏开发过程之开火设计(TPS.S.P2) 枪械的开火 开火流程 开火前的准备 实体子弹的准备 开火逻辑 这一章我们来设计基础的枪械功能. 枪械的开火 我现在选择的武器是41 ...

  6. Unity制作第三人称射击游戏-成为创新游戏开发者学习教程

    用Unity游戏引擎学习和制作第三人称射击游戏-成为创新游戏开发者- TPS战地克隆 你会学到什么 Unity 3D游戏开发 如何打造TPP第三人称射击游戏 第三人控制者 第三人称动画 第三人运动控制 ...

  7. 视频教程-Unity3D实战入门之第三人称射击游戏(TPS)-Unity3D

    Unity3D实战入门之第三人称射击游戏(TPS) 6年程序开发经验,精通C/C++/C#编程. 曾担任过Unity3d游戏开发主程和Unity3d游戏开发讲师,熟悉Unity3d的UI系统.物理引擎 ...

  8. Unity3D实战入门之第三人称射击游戏(TPS)-伍晓波-专题视频课程

    Unity3D实战入门之第三人称射击游戏(TPS)-327人已学习 课程介绍         这是一套第三人称射击游戏开发的入门基础课程. 本课程以一款小型的第三人称射击游戏为案例,手把手教你如何搭建 ...

  9. YGG 购买了 AAA 级第三人称射击游戏《Nyan Heroes》的 Genesis NFT

    Yield Guild Games(YGG)已经购买了<Nyan Heroes>的Genesis NFT,<Nyan Heroes>是一款建立在 Solana 区块链上的第三人 ...

最新文章

  1. codeforces1700数学:E2. Close Tuples (hard version)[组合计数 逆向统计] D. Circle Game[对称博弈考虑对称状态的胜负]
  2. 适用于任何数据可视化需求的国外10个最佳JavaScript图表库
  3. 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
  4. python中 [ 闭包 ] 小结
  5. 【C Sharp笔记】2010年9月25日
  6. gephi生成网络关系图_用 NetworkX + Gephi + Nebula Graph 分析lt;权力的游戏gt;人物关系(上)
  7. POJ 3414 Pots(BFS + 打印路径)
  8. PIE SDK波谱运算
  9. python命令行参数作用_python中命令行参数和os模块常用函数
  10. pandas训练集测试集划分_用pandas划分数据集实现训练集和测试集
  11. 74cms php在那个文件夹里面,74cms后台getshell
  12. 【iOS逆向与安全】frida-trace入门
  13. 百度地图 创建应用
  14. 杨辉三角php程序,PHP写杨辉三角实例代码
  15. 【BeEF】Ubuntu 20.04安装BeEF
  16. 王者荣耀天赐语音包怎么获得?天赐语音包获取方法介绍
  17. Java程序出现不正常情况
  18. 概率分布分位点_概率统计计量经济学_假设检验中的重要概念_分位点/p值
  19. 极简科普 1:什么是 VOIP
  20. SIMD——MMX指令的溢出处理

热门文章

  1. 暗黑破坏神2重置版 反调保护分析
  2. USDT-TRC20通道系统介绍
  3. OpenCv图像平滑
  4. wow无法向该服务器发送信息,魔兽世界:玩家无法解决的广告刷屏,却给服务器维护解决了...
  5. php echo语句,PHP echo和print语句
  6. 推荐一个科研党的翻译神器
  7. DDD系列 实战一 应用设计案例 (golang)
  8. 【狮子数学】chapter2-06-极值与最值
  9. 计算机保研面试常见问题(408计算机网络简答题)
  10. 图解电动汽车:电动汽车电池系统