我有一个角色创建器脚本,它创建了一个带有儿童角色模型的玩家游戏对象
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;
}
}
我需要的是能够改变角色模型后,随时需要在编辑器中的字符创建拖放字符预置。这也应该适用于动画和动画控制器,以及新的预置添加。
1条答案
按热度按时间6l7fqoea1#
你有两个选择。
1.完全销毁角色(使用销毁(游戏对象)函数),并在切换时加载一个新的角色作为孩子。
1.调用GetComponentInChildren< T>()来获取MeshRenderer和Animator组件,并手动交换必要的属性(分别为 sharedMesh 和 controller)。这个方法可能有点棘手,并有一些bug需要解决。如果使用蒙皮网格,您可能还需要销毁并加载整个 backbone ,并在新的 backbone 上连接必要的引用。