공부하기싫어
article thumbnail

오늘은

https://www.youtube.com/watch?v=_tSxQ9f6tX0 

 

이분 영상을 참고해서 맥도날드의 공격을 구현해보자

그리고 이 맥도날드 공격이 구현이 되면

 

폭탄 프리팹을 만들고, 유저가 폭탄 사거리에 들어오면 - 폭탄이 흔들리는 애니메이션이 재생되고, 애니메이션이 끝나면 범위데미지가 한번 들어가게끔만 설정해보자

넉백 + 스턴 구현은 내일 해봐야지

 

 

  • 맥도날드 공격 구현

영상을 따라서 기즈모를 만들고

if(curTime <= 0) {
            if(onrange) { //사거리 오브젝트를 플레이어가 밟았다?
                Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(pos.position, boxSize, 0);
                foreach (Collider2D collider in collider2Ds) {
                    if (collider.tag == "Player") {
                        collider.GetComponent<player>().ChangeHealth(-1);
                    }
                }
                animator.SetTrigger("atk");
                curTime=coolTime;
            }
        }
        else {
            curTime -= Time.deltaTime;
        }

맥도날드의 update 코드 안에 만든 것이다.

이전에 위 사진의 빨간 박스와 캐릭터가 만난다면 onrange 를 true 로 바꾸고

이후에 트리거를 넘겨주고, collider.tag 가 player 라면 player 스크립트의 changehealth 함수를 실행시키도록 하였다.

 

애니메이션이 잘 실행됨

추가로 파란 기즈모 안에서 맞으면 체력이 깎이는 것까지 확인했다.

 

  • 폭탄 프리팹

오래걸렸다...

 

bomb.cs

public class bomb : MonoBehaviour
{
    Animator animator;
    bool onrange=false;
    public Transform pos;
    public Vector2 boxSize;
    GameObject bombN; string range_name; string bomb_name;
    public float limTime=2.0f;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if(onrange) { //사거리 오브젝트를 플레이어가 밟았다?
            animator.SetTrigger("onrange");
            Collider2D[] collider2Ds = Physics2D.OverlapBoxAll(pos.position, boxSize, 0);
            if (limTime<=0) {
                foreach (Collider2D collider in collider2Ds) {
                    if (collider.tag == "Player") {
                        collider.GetComponent<player>().ChangeHealth(-1);
                        explode(bomb_name);
                    }
                }

            } else {
                limTime-=Time.deltaTime;
            }
        }
    }

    public void onRange() {
        onrange=true;
        Debug.Log("Player is within range");
    }

    private void OnDrawGizmos() {
        Gizmos.color=Color.blue;
        Gizmos.DrawWireCube(pos.position, boxSize);
    }

    private void explode(string bombname) {
        bombN=GameObject.Find(bombname);
        Destroy(bombN);
        Debug.Log("explode() run"+bombname);
    }

    public void bombsGannaExp(string rangename) {
        if (rangename=="Bomb_range_1") bomb_name="bomb_1";
        else if (rangename=="Bomb_range_2") bomb_name="bomb_2";
        else if (rangename=="Bomb_range_3") bomb_name="bomb_3";
        Debug.Log("rangename : "+rangename+" bomb_name : "+bomb_name);
    }
}

 

bomb_range.cs

public class bomb_range : MonoBehaviour
{
    public GameObject bomb;
    string bombname;
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
       
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        player controller = other.GetComponent<player>();
        bombname=this.gameObject.name;
       
        if (controller != null)
        {
            bomb.GetComponent<bomb>().onRange();
            bomb.GetComponent<bomb>().bombsGannaExp(bombname);
            //Debug.Log("bomb_range script : " + bombname);
        }
    }
}

 

bomb_range 와 플레이어가 충돌하면 bomb_range 에서 자신의 이름을 bomb 으로 넘겨주고

bomb 에서 매칭한 bomb의 애니메이션이 시작되고 2초 후 destroy 하며 데미지를 주게끔 설정 해 놓았다.

 

썽공!

 

오늘은 여기까지!

내일은 나머지 폭탄 1개 배치를 하고

점프 사거리에 따른 바닥 배치를 다시 해 봐야겠다

그리고 여친이 초록 광대 아트들을 완성시켜줘서 초록광대 구현도 생각해 봐야겠고

맥도날드에도 데미지가 들어가는걸 알게 되서

맥도날드가 2번 맞으면 사라지는 기능도 구현해야 겠다.

그리고 남은 화염방사기 일러가 완성되면 화염방사기 프리팹도 만든 후에

UI 작업를 작업하고, 피가 0이 되면 재시작 + r키를 누르면 재시작 까지 구현하면 끝나게 되겠다!

한 반쯤 온거 같다 이제! 휴

 

그나저나

진짜 술 개땡기는데...

진짜 알코올 중독인가 좀 너무 심한데...

지금 거의 9일 연속 술먹고있는데

딱 오늘만 먹을까