protected override void UpdateIn() { if (!Focused) { canvasGroup.alpha = 0f; return; } // Waiting for input to invoke actions defined in event if (Input.GetKeyDown(InteractionKey)) { if (EventOnInteraction != null) { EventOnInteraction.Invoke(); } } // Setting position of text to be viewed on object in 3D space on 2D canvas Vector3 targetPos = FVectorMethods.GetUIPositionFromWorldPosition(transform.position + transform.TransformVector(canvasObjectOffset), Camera.main, canvasRect); if (targetPos.z > 0f) { // Fading in quickly canvas canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, 1.05f, Time.deltaTime * 5f); targetPos.z = 0f; viewText.rectTransform.anchoredPosition = targetPos; } else { canvasGroup.alpha = 0f; } }
void Start() { initPos = transform.position; time = Random.Range(-Mathf.PI * 3, Mathf.PI * 3); // Choosing random value vectors to make trigonometric methods behave kinda random randomVector1 = FVectorMethods.RandomVector(4.5f, 6.5f); randomVector2.x = Random.Range(10f, 12f); randomVector2.y = Random.Range(3.25f, 4.75f); randomVector2.z = Random.Range(2.55f, 4.25f); }
// V1.1 and V1.1.1/2 /// <summary> /// 꼬리 변환 위치 및 회전 설정 한 꼬리 세그먼트의 목표 회전을 계산합니다. /// 2D 회전과 같은 일부 예외 계산을 위해 재정의합니다. /// </summary> protected virtual Quaternion CalculateTargetRotation(Vector3 startLookPos, Vector3 currentPos, FTail_Point previousTailPoint = null, FTail_Point currentTailPoint = null, int lookDirectionFixIndex = 0) { Quaternion targetRotation; //V1.2.5 int fixDirForw = lookDirectionFixIndex + 1; if (lookDirectionFixIndex == -1) { fixDirForw = 0; lookDirectionFixIndex = 0; } if (FullCorrection) { targetRotation = Quaternion.identity; bool rotationCollision = false; if (UseCollision) { if (collisionFlags[fixDirForw] > 0f) { if (collisionOffsets[fixDirForw] != Vector3.zero) { rotationCollision = true; } } } if (!rotationCollision) { if (RolledBones) { targetRotation = Quaternion.LookRotation(startLookPos - currentPos, previousTailPoint.TransformDirection(-lookBackDirections[fixDirForw] * 0.99f)); } else { targetRotation = Quaternion.LookRotation(startLookPos - currentPos, previousTailPoint.TransformDirection(AxisLookBack)); } } else { //Quaternion target = Quaternion.LookRotation(collisionOffsets[fixDirForw], previousTailPoint.TransformDirection(AxisLookBack)); //// Quaternion target = Quaternion.LookRotation(collisionOffsets[fixDirForw], previousTailPoint.TransformDirection(AxisLookBack)) * Quaternion.FromToRotation(tailLookDirections[lookDirectionFixIndex], ExtraToDirection); //targetRotation *= Quaternion.Slerp(Quaternion.identity, target, collisionFlags[fixDirForw]); Vector3 tailDirection = (startLookPos - currentPos).normalized; Vector3 upwards; if (RolledBones) { upwards = previousTailPoint.TransformDirection(-lookBackDirections[fixDirForw] * 0.99f); } else { upwards = previousTailPoint.TransformDirection(AxisLookBack); } Vector3 smoothedDirection = Vector3.Slerp(tailDirection, (tailDirection + collisionOffsets[currentTailPoint.index]).normalized, collisionFlags[fixDirForw]); targetRotation = Quaternion.LookRotation(smoothedDirection, upwards); } if (GravityPower != Vector2.zero) { float mul = 10 / (fixDirForw * 2.5f + 1); targetRotation *= Quaternion.Euler(GravityPower.y * mul, GravityPower.x * mul, 0f); } targetRotation *= Quaternion.FromToRotation(tailLookDirections[lookDirectionFixIndex], ExtraToDirection); if (AnimateCorrections) { targetRotation *= animatedCorrections[fixDirForw]; } else { targetRotation *= lookBackOffsets[fixDirForw]; } } else { targetRotation = Quaternion.identity; bool rotationCollision = false; if (UseCollision) { if (collisionFlags[fixDirForw] > 0f) { if (collisionOffsets[fixDirForw] != Vector3.zero) { #region Experiments //Quaternion target = Quaternion.LookRotation(collisionOffsets[fixDirForw], previousTailPoint.TransformDirection(AxisLookBack)); ////Quaternion target = Quaternion.LookRotation(collisionOffsets[fixDirForw], previousTailPoint.TransformDirection(AxisLookBack)) * Quaternion.FromToRotation(tailLookDirections[lookDirectionFixIndex], ExtraToDirection); //targetRotation *= Quaternion.Slerp(Quaternion.identity, target, collisionFlags[fixDirForw]); //Quaternion target = Quaternion.LookRotation(collisionOffsets[fixDirForw], previousTailPoint.TransformDirection(AxisLookBack)); //targetRotation *= Quaternion.Slerp(Quaternion.identity, target, collisionFlags[fixDirForw]); //Vector3 tailDirection = (startLookPos - currentPos).normalized; //Vector3 smoothedDirection = Vector3.Slerp(tailDirection, (tailDirection + collisionOffsets[fixDirForw]).normalized, collisionFlags[fixDirForw]); //targetRotation = Quaternion.LookRotation(smoothedDirection, previousTailPoint.TransformDirection(AxisLookBack * Mathf.Sign(FVectorMethods.VectorSum(AxisCorrection)))); //Vector3 smoothedDirection = Vector3.Slerp(tailDirection, (tailDirection + collisionOffsets[fixDirForw]).normalized, collisionFlags[fixDirForw]); //Vector3 upwards = previousTailPoint.TransformDirection(AxisLookBack * Mathf.Sign(FVectorMethods.VectorSum(AxisCorrection))); //Vector3 tailDirection = (startLookPos - currentPos).normalized; //targetRotation = Quaternion.LookRotation(tailDirection, upwards); //targetRotation *= Quaternion.Slerp( Quaternion.identity, Quaternion.LookRotation(collisionOffsets[currentTailPoint.index], upwards), collisionFlags[fixDirForw]); #endregion Experiments Vector3 tailDirection = (startLookPos - currentPos).normalized; Vector3 smoothedDirection = Vector3.Slerp(tailDirection, (tailDirection + collisionOffsets[currentTailPoint.index]).normalized, collisionFlags[fixDirForw]); targetRotation = Quaternion.LookRotation(smoothedDirection, previousTailPoint.TransformDirection(AxisLookBack)); rotationCollision = true; } } } if (!rotationCollision) { targetRotation = Quaternion.LookRotation(startLookPos - currentPos, previousTailPoint.TransformDirection(AxisLookBack * Mathf.Sign(FVectorMethods.VectorSum(AxisCorrection)))); } if (GravityPower != Vector2.zero) { float mul = 10 / (fixDirForw * 2.5f + 1); targetRotation *= Quaternion.Euler(GravityPower.y * mul, GravityPower.x * mul, 0f); } if (ExtraCorrectionOptions) { targetRotation *= Quaternion.FromToRotation(ExtraFromDirection, ExtraToDirection); } } return(targetRotation); }