コード例 #1
0
        private async void Start()
        {
            if (placement.formationNumber < MltdSimulationConstants.MinDanceFormation || placement.formationNumber > MltdSimulationConstants.MaxDanceFormation)
            {
                Debug.LogError($"Invalid formation number: {placement.formationNumber}, should be {MltdSimulationConstants.MinDanceFormation} to {MltdSimulationConstants.MaxDanceFormation}.");
                return;
            }

            var loaded = await modelLoader.LoadAndInstantiateAsync();

            loaded.Body.name = GetIdolObjectName(placement.formationNumber);

            var modelAnimator = loaded.Body.GetComponent <Animator>();

            Debug.Assert(modelAnimator != null);

            modelAnimator.keepAnimatorControllerStateOnDisable = false;

            var controller = await danceLoader.LoadAsync();

            modelAnimator.runtimeAnimatorController = controller;

            // Remember to set this flag otherwise there will be some flickering when switching target idols
            modelAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
            modelAnimator.enabled     = false;

            _modelRoot          = loaded.Body;
            _animatorController = controller;
            _modelAnimator      = modelAnimator;

            {
                var face         = loaded.Head.transform.Find("obj_head_GP/face").gameObject;
                var meshRenderer = face.GetComponent <SkinnedMeshRenderer>();
                facialAnimator.faceRenderer = meshRenderer;
            }
        }