※ 학습내용을 바탕으로 작성하여 틀린 사항이 있을 수 있습니다.
Is Kinematic - 물리 적용시 자신에겐 적용안됨(밀리지않음)
interpolate - 개체의 속도가 fixedUpdate보다 높을경우 물리 개체의 움직임을 부드럽게 만드는기능
CollisionDetection - 속도가 매우 빠를경우 fixedUpdate에서 0.2초마다 지나갈 때 인지를 못할경우 이전 프레임과 비교해서충돌이 있는지 검사후 실행
Constains - position, rotation의 고정

힘 가해주기 (가속 - 힘 가해주기, 한번 - 한번에 힘주기)
rigid.AddForce(Vector3.right x power,ForceMode.Force); 가속, 질량
rigid.AddForce(Vector3.right x power,ForceMode.Acceleration); 가속
rigid.AddForce(Vector3.right x power,ForceMode.Impulse); 질량, 한번
rigid.AddForce(Vector3.right x power,ForceMode.VelocityChange); 한번
속도를 설정 - 누르면 속도 저항없이 속도설정
rigid.velocity = Vector3.right power x;
회전력 가해주기 - 가속
rigid.AddTorque(Vector3.up x power);
회전 속도설정 - 가속없음
rigid.angularVelocity = Vector3.up power x;
** rigidbody 주의사항
움직이는 물체는 rigidbody를 가져야한다
정적 - rigidbody 정적오브젝트 안 움직임
rigidbody - rigidbody 물체가 접촉시 서로 움직임
키네마틱 리지드바디 - 리지드바디
키네마틱과 리지드바디와 충격시 키네마틱은 밀리지않음(나만밀거야 이느낌)
키네마틱 - 키네마틱 둘다 안밀림
Collision - 충돌
OnCollisionEnter - 충돌 할 때
OncollisionStay - 충돌동안
OnCollisionExit - 충돌후 나갈 때
IsTrigger가 모두 해제되어 있어야하며 두 개체중 하나라도 Rigidbody 컴포넌트가 추가되어 있어야 하고, 두 개체중 하나는 Rigidbody IsKinematic이 체크 해제되어 있어야 한다.

Trigger - 겹칠때
OnTriggerEnter 접촉할 때
OnTriggerStay 접촉동안
OnTriggerExit 접촉후 나갈 때
두 개체중 하나는 IsTrigger가 추가되어 있어야하며, 물리적인 충돌은 진행되지 않는다 두 Rigidbody중 하나는 체크되어 있어야한다.

시작위치에서 지정한 방향으로 레이저를 발사하여 부딪히는 충돌체를 감지한다.

시작위치, 방향, ray가 맞는곳을 저장, 범위외에 다양하게 오버로딩 되므로 사용전 확인 해보는것이 좋다
물체에 접촉시 그 물체를 target으로 지정할 수 있으며 다양하게 사용 가능한 기능이다. Physics.Raycast는 bool형으로 저장된다

RayCastHit정보를 player에 저장하고 그 저장한 player에 PlayerController 컴퍼넌트가 존재한다면 true를 반환하도록 if문에 적용할 수 있다.
레이의 범위가 애매하거나 씬에서만 범위를 볼 경우 사용되는 기능이다
OnDrawGizmos() 선택없이 기즈모를 보여줄 떄
OnDrawGizmosSelected() 선택하여 기즈모를 보여줄 때
OnDrawGizmos()
{
Gizmos.Color = Color.red;
Gizmos.DrawWireSphere(transform.position,3f);
}
OnDrawGizmosSelected()
{
Gizmos.Color = Color.green;
Gizmos.DrawLine(transform.position,transform.forward * 10);
}
간소화해서 그리는법
//닿았을 때
Debug.DrawLine(transform.position, hitInfo.point,Color.green)
//안 닿았을 때
Debug.DrawLine(transform.position, transform.position + transform.forward * 10f,Color.red)




먼저 enemy에 대한 ObjectPool 패턴을 생성하고 -10 ~ 10 까지의 랜덤 범위에서 5초마다 오브젝트를 생성하게 만들어주었다.


Bullet 클래스의 경우에 CollisionEnter를 사용하여 Player나 Bullet이 아닌경우 게임오브젝트를 삭제시키고 파티클 시스템을 실행하게 만들어주었으며 만약 Health Component를 가진 오브젝트와 접촉시 health.TakeDamage를 실행하게 만들어줬다.

데미지를 받는 함수와 체력이 떨어졌을경우 ObjectPool의 ReturnEnemy 함수를 실행시키도록 구현하였다.




마지막으로 enemy클래스에서 레이케스트를 작성하고 ray의 범위와 함께 오브젝트를 따라가는 기능과 ray의 범위안에 들어왔을경우 Attack함수를 실행하도록 구현하였다.