【问题标题】:Unity - Parent with children fall apartUnity - 有孩子的父母分崩离析
【发布时间】:2018-02-22 17:21:48
【问题描述】:

我有一个玩家角色,由一些立方体、球体和一个胶囊组成。我创建了空对象Player,玩家的所有身体部位都是Player 的孩子。我有两架飞机,中间有一个移动平台。我可以在普通飞机和墙壁上行走和跳跃,但是当玩家在移动平台上时,玩家的身体部位会分崩离析。也许这真的很愚蠢,但我刚开始使用 Unity。

这就是问题所在,玩家在移动平台上崩溃了:http://nl.tinypic.com/r/207s3sz/9

下面是关于概述、玩家、身体部位和带有相应角色持有人的移动平台的信息。所有正文部分都具有与屏幕截图上的body 部分相同的属性。谁能帮我解决这里出了什么问题?如何通过移动平台运送整个播放器?

HoldCharacter 脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HoldCharacter : MonoBehaviour {

    void OnTriggerEnter(Collider other) {
        other.transform.parent = gameObject.transform;                        
    }

    void OnTriggerExit(Collider other)
    {
        other.transform.parent = null;
    }
}

【问题讨论】:

  • 如果您从角色持有者中删除is Trigger 会发生什么?为什么需要 2 个嵌套的碰撞器 MovingPlatform -> characterHolder?如果您将Body 上的CapsuleCollider 替换为BoxCollider,会发生什么?...我之前遇到过不同类型对撞机之间的碰撞问题。
  • 你能展示你的 HoldCharacter 脚本吗?
  • 当我禁用'is trigger'时,我可以站在移动的平台上,不会崩溃,但是当平台移动时,玩家不会停留在平台上并摔倒。我使用了嵌套的“移动平台和 CharacterHolder”,因为我在 YouTube 视频中看到了这一点。但是当我只用一只脚在平台上跳跃时,它就起作用了。所以“平台-脚”的组合有效,但身体的其他部分“释放”。只有在这个移动的平台上。 @大卫埃斯皮诺
  • 所以触发器的工作原理是......它会触发OnTriggerExitOnTriggerEnter,但它会让对象go through它。如果禁用IsTrigger,则需要在OnCollisionExit 方法上将逻辑移至OnCollisionEnter。如果isTrigger uncheck 有效,可能只是因为您将HoldCharacter 的逻辑分别移动到OnCollisionEnterOnCollisionEnd
  • 是的...我认为这是因为您 HoldCharacter MonoBehavior 上的 OnTriggerEnterOnTriggerExit ... 用这个 void OnCollisionEnter(Collision collisionInfo) { collisionInfo.gameObject.transform.parent = gameObject.transform; } void OnCollisionExit(Collision collisionInfo) { collisionInfo.gameObject.transform.parent = null; } 替换 HoldCharactercode 值得一试

标签: unity3d unity5 unity3d-editor


【解决方案1】:

您只需要禁用isTrigger 标志。以下是一些见解

Is Trigger 的工作原理是……它会触发OnTriggerExitOnTriggerEnter,但它会让对象通过它。如果禁用IsTrigger,则需要在OnCollisionExit 方法上将逻辑移至OnCollisionEnter。如果 isTrigger uncheck 有效,可能只是您将 HoldCharacter 的逻辑分别移动到 OnCollisionEnterOnCollisionEnd 就像这样:

void OnCollisionEnter(Collision collisionInfo) { 
   collisionInfo.gameObject.transform.parent = gameObject.transform; 
} 
void OnCollisionExit(Collision collisionInfo) {
    collisionInfo.gameObject.transform.parent = null; 
}

问候

【讨论】:

    【解决方案2】:

    如果我是正确的,具有刚体的对象的子对象也具有物理特性。也许将刚体放在玩家的孩子身上,就像这样。

    播放器 -头 -武器 -腿 - 带有刚体的空游戏对象

    【讨论】:

    • 你的意思是去掉父对象的刚体,给所有子对象添加一个刚体吗?当我尝试这个时,物体在“起始层”上分崩离析。或者你的意思是'创建一个空的游戏对象,给它一个刚体,然后将它作为一个孩子添加到玩家?并移除父玩家的刚体?然后我不能再跳了,我可以穿墙了。还是我没明白你的意思?
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多