오늘의 학습 키워드

단일 책임 원칙

 

공부한 내용

단일 책임 원칙

MonoBehviour을 상속 받고 충돌을 체크하며 float의 mass 값을 가진 Obstacle이 있고

충돌체에 물리적인 힘을 가하는 ObstacleCollision이 있다.

ObstacleCollision은 Obstacle 클래스의 OnCollisionEnter로부터 필요한 정보(Rigidbody, normal, mass) 값만 받아와서 충돌을 처리한다. -> 역할 구분이 확실해진다.

public class Obstacle : MonoBehaviour
{
    [Header("Collision")]
    [SerializeField] private float mass;
    private ObstacleCollision _obstacleCollision;
    
    private void Awake()
    {
        _obstacleCollision = new ObstacleCollision();
    }
    
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.rigidbody != null)
        {
            _obstacleCollision.ApplyCollision(collision.rigidbody, -collision.GetContact(0).normal, mass);
        }
    }
}
public class ObstacleCollision
{
    public void ApplyCollision(Rigidbody oppositeRigid, Vector3 towardTargetVec, float mass)
    {
        oppositeRigid.AddForce(towardTargetVec * mass, ForceMode.Impulse);
    }
}

 

 

 

오늘의 회고

 오늘은 Solid 원칙 중 단일 책임 원칙을 보고 클래스가 하는 역할에 따라 구분해보았다. Obstacle의 클래스의 다른 부분이 얼마나 수정되든 ObstacleCollision의 클래스는 수정할 필요가 없고 그 반대도 동일하다. 이래서 단일 책임 원칙을 사용하나 싶다.

 내일은 오브젝트 풀링을 이용해 오브젝트들을 세 곳에서 생성하고 플레이어가 경사진 다리를 올라가게 할 것이다. 내일도 열심히 해보자 파이팅!

 

 

참고 : 

https://www.youtube.com/watch?v=Eyr7_l5NMds&list=PLB5_EOMkLx_WjcjrsGUXq9wpTib3NCuqg

 

+ Recent posts