LocalizedMaterial.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import * as i18n from './LanguageData';
  2. import { _decorator, Component, Material, MeshRenderer } from 'cc';
  3. const { ccclass, property, executeInEditMode } = _decorator;
  4. @ccclass('LocalizedMaterialItem')
  5. class LocalizedMaterialItem {
  6. @property
  7. language: string = 'zh';
  8. @property({
  9. type: Material,
  10. })
  11. material: Material | null = null;
  12. }
  13. @ccclass('LocalizedMaterial')
  14. @executeInEditMode
  15. export class LocalizedMaterial extends Component {
  16. mesh: MeshRenderer | null = null;
  17. @property({
  18. type: LocalizedMaterialItem,
  19. })
  20. materialsList = [];
  21. onLoad() {
  22. if (!i18n.ready) {
  23. i18n.init('zh');
  24. }
  25. this.fetchRender();
  26. }
  27. fetchRender() {
  28. let mesh = this.getComponent(MeshRenderer) as MeshRenderer;
  29. if (mesh) {
  30. this.mesh = mesh;
  31. this.updateMat();
  32. return;
  33. }
  34. }
  35. updateMat() {
  36. for (let i = 0; i < this.materialsList.length; i++) {
  37. const item = this.materialsList[i];
  38. // @ts-ignore
  39. if (item.language === i18n._language) {
  40. // @ts-ignore
  41. this.mesh && (this.mesh.setMaterial(item.material, 0));
  42. }
  43. }
  44. }
  45. }