好记性不如烂笔头,而且Unreal4用的相对来说也比较少,工作用Unity,学习时间大部分用在DirectX上,也就偶尔看看Unreal。Unreal的API肯定记不住,现在写下来,省的下次再去Google看一堆文章,方便自己。
看着蓝图教程,用C++来实现,发现自己还是满蛋疼的。教程中是拖入一个新的Mesh来区分AI和Player,懒得拖,就用Player的Mesh,修改下显示颜色来做区分,简单粗暴。
先来看下原来的材质球:
拖一个VectorParameter,取名为Color,再跟之前的TextureSample相乘就好,这个BaseColor应该是Diffuse(漫反射吧,我猜的,看到了Specular和Normal)
接着就是代码上的修改了:
void AAICharacter::Initialize()
{
// Set Skeletal Mesh
auto skeletalMesh = GetMesh();
static ConstructorHelpers::FObjectFinder<USkeletalMesh> aiMesh(
TEXT("SkeletalMesh'/Game/Model/Character/Eve_by_J__Gonzales.Eve_by_J__Gonzales'"));
if (aiMesh.Object != nullptr)
{
skeletalMesh->SetSkeletalMesh(aiMesh.Object);
auto meshLocation = FVector(0.0f, 0.0f, -88.0f);
auto meshRotation = FRotator(0.0f, -90.0f, 0.0f);
auto meshScale = FVector(1.0f, 1.0f, 1.0f);
auto meshTransform = FTransform(meshRotation, meshLocation, meshScale);
skeletalMesh->SetRelativeTransform(meshTransform);
}
// Create Dynamic Material
auto dynamicMaterial = skeletalMesh->CreateDynamicMaterialInstance(0);
dynamicMaterial->SetVectorParameterValue(TEXT("Color"), FLinearColor(1.0f, 0.0f, 0.0f, 1.0f));
}
上面一段就是AI设置Mesh的代码,跟Player的代码一样。有注释。接下来的2行代码就是修改材质球中参数名为Color的VectorParameter,为了区分,将AI的改成红色。
效果如下: