CAPCOM的神作:DMC鬼泣系列在游戏市场一直时饱受好评的。最近出的鬼泣5在前段时间可谓是掀起了不小的游戏风浪。个大直播平台都有主播在玩。

在几年前玩过鬼泣4,被游戏设定的情节深深的吸引了,所以对鬼泣4我有着较高的评价,玩了鬼泣5,虽然手残但依然好评!

在接触了Unity之后,就想复刻一下游戏中主角摄像机和主角的移动方式,我觉得这样的移动方式比较人性化,玩家体验会很好。

首先先讲一下大概的复刻目标:

当左右旋转鼠标时,摄像机围绕着主角旋转,当玩家按下A、D键时,主角在相机视野左右移动,其实实在围绕着摄像机在转圈圈。当玩家按下W键时,主角转向此时摄像机的前方方向然后向前走,按下S键时,主角面向摄像机移动。

大概就是这么个思路。具体可以看下动图。

接下来就是实践了。

首先是摄像机。直接放代码:

public class CameraFollow : MonoBehaviour
{public Transform lookPos;  //看向的位置public Transform lerpPos;  //插值的位置public float dist;     //摄像机public float followSpeed = 10;  //跟随速度public float rotateSpeed = 10;  //旋转速度private void Update(){//锁定鼠标指针if (Input.GetButtonDown("Fire1") && Cursor.lockState != CursorLockMode.Locked){Cursor.lockState = CursorLockMode.Locked;}else if (Input.GetKeyDown(KeyCode.Escape) && Cursor.lockState == CursorLockMode.Locked){Cursor.lockState = CursorLockMode.None;}float horMouse = Input.GetAxis("Mouse X");  //获取鼠标左右移动transform.RotateAround(lerpPos.position, lerpPos.up, horMouse * Time.deltaTime * rotateSpeed);//设置摄像机旋转Vector3 tempPosition = lerpPos.position + (transform.position - lerpPos.position).normalized * dist;//设置摄相机跟随transform.position = Vector3.Lerp(transform.position, tempPosition, Time.deltaTime * followSpeed);transform.LookAt(lookPos);//看向指定的位置}
}

其中 lerpPos和lookPos,是预先设置的绑定在玩家身上的空物体。(比较懒,所以就直接用的比较简单的处理方法)

然后看主角的相关信息。

看下我的动画状态机。

状态机中就两个简单的不带位移的动画,执行条件也很直观。

代码:

public class PlayerMovement : MonoBehaviour
{public Animator anim;    //动画状态机public float moveSpeed;     //移动速度public float rotateSpeed;   //旋转速度public AudioSource aS;       //AudioSourse组件 用来播放 脚步声public Transform myCamera;   //摄像机组件// Update is called once per frameprivate void Update(){Movement();}/// <summary>/// 移动/// </summary>private void Movement(){float ver = Input.GetAxis("Vertical");          //获取轴float hor = Input.GetAxis("Horizontal");if (hor != 0 || ver != 0)  //如果 条件成立 则表明 按键被按下了已经{if (!anim.GetBool("move"))         //播放动画 和 声音{anim.SetBool("move", true);aS.Play();}//获取旋转的方向Vector3 tempV = Vector3.ProjectOnPlane(myCamera.right * hor + myCamera.forward * ver, Vector3.up);Quaternion dir = Quaternion.LookRotation(tempV);transform.rotation = Quaternion.Lerp(transform.rotation, dir, Time.deltaTime * rotateSpeed); //旋转插值transform.position += transform.forward * Time.deltaTime * moveSpeed;   //移动代码}else{if (anim.GetBool("move")) //停止播放 动画和 脚步声{anim.SetBool("move", false);aS.Stop();}}}
}

其中获取方向的这句  

Vector3 tempV = Vector3.ProjectOnPlane(myCamera.right * hor + myCamera.forward * ver, Vector3.up);

我们获取 myCamera.right * hor 来控制左右,然后 myCamera.forward * ver 来控制前后,两个向量相加就能得到混合后的方向。注意, myCamera.forward 指向的可是lookPos ,所以我们需要拿 计算所得到的 tempV 在水平面上投影,就能得到正确的方向。

下边是 效果视频 在B站:点我点我

【Unity-学习-004】如何制作 鬼泣5 中主角和摄像机的移动、旋转方式相关推荐

  1. Unity学习记录:制作双屏垃圾分类小游戏

    一:逻辑梳理 要实现的功能 游戏操作 在规定时间内,垃圾通过拖拽进入正确垃圾桶的容器,垃圾在这里消失,飞入第二个屏上对应垃圾桶的位置并实现加分和加时间的效果,垃圾拖拽进入不正确的垃圾桶,垃圾会返回到原 ...

  2. 【Unity学习笔记】Unity中的欧拉角(Euler Angle)和万向节(Gimbal)

    声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨.可作参考,但不保证绝对正确.如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦. 目录 1 奇怪的现象 1.2现象一 1.2 现象二 1. ...

  3. Unity学习笔记1 简易2D横版RPG游戏制作(一)

    这个教程是参考一个YouTube上面的教程做的,原作者的教程做得比较简单,我先参考着做一遍,毕竟我也只是个初学者,还没办法完全自制哈哈.不过我之前也看过一个2D平台游戏的系列教程了,以后会整合起来,做 ...

  4. Unity学习之Human fall flat创意工坊地图制作

    Unity学习笔记之Human fall flat 主要参考<人类一败涂地>官方教程 Unity版本 详细教程获取 开始工程导入 素材包介绍 界面介绍 工具简介 常用组件简介 多人游戏组件 ...

  5. 木木的Unity学习笔记(四)—— Unity中的柏林噪声(Perlin Noise)

    木木的Unity学习笔记(四)-- Unity中的柏林噪声 柏林噪声是一个非常强大算法,经常用于程序生成随机内容,在游戏和其他像电影等多媒体领域广泛应用.算法发明者Ken Perlin也因此算法获得奥 ...

  6. unity学习笔记2-卡牌游戏的制作

    unity学习笔记2 需求:制作卡牌游戏 第一步,建立card类,carddatabase类 card类删除自带的start和update方法,因为只是个对象类,负责装载对象即可 carddataba ...

  7. [Unity学习笔记:FPS游戏制作(2)] 发射子弹————(2021.6.20学习笔记)

    往期博客 [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升----(2021.6.13学习笔记) 文章目录 一,实现思路 二,实现代码 三,脚本的使用方法 四,最终效果 一,实现 ...

  8. Unity学习笔记—二次元日系游戏制作(实践篇-游戏初始化场景制作)

    原教程:siki:二次元日系游戏制作工具 - live2dSDK入门教程 http://www.sikiedu.com/my/course/282 (上)Unity学习笔记-二次元日系游戏制作(理论篇 ...

  9. [Unity学习笔记]2D游戏中的触碰/OnMouseDown

    [Unity学习笔记]2D游戏中的触碰/OnMouseDown 这种情况多用于2D游戏的触屏 1.给2D游戏对象加上collider 2D,让其能够被检测到

最新文章

  1. 适用于芯片验证工程师的atom插件列表
  2. 成功解决\h5py\__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float
  3. 本地yum仓库和http方式的yum仓库。
  4. arduino电源接口直径多大_求助:Arduino UNO(如下图)有三种供电方式:USB供电,5v(供应芯片,下面一排接口中“...
  5. MySQL数据库安装-Windows10为例【超级详细安装过程(每一步的截图)、检测安装是否成功、登录数据库并查看版本号、将MySQL添加到环境变量中、在命令行窗口操作数据库】
  6. MySQL中count(1),count(*),count(某字段)等用法联系和区别
  7. LQ训练营(C++)学习笔记_深度优先搜索
  8. linux配置php项目路径,linux下如何修改php.ini路径
  9. 面试招聘——操作系统专场(一)
  10. Python 基础---列表
  11. tuples_高频词汇统计
  12. iOS 评论中含有表情的处理方法
  13. 【转(比较全面)】CSS3弹性盒模型之Flexbox是布局模块box-sizing box-orient box-direction box-ordinal-group
  14. linux sd卡 驱动程序,详解linux 驱动编写(sd卡驱动)
  15. python模块 -- pymysql
  16. auto.js悬浮窗按钮的实际使用
  17. java计算机毕业设计培训机构运营系统源码+程序+lw文档+mysql数据库
  18. 【ReID】局部特征
  19. 阿里云免费SSL证书过期替换
  20. 深度学习 卷积神经网络原理

热门文章

  1. 判断图片通道数及图片三通道转单通道方法
  2. ContentProvider之ContentResolver
  3. LeetCode刷题—第一周
  4. 机器学习系列8 基于Python构建Web应用以使用机器学习模型
  5. 同花顺软件前端开发笔试题目
  6. 请你推理出哪位小姐养蛇。有五位小姐排成一排,她们姓,衣服颜色,喝的饮料,养的宠物,吃的水果各不相同
  7. cmd关机计算机名称,CMD远程关机 -电脑资料
  8. 怎样把iPhoneX手机备忘录同步到华为p20手机上?
  9. JSONObject对象与JSON转换
  10. [资料] 555集成电路应用800例(新编版)