文章目录

  • 对比前一天没看任何教程做的东西,看了教程的我顿悟了!(涉及多个高能知识点,建议保存)
    • 关于绘制地图
      • 昨天
      • 今天
    • 关于摄像机跟随
      • 昨天
      • 今天
    • 关于2D游戏中的UI
    • 昨天
    • 今天
    • 关于动画状态机的状态设置
      • 昨天
      • 今天
  • 关于前两天所说的动画只有向右的,我们如何在按下向左走时得到向左的动画,原来不止有一种方法
    • 利用SpriteRender中的Flip X
    • 利用localScale自身缩放
    • 利用eularEngle自身旋转
  • 优化手感,适配各类机型,Update和FixedUpdate函数的区别
  • 目前个人关于unity的部分规范
  • 感谢大家!

对比前一天没看任何教程做的东西,看了教程的我顿悟了!(涉及多个高能知识点,建议保存)

昨天花费了一天的事件,各种方面的考虑太多了,各种写代码,还浪费了很多时间。
今天看了一下一些教程,我整个人都

我昨天一天都干了些什么呀!果断关掉unity,新建了一个项目
不过上面真的有很多值得学习的知识点以及插件!!
下面带大家看一看,学习一下!

关于绘制地图

昨天

我是纯靠资源包中的精灵一个一个拖进地图中的,然后Ctrl+D复制,这样费时费力,还容易出现地图脱节的情况!

今天

在Hierarchy中创建2D object中的Tilemap,在右边创建画板Palette,便能在左边的Scene地图中像画画一样创建地图啦!(我建议事先想好建立几个Tilemap,因为有的作为边界是需要碰撞的,而有的作为点缀则不需要碰撞。同时设置好它们的Order In Layer)

创建好Tilemap后,不会直接出现Tile Palette面板,所以怎么打开Palette面板呢?

具体的知识点有点多,而且我自己用的也不是很熟练,给大家一个b站的链接看一下简单操作吧!
链接: https://www.bilibili.com/video/BV1ME411K7wF.

关于摄像机跟随

昨天

我是利用的两个摄像机,靠自己写的一个摄像机跟随的脚本,利用的Vector3中的插值函数Lerp实现的。类似于童年的游戏松鼠大作战,玩家到达距离右侧屏幕一定距离的时候,屏幕才会向右移动。

  1. 函数实现
public class CameraFollow : MonoBehaviour
{private Transform transform;private Transform player;private void Awake(){transform = GetComponent<Transform>(); player = GameObject.FindWithTag("player").transform; //找到player的transform}// Update is called once per framevoid Update(){if (player.position.x >= transform.position.x) // 判断摄像机与玩家的位置的x大小{transform.position = Vector3.Lerp(new Vector3(transform.position.x, transform.position.y, transform.position.z), new Vector3(player.position.x, transform.position.y, transform.position.z), 0.3f);}}
}
  1. 在这里可能就有小伙伴问了,为什么没有设置向左跟随?本来我是想设置的,先找到开始的相机与玩家的距离为最大距离,超过这个距离,则摄像机向左移动,保持这个最大距离。但是我想到很多游戏不支持镜头向左移动,所以我就没加这个。
  2. 但是,问题又又又来了,不写摄像机跟随玩家向左,那么玩家一直向左走,不就走到摄像机外面,看不到了嘛?那么这时候就要轮到我们的空气墙出场了。空气墙,也就是没有图像,但是有碰撞体的东西。

    但只有这面墙还是不够的,只是不让我们在边界时走出摄像机的范围。因此,我们还要在这面墙上放上空气墙跟随的脚本(注意这里跟随的对象应该是摄像机)
public class AirWallFollow : MonoBehaviour
{private Transform camera;private Vector3 OriginDir;// Start is called before the first frame updatevoid Start(){camera = GameObject.FindWithTag("followcamera").transform;OriginDir = camera.position - transform.position;}// Update is called once per framevoid Update(){transform.position = Vector3.Lerp(transform.position, camera.position - OriginDir, 0.5f);}
}
  1. 虽说实现了摄像机的跟随, 但还有很多不合理的地方,而且写起来又难受有麻烦,很多功能还实现不了。比如屏幕的移动并不算平滑,感觉有点抖动的感觉。

今天

cinemachine横空出世,只需要调整参数即可完美实现摄像机跟随的效果。我将介绍cinemachine的部分重要参数功能。
当然,一开始我还在想这资源要不要钱什么的!

结果发现,这货现在是unity自带的插件,在package manager里就能下载到。ohhhhh!!!
使用方法明日介绍。

关于2D游戏中的UI

昨天

昨天创建UI,想在屏幕左侧加上一个目前有几格血的代码,结果发现这个创建的画布怎么这么大,而且大小也无法更改

于是我做了一个很沙雕的决定:在摄像机能照到的左上角放入了我需要作为血量的几张图片,然后做了一个血量跟随摄像机的代码。

代码与空气墙跟随的代码几乎一样,这里就不赘述了。
但是这样的问题就是会出现,这个血量图片一直在抖动的鬼畜现象!

今天

终于知道了,这个画布是不受我们看到的Scene视图中大小的影响的,无论怎么样都是会显示到我们的屏幕中的。设置这么大是unity自带的,是因为unity不想让我们在设置画布时与地图重合,这样我们可以更好的控制调整画布中每一个UI的位置和大小。所以,我又可以放心大胆的设置UI啦,加入了血量,暂停键,音量键和退出键。

关于动画状态机的状态设置

要问unity中最能装b的神器是什么,那还得是动画状态机。

昨天

一开始我只设置了几个状态,但后来发现总是会出现向左走转到向右走的过程中会莫名其妙有个idle的动作导致动作的连接不顺畅以及从走的状态转换到跳的状态转换不过去只能原地跳的情况。然后我就各种鼓捣设置,最后就变成了这样:

[真·乱七八糟]

今天

原来我们可以通过一些设置解决这个问题,下面介绍几个关键的属性:

  1. Has Exit Time:有无退出动画时间,也就是在这个过程中必须等待idle的动画执行完在执行run的动画。默认勾选,在这里很明显,我们肯定是取消的,因为我们希望我们一按左右键就跑起来,不能出现动画还在idle状态,玩家就向左右走了。一般都是取消勾选的,但也看情况,如hurt受伤动画则需要等受伤动画执行完再回到idle状态。
  2. Fixed duration:固定时间的转换状态,一般我都是取消。
  3. Transition Duration:转换状态所需要的时间,问题就在这里了,一直困扰我的原因就是由于各种状态之间转换需要时间,才会出现向左走转到向右走的过程中会有个idle的动作导致动作的连接不顺畅的情况。这个时间一定要设置为0。

关于前两天所说的动画只有向右的,我们如何在按下向左走时得到向左的动画,原来不止有一种方法

注意:后两种方法必须使用刚体中的transform,否则将出现空引用错误。
nullReferenceException: Object reference not set to an instance of an object

利用SpriteRender中的Flip X

 if(hor < 0){GetComponent<SpriteRenderer>().flipX = true;}else if(hor > 0){GetComponent<SpriteRenderer>().flipX = false;}

利用localScale自身缩放

if (hor != 0){_rigidbody2D.transform.localScale = new Vector3(hor, 1, 1);}

利用eularEngle自身旋转

if(hor < 0)
{_rigidbody2D.transform.eulerAngles = new Vector3(0, 180, 0);
}
else if(hor > 0)
{_rigidbody2D.transform.eulerAngles = new Vector3(0, 0, 0);
}

优化手感,适配各类机型,Update和FixedUpdate函数的区别

Update是每帧执行一次,但由于各种机型处理器并不完全相同,帧率也就不同,特别是刚体的运动,会导致在其他机型上的运行并不流畅。而FixedUpdate是固定的时间执行,即每0.02秒执行一次,一秒要执行50次,在所有机型上都是一样的执行速度。因此建议将刚体的运动都写在FixedUpdate函数中。

目前个人关于unity的部分规范

1. 定义物体上的私有组件名称均使用下划线加组件名。
2.对物体上的物理作用进行操作,要写在FixedUpdate函数中。
3.尽量将代码块分开,面向对象,易于维护。
4.动画状态机中根据需求取消has exit time和fixed duration、Transition Duration。
5.尽量使用虚拟轴和虚拟按键。
6.跳跃可以尝试改变重力的倍数来达到更真实的感觉。gravityscale
7.跳跃的盒子碰撞检测必不可少,利用关键帧的方法是不对的,因为会出现动作无法执行完的情况。
8.调试方法:可以使用debug.log的日志调试或者DrawOnGizmos画图调试.

感谢大家!

最后,感谢一下大家的支持!!!虽然不是那么厉害,但看到这个,确实也让我挺受鼓励的!希望这些文章给我帮助的同时也能给正在学习unity的朋友一些帮助,少走一些弯路。

2021-9-1 unity实践出真知相关推荐

  1. 反思供应链项目:实践出真知 多反思提升效率的方法

    获得的提升: 代码能力  沟通能力  思维能力  变通能力  使用代码工具的能力  知识面 都有了提升 得到的认知: 1.实践出真知 2.实际做了才是自己的,只是看明白了,不是自己的 3.加班加的也是 ...

  2. 实践出真知之Spring Cloud之基于Eureka、Ribbon、Feign的真实案例

    转载自  实践出真知之Spring Cloud之基于Eureka.Ribbon.Feign的真实案例 Eureka是Spring Cloud Eureka的简称,是Netflix提供的组件之一.通过E ...

  3. qnap raid5升级raid6_实践出真知!100TB的RAID5到底能否重建成功?

    实践出真知!100TB的RAID5到底能否重建成功? 2019-04-04 18:40:37 390点赞 996收藏 419评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励 ...

  4. 「实践出真知」如何打造一流的视觉AI技术

    分享嘉宾:邓亚峰 格灵深瞳 CTO 内容来源:AI先行者大会<如何打造一流的视觉AI技术> 出品社区:DataFun 注:我爱计算机视觉获官方授权发布 本次分享主要分以下几个部分:首先简要 ...

  5. Unity3D网络游戏实战——实践出真知:大乱斗游戏

    前言 这一章是教我们做一个大乱斗游戏.但是书中的代码有些前后不一致导致运行错误,如果你也碰到了这样的情况,可以参考我的代码 我们要完成的主要有以下这些事 左键操控角色行走 右键操控角色攻击 受到攻击掉 ...

  6. 实践出真知!7步搞懂分布式全内容,技术总监都拍手叫好

    开头 在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能.美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了- ...

  7. 实践出真知:博云微服务经验之避坑指南

    目前每个企业都想做微服务,但如何做好微服务?微服务改造过程中有哪些必须重视的问题?博云通过自己的实践,总结了一些经验之谈.日前InfoQ对博云高级解决方案架构师赵安全就此话题进行了专访,以兹各位对微服 ...

  8. 实践出真知:全网最强秒杀系统架构解密!!

    很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中 ...

  9. DevOps方法论掌握这四点,实践出真知

    01. 需求管理模型和敏稳双态开发 在研发产品之前,我们都需要先了解客户的需求.常见的需求理论模型有三种,可基于不同业务和产品复杂度的需求层次结构进行选择. 简单的业务和产品:拆分成两层,产品需求➡技 ...

最新文章

  1. asp.net 生成下载word的两种方式
  2. 末端物流 | 快递驿站的产品逻辑
  3. 安卓webview子线程网络请求,怎么获得结果?
  4. 剑指offer之中序打印二叉树(非递归实现)
  5. 计算几何 - XOJ 1171 线段求交
  6. linux性能监控命令
  7. python + mysql 实现账号管理系统
  8. jni回调android子线程,如何在android的jni线程中实现回调
  9. Linux卡巴斯基杀毒(kesl)基础操作
  10. 惠普服务器硬件检测软件吗,惠普硬件检测工具DST HP PC Hardware Diagnostics UEFI 6.8.0.0 Rev.A 使用方法...
  11. win10系统开启扫描仪服务器,win10通用扫描仪安装步骤
  12. qq撤回的消息会在服务器,如何查看qq撤回的消息_查看qq被撤回消息的方法
  13. linux 系统安装Iso,linux系统安装iso文件方法
  14. MT7628实现Amazon alexa语音控制
  15. Windows家庭版添加本地组策略编辑器的方法
  16. 计算机领域十大世界难题,最强思维碰撞:世界十大逻辑难题
  17. Vue中JSX的基本用法
  18. RxJava操作符学习APP
  19. 3年半工作经验女程序员,聊聊程序员的薪水、工作内容和发展前景
  20. 小马哥 ------高仿三星S5刷机 高仿三星G9006系列拆机主板机型图与开机界面图

热门文章

  1. 安装html5 win7,win7官方正版64位系统安装教程
  2. 如何通过QQ群做网站推广
  3. javascript 实现中文按照拼音首字母排序
  4. 轻量化规划调度引擎——OptaPlanner简介
  5. 为什么阿里云ACE考试变难了?以后还能考吗?
  6. Ansible 进阶 | 动态 Inventory
  7. 获取Google Advertising ID作为唯一识别码
  8. 三菱PLC 通讯 python代码
  9. qt中glMultiTexCoord2fARB报错
  10. 校园导航系统之用弗洛伊德算法求加权图的最短路径