想通过自定义网格建立模型,写了一个ts脚本··CargoBasket.ts··,在脚本中使用utils.createMesh方法创建了网格,并将网格挂载到模型上,但运行后模型材质丢失,显示为粉红色。如下图:
只能在MeshRenderer中选择材质,但在运行时仍然会丢失材质,且选择默认材质standard-material和creator内置的几种基础模型表现不一样。
求问大家有没有什么解决办法,关于材质、光照之类的有没有什么教程可以看
下面是代码
import { Component, gfx, macro, Material, MeshRenderer, utils, Vec3, _decorator } from 'cc';
const { ccclass, property, requireComponent} = _decorator;
@ccclass('Test')
@requireComponent(MeshRenderer)
export class Test extends Component {
@property({ type: Material })
public mat: Material | null = null;
start() {
//this.mat.initialize({
// effectName: 'standard-material.Mtl', 这部分不能正常挂载材质,运行时直接无法显示,所以注释掉了
//})
this.createMesh()
}
createMesh() {
let meshRenderer = this.getComponent(MeshRenderer);
if (!meshRenderer) {
meshRenderer = this.addComponent(MeshRenderer);
}
const model = this.getComponent(MeshRenderer)!;
//const segments: number = 4;
var positions: number[] = [
0, 0, 0, //p0
1, 0, 0, //p1
0, 1, 0, //p2
1, 1, 0, //p3
0, 0, 1, //p4
1, 0, 1, //p5
0, 1, 1, //p6
1, 1, 1 //p7
];
var indices: number[] = [
//xy面-z方向
0, 2, 1,//外
1, 2, 3,
//xy面-z方向
0, 1, 2,//内
1, 3, 2,
//yz面-x方向
0, 4, 2,//外
4, 6, 2,
//yz面-x方向
0, 2, 6,//内
0, 6, 4,
//xy面+z方向
4, 5, 6,//外
5, 7, 6,
//xy面+z方向
4, 6, 5,//内
5, 6, 7,
//yz面+x方向
1, 3, 5,//外
3, 7, 5,
//yz面+x方向
1, 5, 7,//内
1, 7, 3,
//底面
0, 1, 4,//外
1, 5, 4,
//底面
0, 4, 5,//内
0, 5, 1,
];
var uvs: number[] = [
//顶点 UV
0, 0, // V0
1, 0, // V1
0, 1, // V2
1, 1, // V3
1, 1, // V4
0, 1, // V5
0, 0, // V6
1, 0 // V7
];
const primitiveMode = gfx.PrimitiveMode.TRIANGLE_LIST;
const attributes: any[] = [{
name: gfx.AttributeName.ATTR_NORMAL,
format: gfx.Format.RGB32F,
}];
var IGeometry = {
positions: positions,
indices: indices,
uvs: uvs,
primitiveMode: primitiveMode,
attributes: attributes
}
const customMesh = utils.createMesh(IGeometry);
model.mesh = customMesh;
model.material = this.mat;
}
onFocusInEditor(): void {
this.createMesh();
}
}
