public void Update() { if (camera == null) { return; } Transform transform = camera.transform; Vector2 position2D = LightingPosition.GetPosition2D(transform.position); Vector2 scale2D = transform.lossyScale; float rotation2D = LightingPosition.GetRotation2D(transform); float size2D = camera.orthographicSize; bool update = false; if (position != position2D) { position = position2D; update = true; } if (scale != scale2D) { scale = scale2D; update = true; } if (rotation != rotation2D) { rotation = rotation2D; update = true; } if (size != size2D) { size = size2D; update = true; } if (update) { worldPolygon = null; } }
public static void SetPass(Light2D lightObject, LayerSetting layer) { light = lightObject; lightSize = Mathf.Sqrt(light.size * light.size + light.size * light.size); lightOffset = -light.transform2D.position; effectLayer = layer.shadowEffectLayer; objectOffset = Vector2.zero; effectPolygons.Clear(); softShadowObjects = layer.shadowEffect == LightLayerShadowEffect.SoftObjects; softShadow = softShadowObjects || layer.shadowEffect == LightLayerShadowEffect.SoftVertex; if (lightObject.IsPixelPerfect()) { Camera camera = Camera.main; Vector2 pos = LightingPosition.GetPosition2D(-camera.transform.position); drawOffset = light.transform2D.position + pos; } else { drawOffset = Vector2.zero; } if (layer.shadowEffect == LightLayerShadowEffect.Projected) { drawMode = 2; GenerateEffectLayers(); } else if (softShadow) { drawMode = 1; } else if (layer.shadowEffect == LightLayerShadowEffect.SpriteProjection) { drawMode = 3; } else { drawMode = 0; } }
static public void Draw(Light2D light, Camera camera) { if (light.Buffer == null) { return; } if (light.isActiveAndEnabled == false) { return; } if (light.InAnyCamera() == false) { return; } Vector2 pos = LightingPosition.GetPosition2D(-camera.transform.position); Vector2 size = new Vector2(light.size, light.size); if (light.IsPixelPerfect()) { size = LightingRender2D.GetSize(camera); pos = Vector2.zero; } else { pos += light.transform2D.position; } Color lightColor = light.color; lightColor.a = light.color.a / 2; Material material = Lighting2D.materials.GetLight(); material.mainTexture = light.Buffer.renderTexture.renderTexture; material.SetColor("_TintColor", lightColor); Rendering.Universal.Texture.Draw(material, pos, size, 0); }
public void UpdateLight(Light2D id, MeshMode meshMode) // Camera { if (meshModeMaterial != meshMode.materials) { meshModeMaterial = meshMode.materials; ClearMaterial(); } if (meshModeShader != meshMode.shader) { meshModeShader = meshMode.shader; ClearMaterial(); } Material[] materials = GetMaterials(); if (materials == null) { return; } if (id.IsPixelPerfect()) { Camera camera = Camera.main; Vector2 cameraSize = LightingRender2D.GetSize(camera); Vector2 cameraPosition = LightingPosition.GetPosition2D(-camera.transform.position); transform.position = new Vector3(cameraPosition.x, cameraPosition.y, id.transform.position.z); transform.localScale = new Vector3(cameraSize.x, cameraSize.y, 1); } else { transform.position = id.transform.position; transform.localScale = new Vector3(id.size, id.size, 1); } transform.rotation = Quaternion.Euler(0, 0, 0); // transform.rotation = id.transform.rotation; // only if rotation enabled if (id.Buffer != null && meshRenderer != null) { Color lightColor = id.color; lightColor.a = id.meshMode.alpha; for (int i = 0; i < materials.Length; i++) { if (materials[i] == null) { continue; } materials[i].SetColor("_TintColor", lightColor); materials[i].color = lightColor; materials[i].mainTexture = id.Buffer.renderTexture.renderTexture; } id.meshMode.sortingLayer.ApplyToMeshRenderer(meshRenderer); meshRenderer.sharedMaterials = GetMaterials(); meshRenderer.enabled = true; meshFilter.mesh = GetMeshLight(); } }