unity简单复刻无敌破坏王
使用unity简单复刻无敌破坏王总结
国庆突发奇想想简单复刻一下无敌破坏王,这里写一些总结,希望也能对大家有帮助
游戏截图:
基本思路:
时间有限,也只是简单复刻,所以只实现破坏方块的功能,画面算是广义上的2.5D游戏吧。
素材的准备:
这里主要说一下建筑裂纹的生成:使用PS的拼贴滤镜可以有类似效果
人物代码:
移动部分是参考了油管上的一个YouTubers,但是不记得是谁了,总体上是参考的蔚蓝吧
移动:
x轴上的移动:
if (Input.GetAxisRaw("Horizontal") > 0){rb.velocity = new Vector3(Mathf.SmoothDamp(rb.velocity.x, WalkSpeed * Time.fixedDeltaTime * 60, ref velocityX, AccelerateTime), rb.velocity.y, 0);//WalkSpeed为设置的基础速度,AccelerateTime为加速速率,引入AccelerateTime与DecelerateTime是为了让移动显得更加自然sr.flipX = true;anim.SetBool("flip", true);}else if (Input.GetAxisRaw("Horizontal") < 0){rb.velocity = new Vector3(Mathf.SmoothDamp(rb.velocity.x, WalkSpeed * Time.fixedDeltaTime * 60 * (-1), ref velocityX, AccelerateTime), rb.velocity.y, 0);sr.flipX = false;anim.SetBool("flip", false);}else{rb.velocity = new Vector3(Mathf.SmoothDamp(rb.velocity.x, 0, ref velocityX, DecelerateTime), rb.velocity.y, rb.velocity.z);}
跳跃:
为了使得跳跃的手感更加好也更加符合我们的直观感受,所以在跳跃的时候调整重力,即跳跃上升的时候减小部分重力,下降的时候加大部分重力
平地跳跃:
//重力调整, FallMultiplier与LowJumpMultiplier都是自己声明的变量if (rb.velocity.y < 0){rb.velocity += Vector3.up * Physics2D.gravity.y * (FallMultiplier - 1) * Time.fixedDeltaTime;}else if (rb.velocity.y > 0 && Input.GetAxis("Jump") != 1){rb.velocity += Vector3.up * Physics2D.gravity.y * (LowJumpMultiplier - 1) * Time.fixedDeltaTime;}
墙面跳跃:
- 当人物处于攀爬状态跳跃时,我们给人物一个反方向斜向上的速度,并且在极短时间内禁止玩家操控,这样也能优化手感并且更复合人的直观感受
- 判断方向:
- 推荐单独写一个接受方向的函数
- 也可以直接判断Sprite的翻转或者判断接触的是左墙还是右墙
碰撞检测:
- 碰撞检测方式多样,人物与地面墙面的碰撞检测我是直接用的射线检测。
- 射线检测传送门:https://blog.csdn.net/paradox_l/article/details/120688209
- 攻击的碰撞检测:使用相交球检测
鼠标检测:
使用一个bool变量MouseDown来判断鼠标是否按下,按下为true,松开为false
点按与长按的检测,当MouseDown为true时开始计时,当大于某一个值时为长按
//鼠标检测void mouseDetection(){if(Input.GetMouseButtonDown(0)){mouseDown = true;mouseUp = false;hitCount++;/*hitCount的引入是为了记录上一次攻击状态,使得攻击动画播放连贯比如玩家鼠标单击一次后,角色出左拳,下一次玩家单击时则根据hitCount播放出右拳的动画*/}if(Input.GetMouseButtonUp(0)){mouseUp = true;mouseDown = false;}if(mouseDown){//click_time用于计时click_time += Time.deltaTime;}else{click_time = 0;}longPress =(click_time > 0.3f)? true: false;}
可破坏方块的代码:
游戏中有可产生裂纹的黑色方块,无裂纹的彩色方块,我这里就只是粗略的写了可破坏类,两者可以做为子类继承于可破坏类。
我想到的物体破坏的几种思路:
- unity有自带的破碎插件如Fracturing & Destruction
- 可以在达到一定的条件后销毁原物体并且在原物体位置生成一个已经切割好的物体(我是使用的这种方法)
- 可以直接修改网格点的坐标来实现改变形状的效果
物体破坏后力的添加:
- unity有添加爆炸力的函数
- 也可以直接用碰撞体的重叠来达到类似的效果
物体材质的改变来模拟裂纹:
//继承于可破坏类的黑色方块public Texture t1;public Texture t2;// Update is called once per framepublic new void Update(){if(i == 1){//re为renderer,已经在父类中获取re.material.mainTexture = t1;}if(i > 1){re.material.mainTexture = t2;}if(i>3){Instantiate(obj, transform.position, transform.rotation);Destroy(gameObject);}}
场景效果:
- 镜头抖动与镜头跟随都是直接由Cinemachine实现
- 背景霓虹灯效的偷懒实现:当物体重叠时会产生z-fighting的现象…
- 2D sprite应用3D光照:https://www.youtube.com/watch?v=flu2PNRUAso&t=1s
- shader已上传GitHub
游戏与代码下载
itch.io :https://craftx.itch.io/wrick-it
github:https://github.com/craft-l/Unity_project
ps:项目所用背景图片来源于武汉插画师@[小鱼JohnStone]
unity简单复刻无敌破坏王相关推荐
- [技美CG]Unity3D复刻UnityShader 之 ShaderToy - Bubbles
Unity3D复刻UnityShader 之 ShaderToy - Bubbles 背景: 官方地址/参考资料: ShaderToy-Bubbles原始代码: Unity复刻开始 核心显示类: 核心 ...
- 复刻 Unity编辑器 移动的方式
复刻 Unity编辑器 移动的方式 第一人称移动 自定义键值补充 代码搭载 老规矩,直接上代码: 第一人称移动 using System.Collections; using System.Colle ...
- Unity复刻骑砍中的帝国象棋(一)
Unity复刻骑砍中的帝国象棋(一) 起因和简介 这两天从一款游戏中发现了这么个棋类小游戏,觉得挺有意思,没错,就是下面这个: 作为程序员的我,一下就想到复刻它一下.这个棋类小游戏,我并不知道它确切的 ...
- Unity黑魂复刻经典教程心得(三)-CameraController
CameraController 1.根据角色的位置来计算camera的位置 targetLookAt = new GameObject("targetLookAt").trans ...
- 【Mib自看】黑魂复刻Unity脚本
[课程地址]B站傅老师Unity课程学习记录,仅代表个人理解. [自看]黑魂复刻Unity脚本 1.移动脚本 设计思路 2.动画 动画脚本:ActorController + 输入脚本:PlayerI ...
- Unity黑魂复刻经典教程心得(一)
b站上傅老师的黑魂复刻教程,是比较好的,傅老师风情幽默,值得种草 https://www.bilibili.com/video/BV1gW411T7yb?p=55
- 10年代码经验程序员UP主复刻“阴间”超级马里奥,获赞27万,马里奥:我头呢?
本文转载自 大数据文摘 <超级马里奥兄弟>是很多人童年的回忆,对B站up主"M木糖M"来说也不例外. 为了纪念自己的童年,我们这位代码经验丰富的up主决定自己动手复刻一 ...
- 游戏开发之路之“复刻或升级游戏”---地球末日生存
复刻之路-第一周.第二周 〇. 初始游戏计划 1. 人员安排 2. 内容安排 3. 计划安排 初期: 中期: 一. 开发进度 1. 第一周 - 学习背包系统和成就系统原理 - 画万能Sprite 2. ...
- 元气骑士 自建服务器,30分钟简易复刻《元气骑士》地图生成系统
对<元气骑士>这款游戏想必大家都不陌生. 元气骑士是由凉屋游戏工作室研发的一款角色扮演类游戏,于2017年2月17日发布. 游戏讲述了外星生物夺走维持世界的魔法石的故事,玩家将扮演骑士.刺 ...
最新文章
- WinPcap编程入门实践
- MPEG1 Audio介绍
- C# socket编程第三篇
- jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!
- 单节点hadoop部署成功
- Win32汇编——内存映射文件
- 【hdu2588】求[1-n]中和n的gcd大于m的数的个数(求欧拉函数值)
- ProceXP超级进程查看管理工具
- SwiftUI 内功教程之Closures 09 闭包捕捉价值Capturing Values及经典用法
- 【vue】移动端扫描二维码
- 自学MATLAB(四):特征值与特征向量
- 信用评分卡模型解决方案
- github ip映射
- 莫瑞茨:怎样分辨只想暴富的人和真正希望创业的人
- 2023年互联网算法岗位秋招八股文贴
- P1786 帮贡排序c++良心题解
- 关于 reCAPTCHA 验证码
- 经典网页设计:20个新鲜出炉的 HTML5 网站
- 电脑垃圾清理 -windows电脑裸奔必知技巧
- 祝贺萧老师诗书画专辑出版
热门文章
- 利用远程外网服务器搭建代理服务器
- 使用python爬取猫眼电影、房王、股吧论坛、百度翻译、有道翻译、高德天气、华夏基金、扇贝单词、糗事百科(糗事百科)
- Linux视窗系统:QT使用GPU渲染
- NLP指南 Your Guide to Natural Language Processing (NLP)
- NetWorkx Python API
- java util zip.zipexc,JAVA解压zip压缩文件的实例
- 微信移动端招聘项目总结
- CMake编译C++项目-简单范例-编译脚本-Linux
- activiti学习01
- 很实用的猫厕所排风排气扇