꽁이의 개발일지

[24/02/12] SurvivorWarrior 개발일지

은꽁이 2024. 2. 12. 21:23


1. RotateSword에 몬스터가 닿았을 때, 넉백이 제대로 이루어지지 않음.
 > 칼 중간에 몬스터가 끼게되면 칼과 같이 회전함
2. Trigger로 설정해서 몬스터가 RotateSword에 닿을 때마다 코루틴으로 실행되게 설정함
public IEnumerator KnockBack()
    {
        yield return new WaitForFixedUpdate();
        playerPos = PlayerMove.instance.transform.position;
        myPos = transform.position;
        movePos = playerPos - myPos;


        rb2D.AddForce(movePos.normalized * knockBackForce, ForceMode2D.Impulse);
    }
AddForce함수의 치명적인 약점은 이미 RigidBody2D에 Force가 축적되어 있을경우에 반대로 튕겨내는 Force가 상쇄된다는 단점이있음!!!

https://blog.naver.com/phk707kr/220783653692
위 블로그를 보고 참고해서 코드를 짜봤지만 조금..? 괜찮아진것 같기도 함... 하지만
근본적인 문제가 해결이 되지 않았음 ㅠㅜㅜㅜㅜ
쿨타임 적용, OnTriggerStay2D로 바꿔서 실행해봤지만 똑같았다..

넉백되는 속도보다 칼의 속도가 더 빨라서 그런가?
Chase()메소드를 끄고 실행해봤는데 잘된다.
했는데 Chase()메소드와 충돌해서 그런듯함.
AddForce()로 밀면 스무스하게 밀리는 느낌이 난다... 좀 이상함
KnockBackForce 수치가 너무낮아서 밀리는 느낌이 잘 안난다.. 최소 400이상은 해줘야할듯..
뚝뚝 끊기는 느낌의 넉백을 하고싶은데 AddForce나 rb.velocity를 이용하면 너무 스무스한 느낌이라 rb.MovePosition을 이용해서 코드를 작성해주었다.
//knockBackForce = 12f;
movePos = (transform.position - (Vector3)targetPos).normalized;
rb2D.MovePosition(transform.position + movePos * knockBackForce * Time.fixedDeltaTime);

하지만 Chase()메소드를 쓰면 또 넉백기능이 안먹음..
 > yield return new WaitForFixedUpdate()를 썼는데 안먹혀서
 > 우선 yield return WaitForEndOfFrame로 바꿨는데 작동은된다.. 코드가 서로 충돌해서 실행이 안되는게 아닐텐데.. WaitForFixedUpdate()는 FixedUpdate를 한턴 쉬는거라서 충돌이될리가 없다. 왜그럴까...........................................

 - 다른 넉백방법
AddForce, rb2D.velocity
        //rb2D.AddForce(movePos.normalized * knockBackForce * Time.fixedDeltaTime, ForceMode2D.Impulse);
        //rb2D.AddRelativeForce(movePos.normalized*knockBackForce*Time.fixedDeltaTime);
        //rb2D.velocity = movePos.normalized * knockBackForce * Time.fixedDeltaTime;




스페이스바를 누르면 방향키를 입력하지 않아도 일정 거리만큼 진행되는 대쉬를 만들고싶은데, 스페이스바를 누르고, 누르고있던 방향키를 떼면 그다음부터는 이동을 할 수가 없다..
방향키를 누르고 스페이스바를 누르면 대쉬의 느낌도 안남!!
이건 내일 수정해야겠다.

 

[넉백 오류]

 

[MovePosition으로 수정했을 때]