如何让unity总是生成typetree

本文介绍如何使用 lldb-p 工具附加到 Unity 进程,并设置断点进行调试的具体步骤。通过查找特定的汇编指令行并设置断点命令,可以帮助开发者更有效地定位和解决问题。
__text:000000010187CF12                 or      eax, r14d <--这里下断点加上断点命令 register write eax 0x140  


使用lldb -p  pid 附加上unity进程, 然后找上面这行,加上断点命令,就可以了. 以下内容仅用作查找上面这一行的上下文使用



text:000000010187CE6F loc_10187CE6F:                          ; CODE XREF: __text:000000010187CD4Bj
__text:000000010187CE6F                 mov     edi, [rbp-0BF4h]
__text:000000010187CE75                 mov     esi, 1
__text:000000010187CE7A                 xor     edx, edx
__text:000000010187CE7C                 xor     ecx, ecx
__text:000000010187CE7E                 call    __ZN12SpritePacker25RebuildAtlasCacheIfNeededE19BuildTargetPlatformbNS_21SpritePackerExecutionEb ; SpritePacker::RebuildAtlasCacheIfNeeded(BuildTargetPlatform,bool,SpritePacker::SpritePackerExecution,bool)
__text:000000010187CE83                 test    al, al
__text:000000010187CE85                 jz      loc_10187D017
__text:000000010187CE8B                 call    __Z15GetScriptMapperv ; GetScriptMapper(void)
__text:000000010187CE90                 mov     rbx, rax
__text:000000010187CE93                 call    __Z17GetPlayerSettingsv ; GetPlayerSettings(void)
__text:000000010187CE98                 mov     al, [rax+384h]
__text:000000010187CE9E                 mov     [rbx+3Ch], al
__text:000000010187CEA1                 mov     eax, [rbp-1024h]
__text:000000010187CEA7                 and     eax, 10h
__text:000000010187CEAA                 mov     [rbp-1008h], eax
__text:000000010187CEB0                 shr     eax, 4
__text:000000010187CEB3                 mov     r15d, [rbp-0BF4h]
__text:000000010187CEBA                 mov     [rbp-1048h], r15d
__text:000000010187CEC1                 and     r15d, 0FFFFFFFEh
__text:000000010187CEC5                 cmp     r15d, 6
__text:000000010187CEC9                 setz    r12b
__text:000000010187CECD                 or      r12b, al
__text:000000010187CED0                 mov     r13b, 1
__text:000000010187CED3                 jnz     short loc_10187CEE3
__text:000000010187CED5                 mov     rax, [rbp-1038h]
__text:000000010187CEDC                 cmp     dword ptr [rax], 0
__text:000000010187CEDF                 setnz   r13b
__text:000000010187CEE3
__text:000000010187CEE3 loc_10187CEE3:                          ; CODE XREF: __text:000000010187CED3j
__text:000000010187CEE3                 mov     edi, [rbp-1048h]
__text:000000010187CEE9                 call    __Z25CalculateEndianessOptions19BuildTargetPlatform ; CalculateEndianessOptions(BuildTargetPlatform)
__text:000000010187CEEE                 mov     r14d, eax
__text:000000010187CEF1                 mov     edi, [rbp-1048h]
__text:000000010187CEF7                 call    __Z34DoesTargetPlatformSupportTypeTrees19BuildTargetPlatform ; DoesTargetPlatformSupportTypeTrees(BuildTargetPlatform)
__text:000000010187CEFC                 test    al, al
__text:000000010187CEFE                 mov     eax, 140h
__text:000000010187CF03                 mov     ecx, 4000140h    
__text:000000010187CF08                 cmovz   eax, ecx
__text:000000010187CF0B                 test    r12b, 1
__text:000000010187CF0F                 cmovz   eax, ecx
__text:000000010187CF12                 or      eax, r14d <--这里下断点加上断点命令 register write eax 0x140
__text:000000010187CF15                 mov     ebx, eax
__text:000000010187CF17                 or      ebx, 80000h
__text:000000010187CF1D                 test    r13b, r13b
__text:000000010187CF20                 cmovnz  ebx, eax
__text:000000010187CF23                 call    __Z17GetPlayerSettingsv ; GetPlayerSettings(void)
__text:000000010187CF28                 cmp     byte ptr [rax+15Bh], 0
__text:000000010187CF2F                 jz      short loc_10187CF37
__text:000000010187CF31                 or      ebx, 400000h
__text:000000010187CF37
__text:000000010187CF37 loc_10187CF37:                          ; CODE XREF: __text:000000010187CF2Fj
__text:000000010187CF37                 cmp     r15d, 6
__text:000000010187CF3B                 jnz     short loc_10187CF79
__text:000000010187CF3D                 mov     eax, ebx
__text:000000010187CF3F                 and     eax, 80000h
__text:000000010187CF44                 jz      short loc_10187CF79
__text:000000010187CF46                 mov     qword ptr [rsp+8], 0
__text:000000010187CF4F                 mov     dword ptr [rsp], 0
__text:000000010187CF56                 lea     rdi, aFlagsKbuildres ; "!((flags & kBuildResourceImage) && IsWe"...
__text:000000010187CF5D                 lea     rdx, asc_10342C675 ; "/Users/builduser/buildslave/unity/build"...
__text:000000010187CF64                 xor     esi, esi
__text:000000010187CF66                 mov     ecx, 5E6h
__text:000000010187CF6B                 mov     r8d, 2
__text:000000010187CF71                 xor     r9d, r9d
__text:000000010187CF74                 call    __Z17DebugStringToFilePKciS0_iiiiPFvRK11CppLogEntryE ; DebugStringToFile(char  const*,int,char  const*,int,int,int,int,void (*)(CppLogEntry  const&))
__text:000000010187CF79
__text:000000010187CF79 loc_10187CF79:                          ; CODE XREF: __text:000000010187CF3Bj
__text:000000010187CF79                                         ; __text:000000010187CF44j
__text:000000010187CF79                 mov     rax, [rbp+18h]
__text:000000010187CF7D                 mov     ecx, ebx
__text:000000010187CF7F                 or      ecx, 40000000h
__text:000000010187CF85                 test    ebx, 4000000h
__text:000000010187CF8B                 cmovz   ecx, ebx
__text:000000010187CF8E                 cmp     dword ptr [rbp-1008h], 0
__text:000000010187CF95                 cmovz   ecx, ebx
__text:000000010187CF98                 mov     [rbp-1064h], ecx
__text:000000010187CF9E                 mov     rsi, [rbp-1020h]
__text:000000010187CFA5                 mov     rcx, [rsi+8]
__text:000000010187CFA9                 sub     rcx, [rsi]
__text:000000010187CFAC                 shr     rcx, 4
__text:000000010187CFB0                 mov     [rbp-1050h], rcx
__text:000000010187CFB7                 movzx   ecx, r13b
__text:000000010187CFBB                 mov     [rbp-1058h], rcx
__text:000000010187CFC2                 movss   xmm0, dword ptr [rax+4]
__text:000000010187CFC7                 subss   xmm0, dword ptr [rax]
__text:000000010187CFCB                 movss   dword ptr [rbp-1010h], xmm0
__text:000000010187CFD3                 lea     rdi, [rbp-0CB8h]
__text:000000010187CFDA                 call    __ZNSt6vectorI8UnityStrSaIS0_EEC2ERKS2_ ; std::vector<UnityStr,std::allocator<UnityStr>>::vector(std::vector<UnityStr,std::allocator<UnityStr>> const&)
__text:000000010187CFDF                 mov     [rbp-1071h], r13b
__text:000000010187CFE6                 mov     [rbp-1072h], r12b
__text:000000010187CFED                 mov     r14, [rbp-0CB8h]
__text:000000010187CFF4                 mov     r15, [rbp-0CB0h]
__text:000000010187CFFB                 cmp     r15, r14
__text:000000010187CFFE                 jz      loc_10187D1A1
__text:000000010187D004                 xor     r13d, r13d
__text:000000010187D007                 xor     r12d, r12d
__text:000000010187D00A                 jmp     loc_10187D0F0


Unity 中导入 SpeedTree 动画的解决方案通常涉及以下几个关键步骤。SpeedTree 是一种常用于创建高质量树木和植被的工具,其生成的模型通常包含风动画(Wind Animation),以便在游戏或场景中实现自然的动态效果。 ### 准备工作 在导入 SpeedTree 动画之前,需要确保以下几点: - **SpeedTree Modeler**:确保已使用 SpeedTree Modeler 创建了模型,并启用了风动画。 - **导出格式**:将模型导出为 Unity 支持的格式,如 `.fbx`。在导出过程中,需要确保动画数据(如风动画)被正确包含在内。 - **Unity 版本**:建议使用 Unity 2019.3 或更高版本,以获得更好的 SpeedTree 支持。 ### 导入步骤 1. **将模型导入 Unity** 将 `.fbx` 文件拖入 Unity 项目窗口中。Unity 会自动创建模型的导入设置。 2. **配置模型导入设置** 在 **Project** 窗口中选择模型文件,然后在 **Inspector** 面板中调整以下设置: - 将 **Animation Type** 设置为 **Humanoid**(如果为角色)或 **Generic**(通用动画)。 - 确保 **Import Animation** 已勾选,以便导入风动画数据。 - 如果模型包含多个动画片段,可以在 **Animations** 标签下查看和调整动画剪辑。 3. **应用 SpeedTree 材质** SpeedTree 模型通常会附带自定义材质。在 Unity 中,需要确保这些材质被正确应用。可以使用 SpeedTree 提供的着色器(如 SpeedTree Billboard Shader)来优化性能。 4. **播放动画** 在导入动画后,可以通过以下方式控制动画播放: - 在 **Animator** 中创建状态机并分配动画剪辑。 - 使用脚本控制动画参数,例如风速或动画播放速度。 ### 示例代码 以下是一个简单的脚本示例,用于控制 SpeedTree 动画的播放速度: ```csharp using UnityEngine; public class SpeedTreeAnimationController : MonoBehaviour { private Animator _animator; public float windSpeed = 1.0f; void Start() { _animator = GetComponent<Animator>(); if (_animator != null) { _animator.SetFloat("WindSpeed", windSpeed); } } void Update() { if (_animator != null) { // 动态调整风速 _animator.SetFloat("WindSpeed", windSpeed); } } } ``` ### 常见问题与解决方案 - **动画未正确播放**:检查模型是否启用了 **Import Animation**,并在 **Animator** 中正确分配了动画剪辑。 - **材质丢失**:确保 SpeedTree 材质已正确导入,并在 **Materials** 选项卡中选择正确的材质。 - **性能问题**:使用 **SpeedTree Billboard Shader** 可以减少 GPU 负载,特别是在大量植被的情况下。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值