Untitled
unknown
csharp
2 years ago
5.2 kB
5
Indexable
private void LateUpdate() { if (stopAI) return; if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && (EquippedWeapon && UseEquipSystem) && Combating) { anim.SetBool("Combating", false); Combating = false; DisableIK(); } if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && !WeightDown && BodyWeight <= 0.15f) { WeightDown = true; } else if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && WeightDown) { BodyWeight = 0; if (!Combating) { UseIK = false; elapsedTime = 0; } } if (AIConfidence == PolygonAIEnums.AIConfidence.Coward) { UseIK = false; elapsedTime = 0; } if (GetTarget() == null) { FirstIKDetect = true; } CheckIK(); if (Reloading || GettingHit) { BodyWeight = 0; return; } DistanceFixLerp = Mathf.Lerp(DistanceFixLerp, 0, Time.deltaTime * 6); if (WeaponType == PolygonAIEnums.WeaponType.Shooter && GetTarget() != null && UseAimIK && !Reloading && !GettingHit) { for (int i = 0; i < iterations; i++) { for (int j = 0; j < boneTransforms.Length; j++) { Transform bone = boneTransforms[j]; if (CheckAngle(GetTargetPosition())) { if (FirstIKDetect) { FixedLookPosition = GetTargetPosition(); FirstIKDetect = false; } FixedLookPosition = Vector3.SmoothDamp(FixedLookPosition, GetTargetPosition(), ref TheVel, AimSmoothAmount, 20); AimAtTarget(bone, FixedLookPosition, BodyWeight); } } } } else if (WeaponType == PolygonAIEnums.WeaponType.Shooter && GetTarget() == null && UseAimIK && !Reloading && !GettingHit) { for (int i = 0; i < iterations; i++) { for (int j = 0; j < boneTransforms.Length; j++) { Transform bone = boneTransforms[j]; AimAtTarget(bone, FixedLookPosition, BodyWeight); } } } } Vector3 GetTargetPosition() { Vector3 targetdir = Vector3.zero; if (PlayerScript != null && PlayerScript.AimPosition != null) { targetdir = PlayerScript.AimPosition.position - AimTransform.position; } else { targetdir = GetTarget().transform.position - AimTransform.position; } Vector3 aimdirection = AimTransform.forward; YOffset = 0; targetdir.Set(targetdir.x, targetdir.y + YOffset, targetdir.z); Vector3 dir = Vector3.Slerp(targetdir, aimdirection, 0); // if (GetTargetDistance() <= 1.7f && lastone != Vector3.zero) // { // return lastone; // } lastone = AimTransform.position + dir + AimOffset; return lastone; } private void AimAtTarget(Transform bone, Vector3 TargetPos, float weight) { Vector3 RifleDirection = Vector3.Lerp(AimTransform.forward, HeadTransform.forward, DistanceFixLerp); Vector3 AimTransf = (Vector3.Lerp(AimTransform.position, HeadTransform.position, DistanceFixLerp)) + RifleDirection * -3; Vector3 TargetDirection = TargetPos - AimTransf; Quaternion AimDirect = Quaternion.FromToRotation(RifleDirection * 4, TargetDirection); Quaternion BlendAmount = Quaternion.Slerp(Quaternion.identity, AimDirect, weight); bone.rotation = BlendAmount * bone.rotation; } private bool CheckAngle(Vector3 pos) { Vector3 direction = (new Vector3(pos.x, pos.y + pos.y / 2, pos.z)) - HeadTransform.position; float angle = Vector3.Angle(new Vector3(direction.x, 0, direction.z), transform.forward); return angle <= AngleLimit / 2; } private float GetAngle(Vector3 pos) { Vector3 direction = (new Vector3(pos.x, pos.y + pos.y / 2, pos.z)) - HeadTransform.position; float angle = Vector3.Angle(new Vector3(direction.x, 0, direction.z), transform.forward); return angle; }
Editor is loading...