답변:
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");
}
}
}
그런 다음 부스팅을 확인하고 검사에 추가하는 데 사용할 수있는 다른 변수가 있습니다.
편집 :이 변수를 추가했습니다.
여기에는 두 가지 답변 클래스가 있습니다.
도움이 되었기를 바랍니다!