Пример #1
0
        public SettingAutoAdjuster(
            IVRMLoadable vrmLoadable,
            IMessageReceiver receiver,
            IMessageSender sender,
            IMessageDispatcher dispatcher,
            VRMBlendShapeStore blendShapeStore,
            Camera mainCam
            )
        {
            _mainCam         = mainCam.transform;
            _blendShapeStore = blendShapeStore;

            _sender     = sender;
            _dispatcher = dispatcher;

            receiver.AssignCommandHandler(
                VmmCommands.RequestAutoAdjust,
                _ => AutoAdjust()
                );
            receiver.AssignCommandHandler(
                VmmCommands.RequestAutoAdjustEyebrow,
                _ => AutoAdjustOnlyEyebrow()
                );


            vrmLoadable.PreVrmLoaded += info => _vrmRoot = info.vrmRoot;
            vrmLoadable.VrmDisposing += () => _vrmRoot = null;
        }
        //NOTE: こっちが最終的に生き残るよ
        public void RefreshTarget(VRMBlendShapeStore blendShapeStore)
        {
            Reset();

            var items      = blendShapeStore.GetBlendShapeStoreItems();
            int goalCount  = UseSeparatedTarget ? 4 : 2;
            int foundCount = 0;

            for (int i = 0; i < items.Length; i++)
            {
                var item = items[i];
                if (item.name == LeftUpKey && !_leftUp.isValid)
                {
                    _leftUp = new BlendShapeTarget(item);
                    foundCount++;
                }
                else if (item.name == LeftDownKey && !_leftDown.isValid)
                {
                    _leftDown = new BlendShapeTarget(item);
                    foundCount++;
                }
                else if (UseSeparatedTarget && item.name == RightUpKey && !_rightUp.isValid)
                {
                    _rightUp = new BlendShapeTarget(item);
                    foundCount++;
                }
                else if (UseSeparatedTarget && item.name == RightDownKey && !_rightDown.isValid)
                {
                    _rightDown = new BlendShapeTarget(item);
                    foundCount++;
                }

                if (foundCount >= goalCount)
                {
                    return;
                }
            }
        }