Всем привет,возникала проблема при работе с USkeletalMeshComponent ,а именно - пробую изменить реакцию bodyInstance(коллизия в физикассет) для канала визибл. После смены в лог получаю что значение изменилась ,но реальных изменений при последующих трассировках в эту же коллизию нет.Если же меняю всему SkeletalMeshComponent ,то все проходит на ура. Работал кто нибудь ,сталкивался ?
Код :
http://pastecode.ru/874ae/или так :
[spoiler=]
Код:
Вариант 1 Не рабочий :
...
bool const bHit = World->LineTraceSingleByChannel(OutHit, StartTracePoint, EndTracePoint, UEngineTypes::ConvertToCollisionChannel(CollisionChannel), Params);
if (bHit)
{
USkeletalMeshComponent* Skeletal = Cast<USkeletalMeshComponent>(OutHit.GetComponent());
if (Skeletal != NULL)
{
ECollisionResponse ECResp = ECollisionResponse::ECR_Ignore;
// меняем значение для канала visible на Ignore
Skeletal->GetBodyInstance(OutHit.BoneName)->SetResponseToChannel(UEngineTypes::ConvertToCollisionChannel(ETraceTypeQuery::TraceTypeQuery1), ECResp);
UE_LOG(INU_Log, Log, TEXT("GetResponseToChannel - %d"), (int32)Skeletal->GetBodyInstance(OutHit.BoneName)->GetResponseToChannel(UEngineTypes::ConvertToCollisionChannel(ETraceTypeQuery::TraceTypeQuery1) ));
}
}
...
Вариант 2 Рабочий :
...
bool const bHit = World->LineTraceSingleByChannel(OutHit, StartTracePoint, EndTracePoint, UEngineTypes::ConvertToCollisionChannel(CollisionChannel), Params);
if (bHit)
{
USkeletalMeshComponent* Skeletal = Cast<USkeletalMeshComponent>(OutHit.GetComponent());
if (Skeletal != NULL)
{
ECollisionResponse ECResp = ECollisionResponse::ECR_Ignore;
Skeletal->SetCollisionResponseToChannel(UEngineTypes::ConvertToCollisionChannel(ETraceTypeQuery::TraceTypeQuery1), ECResp);
}
}
...
[/spoiler]
Последний раз редактировалось
Zhernovoy Sergey 05 ноя 2015, 14:18, всего редактировалось 1 раз.