답변:
Physics.IgnoreCollision 및 Physics.IgnoreLayerCollision을 사용하면 두 콜 라이더 간 및 두 레이어 간 충돌을 비활성화 할 수 있습니다.
특정 충돌체를 충돌에서 제외하려면 그렇게 할 수있는 방법이 없습니다. 트리거되지 않은 충돌체와 함께 운동학이 아닌 강체를 사용하는 경우 태그별로 응답을 필터링하려고해도 항상 응답이 있습니다.
프로젝트에서이 작업을 수행 한 방법은 "Void"라는 레이어를 만드는 것입니다. 공허는 전혀 충돌하지 않습니다.
이제 레이어를 "Void"로 설정하여 충돌체의 충돌을 일시적으로 비활성화하고 이전 레이어를 복원하여 다시 활성화 할 수 있습니다.
요점은 다음과 같습니다.
int oldLayer = -1;
int voidLayer;
void Start()
{
voidLayer = LayerMask.NameToLayer("Void");
}
void DisableCollider(Collider col)
{
oldLayer = col.gameObject.layer;
col.gameObject.layer = voidLayer;
}
void EnableCollider(Collider col)
{
col.gameObject.layer = oldLayer;
}
우리는 특히 딱딱한 몸체의 자식 인 충돌체를 활성화 및 비활성화하여 실제로 상황을 망칠 수 있기 때문에 이렇게했습니다. 따라서 복합 강체 충돌체의 일부를 안정적으로 비활성화 할 수는 없지만 복합 충돌체 부분 중 하나의 레이어를 안정적으로 교체 할 수 있습니다.
좀비 충돌이 자동차에 미치는 영향을 줄이려면 좀비를 운동 학적 강체 트리거로 만들거나 그렇지 않으면 질량을 매우 작게 (float.Epsilon과 같이) 만들어서 자동차의 운동량에 영향을주지 않도록하십시오. 임팩트시이 레이어 스위치를 사용하여 첫 번째 충돌이 차체에 무시할만한 힘을가하더라도 후속 충돌이 발생하지 않도록 할 수도 있습니다.
자동차와 충돌하지 않는 레이어로 전환 할 수도 있습니다.
도망 칠 때 활성화되는 좀비에 다른 충돌기를 놓을 수도 있습니다. 이렇게하면 OnTriggerEnter에 충격을 가할 수 있습니다. 당신은 그것으로 정확하게 얻을 수는 없지만, 접촉 법선이 좀비를 재미있게 던지기에 충분했을 정도로 대략적인 위치를 추정 할 수 있습니다.
당신은 스스로에게 물어야합니다 :
내 차로 도망친 좀비를 두드리고 싶습니까, 아니면 그냥 죽음의 애니메이션을 재생해야합니까?
좀비를 쳐서 자동차의 속도와 각속도가 더 작은 방식으로 영향을 받습니까?
자동차가 부스트하기 시작할 때 모든 좀비에서 Physics.IgnoreCollision 을 호출 하고 플레이어 객체에도 함수를 전달하십시오. 이것은 유니티가 플레이어와 좀비 사이의 충돌에 반응하지 않게합니다. 차가 부스팅을 마치면 Physics.IgnoreCollision
각 좀비를 다시 호출 하여 플레이어 오브젝트를 전달하고 false
충돌 응답을 다시 시작하십시오.
객체의 이름을 확인하거나 객체 클래스에 이름 값을 추가 한 다음 확인할 수 있습니까?
bool boosting = false; //need a trigger in the game to set this to true.
function OnCollisionEnter(theCollision : Collision)
{
if (boosting == true)
{
if(theCollision.gameObject.name == "Zombie")
{
Debug.Log("Zombie hit during boost");
}
else if(theCollision.gameObject.name == "Wall")
{
Debug.Log("Wall hit during boost");
}
}
else
{
if(theCollision.gameObject.name == "Zombie")
{
Debug.Log("Zombie hit not in boost");
}
else if(theCollision.gameObject.name == "Wall")
{
Debug.Log("Wall hit not in boost");
}
}
}
그런 다음 부스팅을 확인하고 검사에 추가하는 데 사용할 수있는 다른 변수가 있습니다.
편집 :이 변수를 추가했습니다.
여기에는 두 가지 답변 클래스가 있습니다.
도움이 되었기를 바랍니다!