当前位置: 首页 > article >正文

Unity问题记录

一个物体在Scene窗口看不见Game窗口能看见。选中它时打开Gizmos也看不见身上碰撞体的线框。也无法被射线检测到。换成其他MeshOpen Asset In Context正常显示把它Revert回预制体还是不显示。Ctrl D复制一个正常显示。把MeshFilter填入其他模型也不显示但是物体显示橙色轮廓把Scene复制一份复制的场景里正常显示。原因hierarchy左侧点了不可见。射击射线方向设置为枪的z轴正方向使用Debug.DrawRay()画出的射线在两种情况之间不停变化。此时人物的Chest用了Aim Constraint组件把这个组件关掉这个现象的就消失了射线很平稳。推测原因AimConstraint组件在不停改变Chest的旋转Debug.DrawRay()如果在Update里执行好像在一帧里Update()和AimConstraint执行的顺序是不一定的有些帧Update()执行时AimConstraint组件还没有改变Chest的旋转Chest的朝向还和没有AimConstraint一样它的子物体机瞄相机forward方向发出的射线也是原来的方向。把人物仰起来进一步证实了这个猜想两条射线一条是仰起的一条还是平的。解决方法在LateUpdate()里调用计算射击射线的起点和方向的代码可保证计算射线起点和方向时AimConstraint已经对Chest的旋转做过改变。好像在一帧里LateUpdate()总是在AimConstraint之后执行。Aim Constraint约束的物体旋转不对想让人物头的z轴朝向小球结果变成了这样原因Aim Constraint里的Constraint Settings设置了Rotation Offset的Y为90.使用IK调整手的位置但是手的位置不在IK的位置有偏差左手IK是枪的子节点。坐标轴标识的是左手IK的位置明显在左手下方。又在人物的Chest下建了个子节点作为左手IK目标发现手能被完美拉到IK目标的位置。又做了几个实验不改变IK目标的位置只改变父节点左手的位置确实会变化做Neck的子节点手在IK目标处做Head的子节点手在IK目标下方做Right wrist的子节点手在IK目标上方大概规律假设被约束物体和IK目标的最低级共同父节点是PIK目标最多可以做P的一级子节点而没有偏移。这里枪和左手的最低级共同父节点是ChestIK目标作为Chest及其一级子节点Right shoulder、Neck的子节点时没有偏移从Right shoulder的一级节点Right arm开始往下Neck的一级节点Head开始往下IK目标做这些节点的子节点时会出现偏移。但是这不合理设置IK的方法接收的只是一个Vector3和一个Quaternion这几个方法根本不知道给它们位置和旋转数据的节点是谁的父节点。后来发现还是因为AimConstraint组件。我给Head加了AimConstraint组件由前面的经验知道在某些帧执行Update()的时候AimConstraint是不生效的。这里可能IK用的是AimConstraint生效前的IK位置窗口里显示的是AimConstraint生效后的位置。把Head的AimConstraint关掉确实IK位置和右手一致了。可以得出结论OnAnimatorIK()执行的时候AimConstraint还没有生效但是手动把IK拖成Head的子节点时AimConstraint是生效了的且Scene里显示的是AimConstraint生效后的位置。或者说如果IK目标是一个带有AimConstraint的物体的子物体那么用来约束时用的是没有启用AimConstaint时IK的位置。下面的实验可以进一步证明这一点把IK作为Head的子物体通过改变AimConstraint的参数使头部转动可以改Sources物体的位置也可以改Aim Vector、Up VectorIK的位置并没有变右手的位置也没有变。那么有没有方法让OnAnimatorIK()使用AimConstaint生效后的IK位置或许可以在LateUpdate()里把IK的位置和旋转存在变量里再传给OnAnimatorIK()我试了IK是能跟头一起运动了但是有滞后。而且手的位置和IK偏差很大。据此可以得到经验调IK之前务必先关掉AimConstraint这样无论是Scene窗口里看到的IK位置还是OnAnimatorIK()里用到的才和实际的数据一样。我在Chest上也挂了AimConstraint那么如果把IK改成Spine的子节点则引擎先在AimConstraint没生效时把手约束到IK的位置再加上AimConstraint的效果。结果就是腰的仰角越大手和IK偏差越大实验结果确实是这样而把左手IK挂在枪上产生的偏差很容易想到是因为引擎在双手IK没生效时确定好双手IK的位置然后使双手IK生效这时左手IK因为右手被约束偏移而产生了偏移而左手还是被约束到IK生效之前的位置导致二者位置不一致。这一点可以关闭右手IK看左手和左手IK是否一致来确定。关闭右手IK后左手IK和左手位置一致开启右手IK左手IK的位置产生一个偏移左手位置不变更一般的结论使用多个改变动画的组件协作时如IK、AimConstraint、AnimationRigging、AvatarMask出现未预期的效果很可能是因为几个组件没有按预想的顺序叠加可能是各自生效后叠加或者叠加顺序不对。此时可以把所有组件撤掉一个个加上看从哪一步出问题。所以应该少用改变动画的组件尽量修改动画本身。执行Destroy()没有生效原因ParticleSystem是组件Destroy()组件是从物体上移除该组件。解决方法改成Destroy(bloodshed.gameObject);丘丘人每换一次弹匣弹匣会变小一些换弹匣就是把弹匣挂到左手上装弹匣的时候再挂回枪上。这个枪素材的scale不是1我知道和这个有关系。其他人物换弹匣没这个问题。我发现1.父物体scale变化时子物体在监视器里的scale不变但是子物体的实际大小变了2.物体的父物体改变后引擎会自动修改它的scale使它的实际大小不变这应该能保证换弹后弹匣大小不变3.这个问题和我把Mag弹匣作为Body枪身的子物体有关作为根节点AK47的子物体是没问题的而且根节点的Scale是1Body的Scale不是1.今天用胡桃换了很多次弹匣发现弹匣也是会变小的只是每次变小的不明显要换很多次才能看出来。而且每换一次弹匣的Scale都不一样。结论就是一个物体的父物体会变化的时候尽量把它挂在Scale是1的物体下。如果不是1就在blender里ctrl a应用缩放。敌人没有按动画事件设置的频率射击使用动画事件控制敌人开始射击和停止射击的时机人物没有按设计的频率射击。很长时间不射击也有时候不停射击。这里打印pullTrigger是True。但是敌人检查器的pullTrigger字段是False。然后我想到我刚给死亡动画加了停止射击的关键帧且Any State会过渡到死亡状态。把死亡动画的停止射击移除果然问题消失了。但是它又没有转换到死亡状态为什么会播放死亡动画的关键帧人物死亡使用布娃娃效果敌人打死NPC没有关闭animator我打死NPC正常开启布娃娃开启布娃娃里用协程关闭了animator研究发现在yield return之前打印都正常后面打印没有效果。只有NPC打死NPC有这个问题NPC打死我、我打死NPC都正常。用[ContextMenu()]执行死亡方法也有问题。这段代码是我抄的。为什么要用协程关动画呢我试了试直接关动画布娃娃正常开启了。后来这个问题不出现了。不了了之了。敌人被打死后我靠近又突然开枪开始运行后人物自己向前移动原因不小心在人物Hips上加了非触发器碰撞体和人物碰撞体碰撞。开始运行后第一次换弹回到初始的位置和旋转把Animator Override Controller替换换弹动画的代码删掉问题就消失了。然后注意到此时人物用的是Animator Controller不是Animator Override Controller。说明运行时新建Animator Override Controller再替换动画会导致人物回到初始Transform。应该直接给人物用Animator Override Controller。M21开瞄准镜后瞄准相机只能左右旋转改变人物仰角瞄准相机的仰角不变关镜、到Scene窗口再回去仰角会更新好像在瞄准镜状态下人物的仰角没有每帧更新。另一个狙击枪VSS没这个问题。初始拿VSS换成M21会有问题。改成初始拿M21换成VSS两个枪都没问题了。针对看一眼Scene窗口就更新的情况我把Game和Scene窗口同时显示然后就™没问题了。好像animator.SetBoneLocalRotation()有人看着它就更新不看着就不更新。把瞄准相机后移到某个程度问题就消失了。然后我去找animator更新的设置把Culling Mode改成Always Animate问题解决。-VSS没出问题可能因为它比较短animator还认为我在看它所以保持更新。我把VSS的瞄准相机往前放放到这个位置也出现同样的问题出问题的距离比M21远得多然后我发现VSS模型的缩放是100可能和这个有关系。事件public event UnityAction onDataChanged;在Start里添加监听触发没有执行监听方法在Model类非Mono里的一个事件一个MonoBehavior管理器在Start里添加了监听。写一个打印所有监听者的public void PrintListeners() { Debug.Log(监听者有); foreach (var eve in onDataChanged.GetInvocationList()) { Debug.Log(eve.Method.Name); } }刚后打印有监听方法触发的时候打印事件为空然后手动打印已经是空了。[ContextMenu(玩家背包数据变化的监听者有)] void Look() { player.pack.PrintListeners(); }然后在Update第一帧打印bool prtrue; private void Update() { if (pr) { pr false; Look(); } } [ContextMenu(玩家背包数据变化的监听者有)] void Look() { player.pack.PrintListeners(); }已经是空了。然后研究失去方向只能瞎试了。把event去掉变成普通委托问题还在。现在我们知道这个事件在Start和第一次Update之间被什么东西设空了。然后添加2次、多次监听打印都是空说明是被null而不是-。然后继续瞎猜把Model类的[Serializable]去掉没用。然后看了这个Model对象被写入的记录发现model除了被new过一次还被管理器写入过一次。所以是这里的问题。打印显示添加监听的时候用的是new的model然后model又被管理器赋值。那么就不能让Start不可控顺序地执行初始化了。既然Start顺序不可控还没有参数继承MonoBehavior已失去意义。就直接不继承MonoBehavior了也不用单例了而是作为总管理器的成员。这引出了一个大问题就是含有事件的类一般是数据类随意new、写入对象导致事件监听者丢失那么就两个解决方法不要在声明后面直接newnew作为从持久化数据读不到的兜底。要么把所有返回数据类的方法改成输入数据类给字段赋值的。声明时不new就要考虑数据为空的情况那么在这些情景手动调用new事件不放在数据类放在控制器类。控制器引用的model可能不同时间是不同的实例。问题是model类对数据增删改查的方法知道什么时候数据变化了model不能访问控制器事件放控制器需要增删改查也放控制器但这不合理增删改查方法应该和数据放在一起

相关文章:

Unity问题记录

一个物体在Scene窗口看不见,Game窗口能看见。选中它时,打开Gizmos也看不见身上碰撞体的线框。也无法被射线检测到。换成其他Mesh:Open Asset In Context正常显示:把它Revert回预制体,还是不显示。Ctrl D复制一个&#…...

Cursor AI编程助手扩展包:定制化规则提升代码生成质量与效率

1. 项目概述:一个为 Cursor 编辑器量身定制的 AI 编程助手扩展包如果你和我一样,日常重度依赖 Cursor 这款“AI 驱动的代码编辑器”来提升开发效率,那你肯定不止一次地想过:能不能让 Cursor 更懂我?能不能让它在我写特…...

从零搭建到日常调试:一份给新手的 Kafka 命令行操作全流程指南

从零搭建到日常调试:一份给新手的 Kafka 命令行操作全流程指南 第一次接触 Kafka 时,我被它那些晦涩的概念和复杂的命令行参数搞得晕头转向。作为一个从 MySQL 和 Redis 这类传统数据库转过来的开发者,Kafka 的分布式消息队列模型确实需要一些…...

DESIGN.md,让AI设计不跑偏

使用 AI 设计工具时,最烦人的问题之一,就是输出不稳定。你明明已经告诉它:颜色怎么用、字体怎么搭、按钮要什么风格。可它生成几次之后,还是会偷偷改一点,最后做出来的界面风格前后不一致。DESIGN.md 就是为了解决这个…...

ASO技能库构建指南:从基础原理到实战应用

1. 项目概述:ASO技能库的构建与价值最近在和一些做独立开发者和出海应用推广的朋友聊天,大家普遍提到一个痛点:都知道ASO(应用商店优化)重要,但真到动手优化自家App的时候,却感觉无从下手。市面…...

用C++和Eigen库手把手实现UR3机械臂逆解(附完整代码与避坑指南)

从理论到实践:基于Eigen库的UR3机械臂逆运动学完整实现指南 在工业自动化和机器人研究领域,六轴协作机械臂因其灵活性和广泛的应用场景而备受关注。UR3作为Universal Robots旗下的紧凑型协作机械臂,凭借其轻量化设计和用户友好特性&#xff0…...

DLT Viewer:面向汽车电子系统的分布式日志诊断与实时监控技术方案

DLT Viewer:面向汽车电子系统的分布式日志诊断与实时监控技术方案 【免费下载链接】dlt-viewer Diagnostic Log and Trace viewing program 项目地址: https://gitcode.com/gh_mirrors/dl/dlt-viewer DLT Viewer是一款基于COVESA标准的专业诊断日志分析工具&…...

Git 核心操作:rebase 与 merge 的区别,以及分支管理最佳实践

Git 核心操作:rebase 与 merge 的区别,以及分支管理最佳实践 在日常开发中,Git 是不可或缺的版本控制工具。而 git merge 和 git rebase 是整合分支最常用的两个命令,很多人对它们的概念模糊,不知道何时用哪个。同时&a…...

Vector CAN卡配置避坑指南:xlSetApplConfig函数详解与硬件通道分配实战

Vector CAN卡配置避坑指南:xlSetApplConfig函数详解与硬件通道分配实战 当你在深夜调试Vector CAN设备时,突然看到"Channel already assigned"的红色错误提示,是否感到一阵窒息?这种场景对于使用Vector硬件进行二次开发…...

MDX-M3-Viewer深度解析:浏览器端游戏模型渲染的全新范式

MDX-M3-Viewer深度解析:浏览器端游戏模型渲染的全新范式 【免费下载链接】mdx-m3-viewer A WebGL viewer for MDX and M3 files used by the games Warcraft 3 and Starcraft 2 respectively. 项目地址: https://gitcode.com/gh_mirrors/md/mdx-m3-viewer 在…...

从‘KN’与‘taoN’反推Kp/Ki:一个让电机PI整定思路瞬间清晰的视角

从系统级特性反推PI参数:基于KN与taoN的电机控制整定方法论 在电机控制领域,PI参数整定一直是工程师面临的经典难题。传统方法往往直接调整Kp和Ki,却忽略了这两个参数背后隐藏的系统级特性——开环增益KN与微分时间常数taoN。这种"只见树…...

小米Tag防丢器深度解析:BLE与UWB双技术路径如何重塑寻物体验

1. 项目概述:小米入局,防丢市场迎来“鲶鱼”在智能硬件领域,防丢追踪器一直是个不温不火但又刚需明确的存在。苹果的AirTag凭借其庞大的Find My网络,几乎定义了行业标准,但也因其生态封闭性,让安卓用户望而…...

XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极方案

XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法畅玩心爱的Unity游戏?或者作为游…...

如何高效管理光盘镜像:WinCDEmu虚拟光驱专业使用指南

如何高效管理光盘镜像:WinCDEmu虚拟光驱专业使用指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu WinCDEmu是一款功能强大的开源虚拟光驱软件,专为Windows系统设计,提供高效的光盘镜像挂载与管…...

三步解锁iPhone激活锁:AppleRa1n离线工具全攻略

三步解锁iPhone激活锁:AppleRa1n离线工具全攻略 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您面对iPhone的激活锁界面时,是否感到束手无策?AppleRa1n为您提供…...

基于ESP32与Pure Data的无线音乐控制器:从硬件到软件的完整实现

1. 项目概述与核心思路 如果你对用代码做音乐感兴趣,或者玩过像Pure Data、Max/MSP这样的可视化音频编程环境,那你肯定想过一个问题:能不能把物理世界里的动作,比如触摸、倾斜、敲击,直接变成控制音乐的声音参数&#…...

Git远程仓库核心原理与团队协作实战指南

1. 项目概述:为什么远程仓库是Git协作的基石如果你已经用Git在本地创建了项目,并且熟练地使用git add和git commit来记录每一次代码的变更,那么恭喜你,你已经掌握了版本控制的个人副本。但这仅仅是Git能力的冰山一角。真正的威力&…...

Sendwithus模板与现代邮件客户端兼容性测试:终极解决方案

Sendwithus模板与现代邮件客户端兼容性测试:终极解决方案 【免费下载链接】templates Sendwithus Open Source Email Templates 项目地址: https://gitcode.com/gh_mirrors/temp/templates Sendwithus Open Source Email Templates是一套强大的开源邮件模板集…...

Linux环境变量与env命令:从核心原理到高级实战应用

1. 项目概述:为什么环境变量是Linux的“隐形指挥棒”在Linux世界里,我们每天都在和各种命令、程序打交道。你有没有想过,为什么ls命令在任何目录下都能直接运行?为什么python命令启动的是Python 3而不是Python 2?又或者…...

图片换背景在线制作怎么操作?一文解析2026年最好用的免费工具

你是不是也遇到过这样的困境:拍了张不错的证件照,但背景不够专业;电商要上新产品图,需要统一的白色背景;或者就是想给朋友圈的照片换个背景图,结果却卡在了怎么处理上?其实,图片换背…...

I2C总线设计实战:从物理层到协议层,解决多设备挂载与信号完整性问题

1. 项目概述:从“能挂多少”到“如何挂好”的深度思考“I2C总线上最多能挂多少个设备?” 这几乎是每个嵌入式工程师在项目初期都会问的问题。乍一看,答案似乎很简单:7位地址能寻址128个,10位地址能寻址1024个。但如果你…...

蓝桥杯单片机备赛:AT24C02 EEPROM存储整型数据的完整流程与常见错误分析

蓝桥杯单片机备赛:AT24C02 EEPROM存储整型数据的完整流程与常见错误分析 在蓝桥杯单片机竞赛中,AT24C02 EEPROM模块是必考内容之一。许多选手已经掌握了基本字符型数据的读写操作,但当面对整型数据时,往往会遇到各种问题。本文将深…...

Freeplane思维导图终极指南:100+专业模板让你的思考效率翻倍

Freeplane思维导图终极指南:100专业模板让你的思考效率翻倍 【免费下载链接】Freeplane-MindMap-Template Freeplane-MindMap-Template(Freeplane 思维导图模板) 项目地址: https://gitcode.com/gh_mirrors/fr/Freeplane-MindMap-Template …...

【NotebookLM学术写作黄金法则】:20年科研老炮亲授5大避坑指南与3步合规提速法

更多请点击: https://intelliparadigm.com 第一章:NotebookLM学术写作规范的底层逻辑与认知革命 NotebookLM 并非传统意义上的文档编辑器,而是一个以“语义锚点”和“引用可追溯性”为基石的学术协作文本引擎。其底层逻辑颠覆了线性写作范式…...

VCS仿真总失败?手把手教你用TMAX的CPV功能快速定位ATPG Pattern问题

VCS仿真总失败?TMAX的CPV功能实战指南:精准定位ATPG Pattern问题 在数字芯片验证的战场上,ATPG(自动测试模式生成)仿真是确保芯片可测试性的关键环节。但当VCS仿真器抛出"cycle mis-match"错误时&#xff0c…...

告别单调终端:250+ Xshell配色方案让你的命令行焕然一新

告别单调终端:250 Xshell配色方案让你的命令行焕然一新 【免费下载链接】Xshell-ColorScheme 250 Xshell Color Schemes 项目地址: https://gitcode.com/gh_mirrors/xs/Xshell-ColorScheme 每天面对单调的黑白终端界面,是否感到视觉疲劳&#xff…...

现有基准任务(如操纵、导航)是否足够

在人工智能与机器人技术飞速迭代的今天,基准任务作为衡量模型与系统能力的核心标尺,贯穿于技术研发、性能评估与落地应用的全流程。操纵、导航作为两类最基础、最核心的基准任务,长期以来支撑着机器人、具身智能等领域的进步,成为…...

如何用VMware Unlocker突破虚拟化限制实现macOS跨平台运行

如何用VMware Unlocker突破虚拟化限制实现macOS跨平台运行 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 你是否曾经面临这样的困境:作为Windows或Linux开发者,需要在macOS环境…...

掌握ComfyUI视频处理:5步构建高效AI视频工作流

掌握ComfyUI视频处理:5步构建高效AI视频工作流 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在AI视频创作和内容制作领域,ComfyUI-Video…...

终极指南:如何使用ViGEmBus虚拟游戏控制器驱动程序提升Windows游戏体验

终极指南:如何使用ViGEmBus虚拟游戏控制器驱动程序提升Windows游戏体验 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过想在Win…...