Rendering the sides of a cube with different materials

Good day and thank you in advance for help.

I’m trying to render the different sides of a cube with different materials. I have created a simple project using the default 3D pipeline in Unity editor version 6000.0.32fi. I’ve added a cube and two materials.one “Font” is pale yellow, OtherSides is green.

I’ve created a Mono behavior script that I hoped would render one side of the cube pale yellow and the rest of the sides green. It also allows me to rotate the cube to inspect it by striking the V or H keys.

The cube renders correctly. But The input from the keys do not work. They do work if I eliminate the rendering code from the Start method.

In the Inspector for the cube object I get the following warning: "This renderer has more materials than the mesh has submeshes. Multiple materials will be applied to the same submesh, which costs performance consider using multiple shader passes.

I’m not sure how to write the correct shader. and I’m not sure that doing that will help my problem.

Here is the code:
using UnityEngine;
using System.Collections.Generic;

[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class AssignMaterialsToCube : MonoBehaviour
{
public Material frontMaterial; // Assign the ‘Front’ material in the Inspector
public Material otherSidesMaterial; // Assign the ‘OtherSides’ material in the Inspector

void Start()
{
    // Get the MeshRenderer and MeshFilter components
    MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
    MeshFilter meshFilter = GetComponent<MeshFilter>();

    if (meshRenderer == null || meshFilter == null)
    {
        Debug.LogError("MeshRenderer or MeshFilter component is missing.");
        return;
    }

    Mesh mesh = meshFilter.mesh;

    if (mesh == null)
    {
        Debug.LogError("Mesh not found on the cube.");
        return;
    }

    // Define sub-mesh materials
    mesh.subMeshCount = 2; // One for Front and one for OtherSides

    // Create sub-meshes
    int[] triangles = mesh.triangles;
    Vector3[] normals = mesh.normals;

    // Separate triangles for front and other sides
    List<int> frontTriangles = new List<int>();
    List<int> otherTriangles = new List<int>();

    // Use normals to identify the front face
    Vector3 frontNormal = Vector3.forward; // Assuming the front face is aligned with Z+

    for (int i = 0; i < triangles.Length; i += 3)
    {
        int vertexA = triangles[i];
        int vertexB = triangles[i + 1];
        int vertexC = triangles[i + 2];

        // Check if this triangle belongs to the front face
        if (normals[vertexA] == frontNormal && normals[vertexB] == frontNormal && normals[vertexC] == frontNormal)
        {
            frontTriangles.Add(vertexA);
            frontTriangles.Add(vertexB);
            frontTriangles.Add(vertexC);
        }
        else
        {
            otherTriangles.Add(vertexA);
            otherTriangles.Add(vertexB);
            otherTriangles.Add(vertexC);
        }
    }

    // Assign triangles to sub-meshes
    mesh.SetTriangles(frontTriangles.ToArray(), 0);
    mesh.SetTriangles(otherTriangles.ToArray(), 1);

    // Assign materials
    Material[] materials = new Material[2];
    materials[0] = frontMaterial;
    materials[1] = otherSidesMaterial;
    meshRenderer.materials = materials;

    Debug.Log("Materials have been assigned successfully.");
}

void Update()
{
    // Handle key releases
    if (Input.GetKeyUp(KeyCode.V))
    {
        Debug.Log("Key V released: Triggering an action for V");
        // Add custom behavior for V key release
        RotateCubeVertically();
    }

    if (Input.GetKeyUp(KeyCode.H))
    {
        Debug.Log("Key H released: Triggering an action for H");
        // Add custom behavior for H key release
        RotateCubeHorizontally();
    }
}


void RotateCubeVertically()
{
    transform.Rotate(0,0,30); 
}


void RotateCubeHorizontally()
{
    transform.Rotate(30,0,0); 
}

}
Any help would be greatly appreciated.