コード例 #1
0
        private void AddImpulseSource(Weapon weapon, WeaponConfig weaponConfig)
        {
            var impulseDef = new CinemachineImpulseDefinition();

            impulseDef.m_RawSignal     = _cinemachineDataProvider.DefaultCinemachineFixedSignal;
            impulseDef.m_AmplitudeGain = weaponConfig.visualImpact;
            impulseDef.m_FrequencyGain = 7;

            var impulseSource = weapon.gameObject.AddComponent <CinemachineImpulseSource>();

            impulseSource.m_ImpulseDefinition = impulseDef;
            weapon.AddImpulseSource(impulseSource);
        }
        public override float GetPropertyHeight(SerializedProperty prop, GUIContent label)
        {
            CinemachineImpulseDefinition myClass = null; // to access name strings
            SignalSourceAsset            asset   = null;
            float height = 0;

            mHideProperties.Clear();
            string prefix = prop.name;

            prop.NextVisible(true); // Skip outer foldout
            do
            {
                if (!prop.propertyPath.StartsWith(prefix))
                {
                    break;
                }
                string header = HeaderText(prop);
                if (header != null)
                {
                    height += HeaderHeight + vSpace;
                }

                // Do we hide this property?
                bool hide = false;
                if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_RawSignal))
                {
                    asset = prop.objectReferenceValue as SignalSourceAsset;
                }
                if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_RepeatMode))
                {
                    hide = asset == null || asset.SignalDuration <= 0;
                }
                else if (prop.name == SerializedPropertyHelper.PropertyName(() => myClass.m_Randomize))
                {
                    hide = asset == null || asset.SignalDuration > 0;
                }

                if (hide)
                {
                    mHideProperties.Add(prop.name);
                }
                else
                {
                    height += EditorGUI.GetPropertyHeight(prop, false) + vSpace;
                }
            } while (prop.NextVisible(prop.isExpanded));
            return(height);
        }
コード例 #3
0
    public static void GenerateImpulseAt(CameraShakeParams shakeParams, Vector3 position, Vector3 direction)
    {
        CinemachineImpulseDefinition impulseDefinition = new CinemachineImpulseDefinition();

        impulseDefinition.m_ImpulseChannel = GameConfig.Instance.m_ImpulseChannel;
        impulseDefinition.m_RawSignal      = GameConfig.Instance.m_ImpulseRawSignal;
        impulseDefinition.m_AmplitudeGain  = shakeParams.m_AmplitudeGain;
        impulseDefinition.m_FrequencyGain  = shakeParams.m_FrequencyGain;
        impulseDefinition.m_RepeatMode     = CinemachineImpulseDefinition.RepeatMode.Stretch;
        impulseDefinition.m_Randomize      = true;

        impulseDefinition.m_TimeEnvelope.m_AttackTime  = shakeParams.m_AttackTime;
        impulseDefinition.m_TimeEnvelope.m_SustainTime = shakeParams.m_SustainTime;
        impulseDefinition.m_TimeEnvelope.m_DecayTime   = shakeParams.m_DecayTime;

        impulseDefinition.m_ImpactRadius        = 100f;
        impulseDefinition.m_DirectionMode       = CinemachineImpulseManager.ImpulseEvent.DirectionMode.Fixed;
        impulseDefinition.m_DissipationMode     = CinemachineImpulseManager.ImpulseEvent.DissipationMode.ExponentialDecay;
        impulseDefinition.m_DissipationDistance = 1000f;

        impulseDefinition.CreateEvent(position, direction);
    }
コード例 #4
0
        void Execute()
        {
            if (!UpdateCache(Fsm.GetOwnerDefaultTarget(gameObject)))
            {
                return;
            }

            _impulseDefinition = this.cachedComponent.m_ImpulseDefinition;
            _envelopDefinition = _impulseDefinition.m_TimeEnvelope;

            if (!rawSignal.IsNone)
            {
                rawSignal.Value = _impulseDefinition.m_RawSignal;
            }

            if (!amplitudeGain.IsNone)
            {
                amplitudeGain.Value = _impulseDefinition.m_AmplitudeGain;
            }

            if (!frequencyGain.IsNone)
            {
                frequencyGain.Value = _impulseDefinition.m_FrequencyGain;
            }

            if (!repeatMode.IsNone)
            {
                repeatMode.Value = _impulseDefinition.m_RepeatMode;
            }

            if (!randomize.IsNone)
            {
                randomize.Value = _impulseDefinition.m_Randomize;
            }

            if (!attackTime.IsNone)
            {
                attackTime.Value = _envelopDefinition.m_AttackTime;
            }

            if (!sustainTime.IsNone)
            {
                _envelopDefinition.m_SustainTime = sustainTime.Value;
            }

            if (!decayTime.IsNone)
            {
                decayTime.Value = _envelopDefinition.m_DecayTime;
            }

            if (!scaleWithImpact.IsNone)
            {
                scaleWithImpact.Value = _envelopDefinition.m_ScaleWithImpact;
            }

            if (!holdForever.IsNone)
            {
                holdForever.Value = _envelopDefinition.m_HoldForever;
            }

            if (!impactRadius.IsNone)
            {
                impactRadius.Value = _impulseDefinition.m_ImpactRadius;
            }

            if (!directionMode.IsNone)
            {
                directionMode.Value = _impulseDefinition.m_DirectionMode;
            }

            if (!dissipationMode.IsNone)
            {
                dissipationMode.Value = _impulseDefinition.m_DissipationMode;
            }

            if (!dissipationDistance.IsNone)
            {
                dissipationDistance.Value = _impulseDefinition.m_DissipationDistance;
            }
        }
コード例 #5
0
        void Execute()
        {
            if (!UpdateCache(Fsm.GetOwnerDefaultTarget(gameObject)))
            {
                return;
            }

            _impulseDefinition = this.cachedComponent.m_ImpulseDefinition;
            _envelopDefinition = _impulseDefinition.m_TimeEnvelope;

            if (!rawSignal.IsNone)
            {
                _impulseDefinition.m_RawSignal = rawSignal.Value as SignalSourceAsset;
            }

            if (!amplitudeGain.IsNone)
            {
                _impulseDefinition.m_AmplitudeGain = amplitudeGain.Value;
            }

            if (!frequencyGain.IsNone)
            {
                _impulseDefinition.m_FrequencyGain = frequencyGain.Value;
            }

            if (!repeatMode.IsNone)
            {
                _impulseDefinition.m_RepeatMode = (CinemachineImpulseDefinition.RepeatMode)repeatMode.Value;
            }

            if (!randomize.IsNone)
            {
                _impulseDefinition.m_Randomize = randomize.Value;
            }

            if (attackShape.curve.length > 0)
            {
                _envelopDefinition.m_AttackShape = attackShape.curve;
            }

            if (!attackTime.IsNone)
            {
                _envelopDefinition.m_AttackTime = attackTime.Value;
            }

            if (!sustainTime.IsNone)
            {
                _envelopDefinition.m_SustainTime = sustainTime.Value;
            }

            if (decayShape.curve.length > 0)
            {
                _envelopDefinition.m_DecayShape = decayShape.curve;
            }

            if (!decayTime.IsNone)
            {
                _envelopDefinition.m_DecayTime = decayTime.Value;
            }

            if (!scaleWithImpact.IsNone)
            {
                _envelopDefinition.m_ScaleWithImpact = scaleWithImpact.Value;
            }

            if (!holdForever.IsNone)
            {
                _envelopDefinition.m_HoldForever = holdForever.Value;
            }

            if (!impactRadius.IsNone)
            {
                _impulseDefinition.m_ImpactRadius = impactRadius.Value;
            }

            if (!directionMode.IsNone)
            {
                _impulseDefinition.m_DirectionMode = (CinemachineImpulseManager.ImpulseEvent.DirectionMode)directionMode.Value;
            }

            if (!dissipationMode.IsNone)
            {
                _impulseDefinition.m_DissipationMode = (CinemachineImpulseManager.ImpulseEvent.DissipationMode)dissipationMode.Value;
            }

            if (!dissipationDistance.IsNone)
            {
                _impulseDefinition.m_DissipationDistance = dissipationDistance.Value;
            }


            _impulseDefinition.m_TimeEnvelope        = _envelopDefinition;
            this.cachedComponent.m_ImpulseDefinition = _impulseDefinition;
        }
コード例 #6
0
        void DrawImpulseShapeCombo(Rect fullRect, SerializedProperty property)
        {
            float floatFieldWidth = EditorGUIUtility.fieldWidth + 2;

            SerializedProperty timeProp = property.FindPropertyRelative(() => m_MyClass.m_ImpulseDuration);

            if (m_TimeText == null)
            {
                m_TimeText      = new GUIContent(" s", timeProp.tooltip);
                m_TimeTextWidth = GUI.skin.label.CalcSize(m_TimeText).x;
            }

            var graphRect = fullRect;

            graphRect.y      += EditorGUIUtility.singleLineHeight + vSpace;
            graphRect.height -= EditorGUIUtility.singleLineHeight + vSpace;

            var indentLevel = EditorGUI.indentLevel;

            Rect r = fullRect; r.height = EditorGUIUtility.singleLineHeight;

            r = EditorGUI.PrefixLabel(r, EditorGUI.BeginProperty(
                                          r, new GUIContent(m_ShapeProperty.displayName, m_ShapeProperty.tooltip), property));
            m_ShapeProperty.isExpanded = EditorGUI.Foldout(r, m_ShapeProperty.isExpanded, GUIContent.none);

            bool isCustom = m_ShapeProperty.intValue == (int)CinemachineImpulseDefinition.ImpulseShapes.Custom;

            r.width -= floatFieldWidth + m_TimeTextWidth;
            if (isCustom)
            {
                r.width -= 2 * r.height;
            }
            EditorGUI.BeginChangeCheck();
            {
                EditorGUI.PropertyField(r, m_ShapeProperty, GUIContent.none);
                if (EditorGUI.EndChangeCheck())
                {
                    InvalidateImpulseGraphSample();
                }
                if (!isCustom && Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded)
                {
                    DrawImpulseGraph(graphRect, CinemachineImpulseDefinition.GetStandardCurve(
                                         (CinemachineImpulseDefinition.ImpulseShapes)m_ShapeProperty.intValue));
                }
            }
            if (isCustom)
            {
                SerializedProperty curveProp = property.FindPropertyRelative(() => m_MyClass.m_CustomImpulseShape);
                r.x    += r.width;
                r.width = 2 * r.height;
                EditorGUI.BeginChangeCheck();
                EditorGUI.PropertyField(r, curveProp, GUIContent.none);
                if (EditorGUI.EndChangeCheck())
                {
                    curveProp.animationCurveValue = RuntimeUtility.NormalizeCurve(curveProp.animationCurveValue, true, false);
                    curveProp.serializedObject.ApplyModifiedProperties();
                    InvalidateImpulseGraphSample();
                }
                if (Event.current.type == EventType.Repaint && m_ShapeProperty.isExpanded)
                {
                    DrawImpulseGraph(graphRect, curveProp.animationCurveValue);
                }
            }

            // Time
            float oldWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = m_TimeTextWidth;
            r.x += r.width; r.width = floatFieldWidth + EditorGUIUtility.labelWidth;
            EditorGUI.BeginChangeCheck();
            EditorGUI.PropertyField(r, timeProp, m_TimeText);
            if (EditorGUI.EndChangeCheck())
            {
                timeProp.floatValue = Mathf.Max(timeProp.floatValue, 0);
            }
            EditorGUIUtility.labelWidth = oldWidth;

            EditorGUI.indentLevel = indentLevel;
        }