# data[].attributes.body
만들기

# data[].attributes.headline
신영_07.08_플레이어 위치로 탄 발사, 기본적인 충돌 구현

# data[].attributes.subject
신영_07.08_플레이어 위치로 탄 발사, 기본적인 충돌 구현

# data[].attributes.body
https://drive.google.com/file/d/1CzIHYvBbUHLlAmnjHydSjjssZgwK-Rdg/view?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1oVdyzCdjhodu3W3XipbPFovQaDiSzMpb/view?usp=sharing

# data[].attributes.body
빠진거 있으면 적어주세요

# data[].attributes.body
https://drive.google.com/file/d/1sqaooGaszr44DN4NXl39RNy2fV3DNx4j/view?usp=sharing

# data[].attributes.body
https://assetstore.unity.com/packages/tools/animation/itween-84

# data[].attributes.headline
삼각함수를 이용한 탄막발사

# data[].attributes.subject
삼각함수를 이용한 탄막발사

# data[].attributes.body
https://linecode.tistory.com/11?category=514320

# data[].attributes.body
http://www.pixelplacement.com/itween/index.php

# data[].attributes.headline
의도치 않게 발견한 기능

# data[].attributes.subject
의도치 않게 발견한 기능

# data[].attributes.body
유도탄

# data[].attributes.attachment_link.readable_text
﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float speed;

    // Start is called before the first frame update
    void Start()
    {
        Destroy(this.gameObject, 3f);
    }

    // Update is called once per frame
    void Update()
    {
        this.transform.Translate(new Vector2(transform.position.x-player.pos.x,transform.position.y-player.pos.y+5) * speed);
    }
}

# data[].attributes.body
https://you-rang.tistory.com/142

# data[].attributes.attachment_link.readable_text
﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class tutorial : MonoBehaviour
{
    public Text text;
    private bool tuto1= true;
    private bool tuto2;
    private bool tuto3;
    private bool tuto4;
    public GameObject enemy;
    // Start is called before the first frame update


    // Update is called once per frame
    private void Update()
    {
        StartCoroutine(wait());
    }
    IEnumerator wait()
    {
        if (tuto1 == true)
        {
            text.text = "wasd를 사용하여 움직여보자!";
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.W))
            {
                
                yield return new WaitForSeconds(2.0f);
                tuto1 = false;
                tuto2 =true;
            }
        }
        if (tuto2==true)
        {
            text.text = "F를 눌러 발사를 해보자!";
            if (Input.GetKey(KeyCode.F))
            {
                yield return new WaitForSeconds(2.0f);
                tuto2=false;
                tuto3 = true;

            }
        }
        if (tuto3 == true)
        {
            text.text = "적을 격추시켜보자!";
            if (GameObject.FindGameObjectsWithTag("Enemy").Length == 0)
            {
                yield return new WaitForSeconds(3.0f);
                tuto3 = false;
                tuto4 = true;

            }
        }
        if (tuto4== true)
        {
            text.text = "!!!";
            tuto4 = false;

        }
        
    }
}

# data[].attributes.body
https://drive.google.com/drive/folders/1qFtcq3-4C0HylDe-WAOIrtv9xJRxQ-zH

# data[].attributes.body
2018.3.14

# data[].attributes.body
https://www.youtube.com/watch?v=NRB9p108ZYE

# data[].attributes.body
https://drive.google.com/file/d/1kM7u904446M1aULxvZbqUoSBE-J8grE5/view?usp=sharing

# data[].attributes.body
튜토리얼부분 적 이동, 이거저거 구현

# data[].attributes.headline
이석정 교수님 설명하신 스크립트

# data[].attributes.subject
이석정 교수님 설명하신 스크립트

# data[].attributes.body
1. Itembounce 추가
2. GameManager State 추가
초기 세팅, 플레이어 부활하는거 구현중
3. 몬스터 소환 개편, 300줄짜리 코드 20줄로 줄임
4. 스크립트 이름들 Sc_로 수정중
이는 추후 협의 필요
5. 그외 최대한 주석 달아놓을테니 확인 부탁.

# data[].attributes.body
테스트씬확인

# data[].attributes.body
http://robertpenner.com/easing/easing_demo.html

# data[].attributes.headline
성욱_0.01_자잘한거 여러개

# data[].attributes.subject
성욱_0.01_자잘한거 여러개

# data[].attributes.body
https://drive.google.com/file/d/1h2ty_xNK5O6PB7uOsFq31wGP1t7-9IUB/view?usp=sharing

# data[].attributes.body
https://drive.google.com/open?id=1cojfX-oNI8eMQ3BhpvmUv95KAwHACw_b

# data[].attributes.headline
07_25 그래픽 명세서 (미완성이니 확정 된거는 그래픽 친구들한테 전해주도록 할게요.)

# data[].attributes.subject
07_25 그래픽 명세서 (미완성이니 확정 된거는 그래픽 친구들한테 전해주도록 할게요.)

# data[].attributes.attachment_link.title
게임_시스템_공격_패턴

# data[].attributes.body
https://drive.google.com/file/d/1yNHYI2PtDMEhh3oU0eV2vsNqLHX_b0N0/view?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1HHyxkK6NKRGCvPZs2irlYrMn_enCuWcD/view?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1EmCgKOnMxrX1aA65W5VdkWCJnovesc69/view?usp=sharing

# data[].attributes.attachment_link.readable_text
4p
4p 게임목표<- 게임정의에서 아마 안바꾼거같음
16p
버튼 수 불일치 아마 스테이지 셀렉트가 없는것으로 추정됨

25p
하단 파란 줄 없음(중요)

30p
능력치가 아니고 밸런싱임

33p
플레이어 기본 탄막은 같은거로 하기로했던거같은데 아님 논의가 필요한 부분

공격사거리..?
근접 캐릭터 빼고는 총알 사거리 무한이라 지정할필요없을거같은데 의견들어보고 조율

# data[].attributes.attachment_link.title
기획서_잠재적_수정사항

# data[].attributes.attachment_link.readable_text
4p
게임목표<- 게임정의에서 아마 안바꾼거같음

16p
버튼 수 불일치 아마 스테이지 셀렉트가 없는것으로 추정됨

18p, 25p
하단 파란 줄 없음(중요)

30p
능력치보단 밸런싱으로 표시하는게 맞는 것 같아

33p
근접 캐릭터를 제외한 플레이어 기본 공격은 같은거로 하고 아이템을 먹어 무기 종류를 바꾸는거로 했던거같은데 아님

공격사거리..?
근접 캐릭터 빼고는 총알 사거리 무한이라 지정할필요없을거같은데 의견들어보고 조율

# data[].attributes.attachment_link.title
(추가)기획서_잠재적_수정사항

# data[].attributes.body
https://drive.google.com/open?id=1i9yxKfoIi4JNhSEx_grF5foTlDhpheAs

# data[].attributes.body
1. Itembounce 추가
2. GameManager 틀만드는중
https://drive.google.com/drive/folders/1qFtcq3-4C0HylDe-WAOIrtv9xJRxQ-zH

# data[].attributes.body
https://drive.google.com/file/d/1a027bhhxgmiysNMOMaOMP-omf9EXGZo3/view?usp=sharing

# data[].attributes.body
itembounce

# data[].attributes.attachment_link.readable_text
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class tingintg : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    
    private void OnTriggerEnter(Collider other)
    {
	if(other.tag=="item")
		other.GetComponent<move>().dir.x = other.GetComponent<move>().dir.x*-1;
	

    }
}

# data[].attributes.body
추가한 것은 참고자료에
https://drive.google.com/open?id=1X22zU_JIA7FoW5n8QHgChoMVmBCJ39y7

# data[].attributes.body
https://drive.google.com/file/d/1SjPBrayLxYMBz6C4SiL13DXaKTMPnBJk/view?usp=sharing

# data[].attributes.body
1. 스킬을 구현중이에요
2. 캐릭터 리스폰을 구현했어요.

# data[].attributes.body
1. 불새(?)스킬 기능 구현
2. 적 총알 rig.velocity에서 transform.translate로 변경(velocity는 빌드 후에 테스트할때랑 속도가 심하게 차이남)
3. 동문의밤때 시연시킬것같아서 해상도 고정 코드 ui스크립트->awake에 넣어놓음

# data[].attributes.body
https://drive.google.com/open?id=1wv3QEoRMt4qhMochjPE6G0_vc9L2CFyl

# data[].attributes.body
https://drive.google.com/open?id=15HsQBYCt0B7fc2j5nZfXyewrvGsz7Hgg

# data[].attributes.body
https://drive.google.com/drive/folders/1k60K59gN90XCcTUcQX7vAt8zsvDuVYIB?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1aFRDuT4qbOMouop38jIeDuQjWcFaZT7E/view?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1Ow1qPMw41jHKbe-Cx1mbgEiEDJhZ1HBH/view?usp=sharing

# data[].attributes.attachment_link.readable_text
﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sc_SecondBoss : MonoBehaviour
{
    Sc_DataBase db;

    //초기 체력
    public float maxHP;
    //현제 체력
    public float currentHP;
    
    //발사 간격
    public float interval;
    //총알 프리펩
    public GameObject enemyBullet;
    //불렛의 개수
    public int cnt;
    //각도
    public int angle;




    public float debuffs3_damageDown;

    public bool a = true;
    public bool b = true;
    public bool c = true;

    // Start is called before the first frame update
    void Start()
    {
        db = Sc_DataBase.Instance;
        currentHP = maxHP;
        StartCoroutine(Fire());
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.D))
            currentHP -= 10;
        DeBuff();
    }

    IEnumerator Fire()
    {
        while (true)
        {
            float gap = cnt > 1 ? angle / (float)(cnt - 1) : 0;

            float startAngle = -angle / 2;

            for (int i = 0; i < cnt; i++)
            {
                float theta = startAngle + gap * i;
                float deg_theta = theta;
                theta *= Mathf.Deg2Rad;

                Debug.Log("Debug_deg " + deg_theta + " Debug_Rad " + theta);
                GameObject go = Instantiate(enemyBullet, this.transform.position, this.transform.rotation);
                go.GetComponent<Sc_EnemyBullet>().speed = 10;
                go.GetComponent<Sc_EnemyBullet>().inputMove = new Vector2(-Mathf.Sin(theta), -Mathf.Cos(theta)).normalized;
            }
            yield return new WaitForSeconds(interval);
        }
    }   

    //디버프와 관련된 함수
    private void DeBuff()
    {
        float hpPercent = currentHP / maxHP;

        //5초동안 공격하지 못한다
        if (hpPercent < 0.7f && a)
        {
            a = false;
            StartCoroutine(debuff1());
        }
        //1초간 움직이지 못한다
        else if (hpPercent < 0.5f && b)
        {
            b = false;
            StartCoroutine(debuff2());
        }
        // 데미지 다운
        else if (hpPercent < 0.3f && c)
        {
            c = false;
            Debug.Log("debuff3");
            db.damage -= debuffs3_damageDown;
        }
    }
    IEnumerator debuff1()
    {
        db.plAttack = false;
        Debug.Log("debuff1_false");
        yield return new WaitForSeconds(5);
        db.plAttack = true;
        Debug.Log("debuff1_true");
    }
    IEnumerator debuff2()
    {
        db.plMove = false;
        Debug.Log("debuff2_false");
        yield return new WaitForSeconds(1);
        db.plMove = true;
        Debug.Log("debuff2_true");
    }
}

# data[].attributes.body
https://drive.google.com/file/d/1QhRnlhZU9km2nzQL3ZPURmgPBBZCDJrA/view?usp=sharing

# data[].attributes.body
https://drive.google.com/file/d/1q9yvbIOeZ9u9zOO4q0X4Soyy2Ls-S30o/view?usp=sharing

# data[].attributes.attachment_link.readable_text
상속 관계 정리함
부모		자식
enemy<-firstboss, secondboss, thirdboss, under(쫄몹)
under<-sparrow1, sparrow2, sparrow3
인스펙터창에 뭐가 많을건데 쓸거만 설정해놓으면 되는 부분 

기존 enemy스크립트는 Sc_Sparrow1로 변경됨 2, 3도 잇음

enemy내부 속성 // 더 써야하거나 겹치는경우 추가로 생성

Float
maxhp, currenthp, angle // 탄막 벌어짐 정도 , cooltime // 1보스에서 사용, interval, speed

Gameobject
bulrig, player, bullet

2번이상 사용되는 메소드들 // 설정은 인스펙터창에서 하던가 자식 클래스에서 하는것으로


타임라인에서 겹치는 행동, 위치만 다른 것들은 인스펙터창의 RecodingOffset으로 

# data[].attributes.body
https://drive.google.com/file/d/1giqn8VnYy5F3XSo9HP6rXFS4_c_4wUUD/view?usp=sharing

# data[].attributes.attachment_link.readable_text
1. bullet이 EnemyBulletGroup에 들어가도록 수정		// 일단 Find 사용했으며 추후 수정 필요할듯
	Enemy - spreadShot
	Sparrow2
	
2. player sprite를 계속 변경하도록 수정

3. enemy 움직이는 스크립트인 EnemyMove 추가

4. _test 스크립트에 패턴 구현, 확인 바람
============================================================
bounds는 시간 관계상 못했음

# data[].attributes.body
https://drive.google.com/open?id=1iPrZDk9Bg9ptt4UrtCAx4AwkaGpEBATs

# data[].attributes.body
https://drive.google.com/file/d/1LmLBReg6bcZkVdJb9BGEO__gYoHuJq-y/view?usp=sharing

# data[].attributes.attachment_link.readable_text
1. 총알 enemyBulletGroup안에 들어가게 해놨음 start()->awake() ,instbullet()
2. 벽에 부딪히면 달달달달달하는거 해결함. 근데 bounds는 어케쓰는지 모르겠어서 보류

# data[].attributes.attachment_link.readable_text
1. Player의 Move rig보단 transform 쓰는게 더 좋을거같음
2. Bounds 넣어놨음
	Inspactor창에서 bounds 크기 지정해주고 사용하면 됌

3. Player Delegate 추가함, 명칭은 일단 막 정해놨음 추후 수정 필요

4. FirePos 추가함

5. Header와 Space를 사용해 Enemy의 변수들 상속관계 보기 편하게 정리
이외에도 많으니까 한번 읽어봐 -> https://mentum.tistory.com/223

6. db 최상위클래스인 Enemy에서 protected로 정의하고 하위 클래스에서 정의한 db 삭제

7. Under의 Destroy OnEnable로 이동, 패턴 역시 OnEnable로 이동

8. 8~13 패턴 모두 추가
============================================================
그외
1. 상속관계일땐 Start가 안먹히는거 같음	
Under에서 Awake는 debug가 실행됬으나 Start에서는 debug가 실행안됌

2. 총알 enemybulletgroup에 안들어감, 해결 부탁


# data[].attributes.body
https://drive.google.com/open?id=1K-0DvQEEmjCyOMG3rtkqW7vK6aQUKOFc

# data[].attributes.headline
보스캐릭터 이동&공격패턴

# data[].attributes.subject
보스캐릭터 이동&공격패턴

# data[].attributes.attachment_link.title
피존_보스캐릭터_기획서

# data[].attributes.body
(계속 수정될 듯)

# data[].attributes.headline
스테이지1 공격&이동패턴

# data[].attributes.subject
스테이지1 공격&이동패턴

# data[].attributes.body
수정본

# data[].attributes.attachment_link.title
피존_스테이지1패턴_기획서

# data[].attributes.body
ui_p2

# data[].attributes.body
https://drive.google.com/file/d/1BDi-AzEeHugJEQ1umeT_UK6dE1hqZXax/view?usp=sharing

# data[].attributes.body
총알 그룹에 들어가게 바꿨음

# data[].attributes.headline
피존 패키지 파일 링크

# data[].attributes.subject
피존 패키지 파일 링크

# data[].attributes.body
https://docs.google.com/document/d/1atQ74PML0RLzM7vd7SjCC4GTCGyXNiIJObiyttSgpQw/edit

# data[].attributes.body
보고 어떤지 확인뷰탁
많으면 줄여도 댐

# data[].attributes.headline
스테이지2 공격&이동패턴 기획

# data[].attributes.subject
스테이지2 공격&이동패턴 기획

# data[].attributes.body
3_01수정본
(마리 수 조정)

# data[].attributes.attachment_link.title
피존_스테이지2패턴_기획서

# data[].attributes.headline
스테이지3 공격&이동패턴 기획

# data[].attributes.subject
스테이지3 공격&이동패턴 기획

# data[].attributes.attachment_link.title
피존_스테이지3패턴_기획서

# data[].attributes.attachment_link.title
피존_메인기획서_김선주