Пример #1
0
 protected override void OnAfterSerialize()
 {
     if (transform.position != Vector3.zero)
     {
         Debug.LogWarning("Visual editting can only be used when transform is at origin.");
         return;
     }
     _projectileOffset = new Vector2dHeight(CachedTransform.InverseTransformPoint(_projectileOrigin));
 }
Пример #2
0
    Vector3 CurrentTouchWorldPosition(tk2dUIItem btn)
    {
        Vector3 touchPosition = btn.Touch.position;
        var     uiCamera      = tk2dUIManager.Instance.GetUICameraForControl(gameObject);

        touchPosition.z = btn.transform.position.z - uiCamera.transform.position.z;
        var worldPosition = uiCamera.ScreenToWorldPoint(touchPosition);

        worldPosition.z = btn.transform.position.z;
        return(CachedTransform.InverseTransformPoint(worldPosition));
    }
Пример #3
0
        private void HandleCameraDraw(Camera camera)
        {
            if (SgtHelper.CanDraw(gameObject, camera) == false)
            {
                return;
            }

            // Write camera-dependent shader values
            if (innerMaterial != null && outerMaterial != null)
            {
                var localPosition  = CachedTransform.InverseTransformPoint(camera.transform.position);
                var localDistance  = localPosition.magnitude;
                var innerThickness = default(float);
                var outerThickness = default(float);
                var innerRatio     = SgtHelper.Divide(innerMeshRadius, OuterRadius);
                var middleRatio    = Mathf.Lerp(innerRatio, 1.0f, middle);
                var distance       = SgtHelper.Divide(localDistance, OuterRadius);
                var innerDensity   = 1.0f - innerFog;
                var outerDensity   = 1.0f - outerFog;

                SgtHelper.CalculateHorizonThickness(innerRatio, middleRatio, distance, out innerThickness, out outerThickness);

                innerMaterial.SetFloat(SgtShader._HorizonLengthRecip, SgtHelper.Reciprocal(innerThickness * innerDensity));
                outerMaterial.SetFloat(SgtShader._HorizonLengthRecip, SgtHelper.Reciprocal(outerThickness * outerDensity));

                if (outerDepthTex != null)
                {
#if UNITY_EDITOR
                    SgtHelper.MakeTextureReadable(outerDepthTex);
#endif
                    outerMaterial.SetFloat(SgtShader._Sky, GetSky(localDistance));
                }

                UpdateMaterialNonSerialized();
            }

            var scale  = SgtHelper.Divide(OuterRadius, outerMeshRadius);
            var matrix = CachedTransform.localToWorldMatrix * Matrix4x4.Scale(Vector3.one * scale);

            if (cameraOffset != 0.0f)
            {
                var direction = Vector3.Normalize(camera.transform.position - cachedTransform.position);

                matrix = Matrix4x4.Translate(direction * cameraOffset) * matrix;
            }

            Graphics.DrawMesh(outerMesh, matrix, outerMaterial, gameObject.layer, camera);
        }
Пример #4
0
        // Late update to be certain the camera had a chance to move
        private void LateUpdate()
        {
            // In local space we are origin, so the startPos position is the inverse vector we moved
            Vector3 delta = -CachedTransform.InverseTransformPoint(startPos);

            if (NotOutsideBounds(delta))
            {
                return;
            }

            // apply the x and y limits to the delta vector
            delta.x = Mathf.Max(Mathf.Min(delta.x, RelativeLimits.x), RelativeLimits.z);
            delta.y = Mathf.Max(Mathf.Min(delta.y, RelativeLimits.y), RelativeLimits.w);

            delta.z = 0;             // Keep Z the same

            // Set the position back to where we started and translate over the limited delta
            CachedTransform.position = startPos;
            CachedTransform.Translate(delta, Space.Self);
        }
Пример #5
0
        private void CalculateOcclusion(int layers, Vector4 worldEye, Vector4 worldTgt, ref float occlusion)
        {
            if (SgtOcclusion.IsValid(occlusion, layers, gameObject) == true && OuterRadius > 0.0f && outerDepthTex != null)
            {
                var eye = transform.InverseTransformPoint(worldEye) / OuterRadius;
                var tgt = transform.InverseTransformPoint(worldTgt) / OuterRadius;

                var dir    = Vector3.Normalize(tgt - eye);
                var len    = Vector3.Magnitude(tgt - eye);
                var length = default(float);

                if (GetLength(eye, dir, len, ref length) == true)
                {
                    var depth         = outerDepthTex.GetPixelBilinear(length, length).a;
                    var localPosition = CachedTransform.InverseTransformPoint(worldEye);
                    var localDistance = localPosition.magnitude;

                    depth = Mathf.Clamp01(depth + (1.0f - depth) * GetSky(localDistance));

                    occlusion += (1.0f - occlusion) * depth;
                }
            }
        }
Пример #6
0
        protected override void Update()
        {
            base.Update();

            //m_navAgent.updateRotation = false;
            if (m_navAgent.velocity == Vector3.zero)
            {
                if (HaveEnemyTarget())
                {
                    m_navAgent.updateRotation = false;

                    Vector3 delta = CachedTransform.InverseTransformPoint(
                        m_enemyTarget.CachedTransform.position);

                    float angle = Mathf.Atan2(delta.x, delta.z) * Mathf.Rad2Deg;
                    transform.Rotate(0, angle * Time.deltaTime * (m_navAgent.angularSpeed / 100), 0);
                }
            }
            else
            {
                m_navAgent.updateRotation = true;
            }
        }
Пример #7
0
        private Quaternion TargetRotation(Vector2 screenPos, Camera c)
        {
            var prevRot = CachedTransform.localRotation;

            CachedTransform.localRotation = Quaternion.identity;

            var ray      = c.ScreenPointToRay(screenPos);
            var worldPos = ray.GetPoint(100);

            var localPos = CachedTransform.InverseTransformPoint(worldPos);

            var w = RectTransform.rect.width * 0.5f;
            var h = RectTransform.rect.height * 0.5f;

            var x = localPos.x / w;
            var y = localPos.y / h;

            var rotX = Mathf.Lerp(-TiltRange.x, TiltRange.x, (x * 0.5f) + 0.5f);
            var rotY = Mathf.Lerp(-TiltRange.y, TiltRange.y, (y * 0.5f) + 0.5f);

            CachedTransform.localRotation = prevRot;

            return(Quaternion.Euler(rotY, -rotX, 0));
        }