// Update is called once per frame void Update() { var realColor = new Color(hasColor.HasFlag(LaserInfo.ColorCode.Red) ? 1 : 0.2f, hasColor.HasFlag(LaserInfo.ColorCode.Green) ? 1 : 0.2f, hasColor.HasFlag(LaserInfo.ColorCode.Blue) ? 1 : 0.2f); _sr.color = realColor; }
// Update is called once per frame public void UpdateLaser() { if (dependentLaser) { transform.position = dependentLaser.end; } var pos = transform.position; var ray = Physics2D.Raycast(pos, direction, Mathf.Infinity, LayerMask.GetMask("Object")); if (ray.transform == null) { Debug.Log(pos + " / " + direction); return; } end = ray.point; _light.positionCount = 2; _light.SetPositions(new [] { pos, (Vector3)end }); var realColor = new Color(color.HasFlag(LaserInfo.ColorCode.Red) ? 1 : 0, color.HasFlag(LaserInfo.ColorCode.Green) ? 1 : 0, color.HasFlag(LaserInfo.ColorCode.Blue) ? 1 : 0); _light.startColor = realColor; _light.endColor = realColor; var prevNormalDir = normalDir; normalDir = ray.normal; var prevReflectionDir = reflectionDir; reflectionDir = Vector2.Reflect(direction, normalDir); var prevHitObj = hitObj?hitObj:null; hitObj = ray.transform.gameObject; //이전에 어떤 오브젝트와도 충돌하지 않은 경우 or 이전과 다른 오브젝트와 충돌한 경우 or 법선 방향이 달라진 경우 if (prevHitObj == null || !prevHitObj.Equals(hitObj) || prevReflectionDir != reflectionDir) { if (prevHitObj != null && ConvertNormal(prevNormalDir) != LaserInfo.BlockFace.None) { var prevBlock = prevHitObj.GetComponent <BlockMove>(); prevBlock.laserInfo.RemoveLaserInfoOnFace(ConvertNormal(prevNormalDir), color); } var block = hitObj.GetComponent <BlockMove>(); block.laserInfo.AddLaserInfoOnFace(ConvertNormal(normalDir), color); foreach (var laser in _subLasers) { laser.Destroy(); } _subLasers.Clear(); if (hitObj.CompareTag("Mirror")) { var reflectiveColor = hitObj.GetComponent <BlockColor>().hasColor; var laser = CreateLaser(pos, Vector2.Reflect(direction, ray.normal), reflectiveColor & color, this); laser.UpdateLaser(); } else if (hitObj.CompareTag("Glass")) { var transmissiveColor = hitObj.GetComponent <BlockColor>().hasColor; var transmissiveLaser = CreateLaser(pos, direction, color & transmissiveColor, this); transmissiveLaser.UpdateLaser(); } } else { foreach (var laser in _subLasers) { laser.UpdateLaser(); } } }