void SetLaser() { Vector2 currentPosition = transform.position; Vector2 targetPosition = target.transform.position; laserDraw.SetWidth(0.2f, 0.01f); laserDraw.SetColors(startColor, endColor); laserDraw.SetPosition(0, currentPosition); laserDraw.SetPosition(1, targetPosition); RaycastHit2D[] hits = Physics2D.LinecastAll(currentPosition, targetPosition, unitLayer); Debug.DrawLine(currentPosition, targetPosition, Color.red); if (hits.Length >= 1) { for (int i = 0; i < hits.Length; i++) { if (hits[i].collider.tag == "Player") { IUnit unit = hits[i].collider.gameObject.GetComponent <IUnit>(); if (unit != null) { unit.Attacked(1); } } } } Quaternion targetRotation = SetRotate(currentPosition, targetPosition); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 0.2f); }
void SetLaser() { for (int i = 0; i < (laserLaunchers.Count - 1); i++) { //발사기 별 타겟 설정 및 회전 조절 Vector2 currentLauncher = laserLaunchers[i].transform.position; Vector2 nextLauncher = laserLaunchers[i + 1].transform.position; Launcher Lstate = laserLaunchers[i].GetComponent <Launcher>(); Quaternion targetRotation = SetRotate(currentLauncher, nextLauncher); laserLaunchers[i].transform.rotation = Quaternion.Slerp(laserLaunchers[i].transform.rotation, targetRotation, 0.2f); if (i == laserLaunchers.Count - 2) { Quaternion lastRotation = SetRotate(nextLauncher, currentLauncher); laserLaunchers[i + 1].transform.rotation = Quaternion.Slerp(laserLaunchers[i + 1].transform.rotation, lastRotation, 0.2f); } //상태 체크 및 레이저 그리기 (비활성화면 다음 발사기로) if (Lstate.state == Launcher.State.Inactive) { continue; } laserDraw = laserLaunchers[i].GetComponent <LineRenderer>(); laserDraw.SetWidth(0.1f, 0.1f); switch (Lstate.state) { case Launcher.State.Normal: laserDraw.SetColors(normalColor, normalColor); break; case Launcher.State.Invisible: laserDraw.SetColors(invisibleColor, invisibleColor); break; case Launcher.State.Visible: laserDraw.SetColors(visibleColor, visibleColor); break; } laserDraw.SetPosition(0, currentLauncher); laserDraw.SetPosition(1, nextLauncher); //레이저 활성화 RaycastHit2D hit = Physics2D.Linecast(currentLauncher, nextLauncher, unitLayer); if (hit) { IUnit unit = hit.collider.gameObject.GetComponent <IUnit>(); if (unit != null) { unit.Attacked(1); } } } //마지막 레이저 발사기는 선이 안 보이게 처리 lastLaserDraw = laserLaunchers[laserLaunchers.Count - 1].GetComponent <LineRenderer>(); lastLaserDraw.SetWidth(0, 0); lastLaserDraw.SetPosition(0, laserLaunchers[laserLaunchers.Count - 1].transform.position); lastLaserDraw.SetPosition(1, laserLaunchers[laserLaunchers.Count - 1].transform.position); }