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)); }
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)); }
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); }
// 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); }
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; } } }
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; } }
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)); }