공부하기싫어
article thumbnail

오늘은 저주가 아닌 공 ( 만들고 있는 패턴에서는 빨간 + 노란 공) 을 만들어서

이 공들을 잘못 부시게 되면 체력을 깎도록 해볼꺼고

 

맥도날드는 일단 플레이어가 어느정도 거리 안에 들어오면 애니메이션이 재생되게끔 하는 것 만 우선 구현을 해 보려고 한다.

 

 

  • 저주 아닌 공

 

새로운 레이어를 만들어서 입력받게 해줌

if (Input.GetKeyDown(KeyCode.Q)) { //q키 상호작용
            animator.SetBool("attacking",true);
            RaycastHit2D ball_hit = Physics2D.Raycast(rigidbody2d.position + Vector2.up * 0.2f, lookDirection, 2.0f, LayerMask.GetMask("balls"));
            RaycastHit2D wrong_ball_hit = Physics2D.Raycast(rigidbody2d.position + Vector2.up * 0.2f, lookDirection, 2.0f, LayerMask.GetMask("other_balls"));
            string ballN=ball_hit.collider.gameObject.name;
            string wrong_ballN=wrong_ball_hit.collider.gameObject.name;
            if (ball_hit.collider != null) {
                Debug.Log("keydown Q : " + ball_hit.collider.gameObject);
                balls blueball = ball_hit.collider.GetComponent<balls>();
                if (blueball != null)
                {
                    curse_count = curse_count - blueball.hit(ballN);
                    Debug.Log("left curse_count : " + curse_count);
                }
            }
            if (wrong_ball_hit.collider != null) {
                Debug.Log("keydown Q : wrong balls - " + wrong_ball_hit.collider.gameObject);
                balls RorYball = wrong_ball_hit.collider.GetComponent<balls>();
                if (RorYball != null)
                {
                    RorYball.wrongballs(wrong_ballN);
                    ChangeHealth(-1);
                }
            }

        } else {
            animator.SetBool("attacking", false);
        }

 

이런식으로 해보려고 했는데

 

??

안돼버림

?

고침

player.cs update()

if (Input.GetKeyDown(KeyCode.Q)) { //q키 상호작용
            animator.SetBool("attacking",true);
            RaycastHit2D ball_hit = Physics2D.Raycast(rigidbody2d.position + Vector2.up * 0.2f, lookDirection, 2.0f, LayerMask.GetMask("balls"));
            string ballN=ball_hit.collider.gameObject.name;
            if (ball_hit.collider != null) {
                Debug.Log("keydown Q : " + ball_hit.collider.gameObject);
                balls judge_ball = ball_hit.collider.GetComponent<balls>();
                if (judge_ball != null)
                {
                    if (judge_ball.hit(ballN)) {
                        curse_count = curse_count - 1;
                        Debug.Log("left curse_count : " + curse_count);
                    } else {
                        ChangeHealth(-1);
                    }
                } else { ;}
            }
        } else {
            animator.SetBool("attacking", false);
        }

balls.cs hit()

public bool hit(string ballname) {
        ball=GameObject.Find(ballname);
        Destroy(ball);
        if (ballname=="ball_blue_1" || ballname=="ball_blue_2" || ballname=="ball_blue_3") {
            return true;
        }
        else {
            return false;
        }
    }

 

 

player 가 q를 입력했을 때, 앞의 2 거리 안에 있는 콜라이더 를 가진 오브젝트의 이름을 따와서

이게 파란공 중 하나면 true 를 반환하고 아니면 false 를 반환하게 해서

true 라면 저주 수치를 깎고, false 라면 체력을 1 깎도록 했다.

 

 

 

  • 맥도날드 애니메이션

맥도날드의 공격을 어떻게 구현해야 하나 찾던 도중

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

진짜 정말 너무너무 유용한 영상이다...

이걸 보면서 나중에 공격을 구현해보도록 하고

오늘은 일단 플레이어가 어느정도 까지 오면 애니메이션이 재생되도록 해보자

 

 

애니메이션 구성

 

bool 로 재생 판단하기

맥도날드 스크립트

public class McD : MonoBehaviour
{
    Animator animator;
    bool onrange=false;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        if(onrange) { //사거리 오브젝트를 플레이어가 밟았다?
            animator.SetBool("onrange",true);
        }
    }

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

 

범위 상자 스크립트

public class rangeBox : MonoBehaviour
{
    public GameObject McD;
    // 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>();
       

        if (controller != null)
        {
            McD.GetComponent<McD>().onRange();
        }
    }
}

 

 

범위 상자와 플레이어가 충돌하면 맥도날드의 애니메이션이 재생되도록 설정해봤다.

성공!

 

아주 잘 되었다.

 

 

내일은 여친이랑 300일이라 아마 작업 할 시간이 없을것 같다.

오늘 약 3시간동안 했는데 알차게 잘한듯? ㅋㅋ

 

친구가 바운스 볼의 속도가 너무 느리다고 해서 속도를 맞춰봐야 할 것 같다.

또, 바닥들의 넓이를 조정하는게 좋을것 같다고 해서 다음 작업할때는 점프 거리에 맞춰서 바닥 길이를 좀 수정해 볼 필요가 있을 것 같다.

그리고 위의 유튜브 영상을 참고해서 맥도날드의 공격을 구현해 보면

폭탄 터지는 범위정도를 구현 해 낼 수 있을 것 같다.

그리고 넉다운을 구현하려면 애니메이션이 필요한데 ㅈㄴ귀찮으니 그냥 너프백으로 바꾸고 스턴으로 처리해보자

 

이제 술마시러가야딩