【新手求助】如何给自定义网格挂载材质实现同默认3D模型的效果

想通过自定义网格建立模型,写了一个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();
    }

}