Beispiel #1
0
    public override Vector3 UpdateVelocity(SE_SkillObject skillObj, float deltaTime)
    {
        float homingSpeed = fl_homingSpeed.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);

        if (!enabled)
        {
            return(skillObj.velocity);
        }
        if (skillObj.target == null)
        {
            return(skillObj.velocity);
        }

        float   velocityMagnitude = skillObj.velocity.magnitude;
        Vector3 faceDir           = (skillObj.target.position - skillObj.transform.position);
        Vector3 homingStrength    = fl_homingStrengthXYZ.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);

        faceDir.x *= Mathf.Clamp01(homingStrength.x);
        faceDir.y *= Mathf.Clamp01(homingStrength.y);
        faceDir.z *= Mathf.Clamp01(homingStrength.z);
        Vector3 faceToTargetVelocity = faceDir.normalized * velocityMagnitude;
        Vector3 lerpVelocity         = Vector3.Lerp(skillObj.velocity, faceToTargetVelocity, deltaTime * homingSpeed).normalized *velocityMagnitude;

        Transform objSimulationSpace = skillObj.transform.parent;

        if (objSimulationSpace == null)//World Space
        {
            return(lerpVelocity);
        }
        else
        {
            return(Vector3.Lerp(skillObj.velocity, objSimulationSpace.TransformDirection(faceToTargetVelocity), deltaTime * homingSpeed).normalized *velocityMagnitude);
        }
    }
    public override Vector3 UpdateAnchorOffset(SE_SkillObject skillObj, float deltaTime)
    {
        anchorOffsetOverLife = fl_anchorOffsetOverLife.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);
        switch (modifierType)
        {
        case ModifierType.Override:
            return(anchorOffsetOverLife);

        case ModifierType.Multiplier:
        {
            calAnchorOffset.x = skillObj.initAnchorOffset.x * anchorOffsetOverLife.x;
            calAnchorOffset.y = skillObj.initAnchorOffset.y * anchorOffsetOverLife.y;
            calAnchorOffset.z = skillObj.initAnchorOffset.z * anchorOffsetOverLife.z;
            return(calAnchorOffset);
        }

        case ModifierType.Add:
            return(skillObj.initAnchorOffset + anchorOffsetOverLife);

        case ModifierType.AddMultiplier:
        {
            calAnchorOffset.x = skillObj.initAnchorOffset.x * anchorOffsetOverLife.x;
            calAnchorOffset.y = skillObj.initAnchorOffset.y * anchorOffsetOverLife.y;
            calAnchorOffset.z = skillObj.initAnchorOffset.z * anchorOffsetOverLife.z;
            return(skillObj.initAnchorOffset + calAnchorOffset);
        }

        default:
            break;
        }
        return(anchorOffsetOverLife);
    }
    public override Vector3 UpdateVelocity(SE_SkillObject skillObj, float deltaTime)
    {
        if (!enabled)
        {
            return(skillObj.velocity);
        }
        Vector3 faceToTargetVelocity, noiseSpeed, noiseStrength, noiseVal, lerpVelocity = Vector3.zero;

        if (!bSeperateXYZ)
        {
            noiseSpeed    = Vector3.one * fl_noiseSpeed.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);
            noiseStrength = Vector3.one * fl_noiseStrength.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);
        }
        else
        {
            noiseSpeed    = fl_noiseSpeedXYZ.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);
            noiseStrength = fl_noiseStrengthXYZ.GetValueByTimeRatio(1 - skillObj.lifetimeRemainRatio);
        }
        noiseVal.x           = Mathf.PerlinNoise(Time.time * noiseSpeed.x + (skillObj.transform.position.x * worldPositionInfluence.x), 0.0f);
        noiseVal.y           = Mathf.PerlinNoise(Time.time * noiseSpeed.y + (skillObj.transform.position.y * worldPositionInfluence.y), 0.3f);
        noiseVal.z           = Mathf.PerlinNoise(Time.time * noiseSpeed.z + (skillObj.transform.position.z * worldPositionInfluence.z), 0.6f);
        faceToTargetVelocity = new Vector3(noiseVal.x - 0.5f, noiseVal.y - 0.5f, noiseVal.z - 0.5f).normalized;

        lerpVelocity.x = Mathf.Lerp(skillObj.velocity.normalized.x, faceToTargetVelocity.x, Mathf.Clamp01(deltaTime * noiseStrength.x));
        lerpVelocity.y = Mathf.Lerp(skillObj.velocity.normalized.y, faceToTargetVelocity.y, Mathf.Clamp01(deltaTime * noiseStrength.y));
        lerpVelocity.z = Mathf.Lerp(skillObj.velocity.normalized.z, faceToTargetVelocity.z, Mathf.Clamp01(deltaTime * noiseStrength.z));

        float velocityMagnitude = skillObj.velocity.magnitude;

        lerpVelocity = lerpVelocity.normalized * velocityMagnitude;
        Transform objSimulationSpace = skillObj.transform.parent;

        //if (objSimulationSpace == null)//World Space
        return(lerpVelocity);
        //else
        //    return Vector3.Lerp(skillObj.velocity, objSimulationSpace.TransformDirection(faceToTargetVelocity), deltaTime * noiseSpeed).normalized * velocityMagnitude;
    }
 public Vector3 GetInitRotation()
 {
     return(fl_rotation.GetValueByTimeRatio(emitter.timeRatio));
 }
Beispiel #5
0
 public Vector3 GetInitSize()
 {
     return(lockXYZ
             ? fl_size.GetValueByTimeRatio(emitter.timeRatio) * Vector3.one
             : fl_size3D.GetValueByTimeRatio(emitter.timeRatio));
 }
 public Vector3 GetInitAnchorRotationRate()
 {
     return(fl_rotRate.GetValueByTimeRatio(emitter.timeRatio));
 }