unity3d 如何在Unity编辑器中更改子角色模型

von4xj4u  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(237)

我有一个角色创建器脚本,它创建了一个带有儿童角色模型的玩家游戏对象

public class CreatePlayer : MonoBehaviour
{
   [MenuItem("GameObject/Create Player", false, 10)]
    
    static void Create()
    {
        GameObject player = new GameObject("Hero");
        player.tag = "Player";
        GameObject character = Instantiate((GameObject)Resources.Load("SampleCharacter")); // Instantiate the 3D model
        character.transform.parent = player.transform;
        CharacterController cc = player.AddComponent<CharacterController>();
        cc.center = new Vector3(0f, 0.9f, 0f);
        cc.radius = 0.2f;
        cc.height = 1.9f;
        player.AddComponent<PlayerMovement>();
        Animator animator = character.AddComponent<Animator>();
        animator.runtimeAnimatorController = (RuntimeAnimatorController)Resources.Load("Animations/PlayerAnimation");
        player.AddComponent<PlayerAnimations>();
        player.AddComponent<PlayerHealth>();
        Camera.main.gameObject.AddComponent<CameraController>();
        Camera.main.GetComponent<CameraController>().followTarget = player.transform;
    }
    
}

我需要的是能够改变角色模型后,随时需要在编辑器中的字符创建拖放字符预置。这也应该适用于动画和动画控制器,以及新的预置添加。

6l7fqoea

6l7fqoea1#

你有两个选择。
1.完全销毁角色(使用销毁(游戏对象)函数),并在切换时加载一个新的角色作为孩子。
1.调用GetComponentInChildren< T>()来获取MeshRenderer和Animator组件,并手动交换必要的属性(分别为 sharedMeshcontroller)。这个方法可能有点棘手,并有一些bug需要解决。如果使用蒙皮网格,您可能还需要销毁并加载整个 backbone ,并在新的 backbone 上连接必要的引用。

相关问题