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;
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        // 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);
        }