| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 阅读Unity2D书时本菜新遇到的一些问题与尝试解决的方案 -> 正文阅读 |
|
[游戏开发]阅读Unity2D书时本菜新遇到的一些问题与尝试解决的方案 |
有时候会遇到一些情况,脚本和unity编辑器写得都跟书上一模一样效果却还是不尽如人意,这时候重启一下unity,或者什么把脚本代码剪切再粘贴就好了。玄学 这些if之间的顺序会影响往斜上走时是显示上的动画还是左右的动画 tracked object offset 相机偏离人物中心程度 damp:相机回拉时的缓慢、迅速 自制条目方便使用 人物显示不出来可能是因为z轴出了问题 z轴按理来说应该是0? 注意预制件之间的引用也要用预制件,不然会死得很惨【萌新做到后面快吐了】 看不懂这啥玩意 书本p169 这时候我感觉只移去playerobject有所不妥?感觉报了一万个错,什么healthBar和Inventory都没有一个引用的对象了,可能是我之前预制件的部分处理得不好 我的解决方法是,删去hierarchy中的healthBar和inventory,并设置好预制件之间的关系。但是还有一个问题,就是虚拟摄像机也需要一个Player对象跟随,如果贸然拖上去Player预制件,会发现,RPGGameManager创建的那个static sharedInstance里跟随的那个player对象,跟此时虚拟摄像机里的player对象是两个东西,感觉此时的player也应该有单例思想。于是乎,为了同步虚拟摄像机和sharedInstance的两个player对象,我先给RPGGameManager中的player方法字段改成了实例字段,再为虚拟相机添加一个用代码来填充实例对象的脚本。具体代码如下图: 对RPGGameManager类的修改:(改造字段) 虚拟摄像机新脚本ControllingAim: 解释说明:1.由于要附加到虚拟摄像机上,故派生自MonoBehaviour 2.得到该虚拟摄像机的CinemachineVirtualCamera组件 3.修改组件的Transform类型的Follow属性,使它不断与sharedInstance的player更新对接 注:这里我是怎么写出这段代码的呢?可以右键虚拟摄像机的CinemachineVirtualCamera组件,点击EditScript,就可以跳转到follow所在的这个组件的定义。注意到Follow属性的类型是Transform,联想到Transform表示的是位置,又联想到似乎.transform可以获取到一个GameObject的类型为Transform的位置,so。 此时的hierarchy栏: ?这时候我上手发现,还会有强烈的抖动。此时我把look at改成了空,把下面那个以前用来减少抖动的脚本取消勾选了,此时反而不抖了 草,结果读下去发现书写了解决方法。。。。 他这句话很骚:在当前Scene找到VirtualCamera这个gameobject。我超,我上面好像有一瞬间就是因为不知道怎么在别的脚本获取虚拟相机,才转而求其次给虚拟相机弄上一个设置实例的方法的,不然就可以直接获取虚拟相机然后设置实例,而不必弯弯绕绕。?不过也不会很绕就是了。 需要有什么碰撞时触发之类的,一定记得勾选IsTrigger!! 协程(方法太长不能在一帧来一次、固定时间间隔调用方法) 不知道为啥敌人漫游第一步全都往右走? 关于漫游的代码Wander.cs 我对这两句yield组合技出现的时机非常奇怪。? 但是想了一下才发现,原来yield是针对一个协程的 对于第一个协程(循环)来说,执行完开始协程后停留不改变方向的时间,然后再执行下一轮循环改变move方向 对于第二个yeld,则是每次边move边更新状态 我超,醍醐灌顶的感觉。但是不知道为什么这里必须return WaitForFixedUpdate? 关于勾选IsTrigger的问题: 我试图增加一个DeadZone的sprite ? 其中boxCollider是由于调试的gizmos。 因为这里方法是OnTriggerEnter2D,所以deadzone精灵的istrigger应该得勾选,这个是没问题的。 然后问题出在哪呢,我发现,不勾选deadzone的istrigger,勾选player的,player还是会寄。同理,enemy有两层collider,外面那层圈由于勾选了istrigger,所以碰到deadzone就即死了,完全体现不出原有的效果啊。 所以似乎这里不用OnTriggerEnter2D,用OnCollisionEnter2D,此时不用勾选istrigger。 感觉稍微理解了一些什么是“碰撞”了。它不仅可以是物理上碰到【collision】,也可以是判定范围上的遇到【trigger】。因而,前者不能“穿过”,后者可以“穿过”。 update会不会就是一种协程?类似语法糖? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 18:35:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |