MaterialPool.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { _decorator, Component, Material, Color, EffectAsset } from 'cc';
  2. import { adjustColor } from './color';
  3. const { ccclass, property } = _decorator;
  4. @ccclass('MaterialPool')
  5. export class MaterialPool extends Component {
  6. static materialMap = new Map<string, Material>();
  7. static materialBoldMap = new Map<string, Material>();
  8. static getManMaterialWithColor(color: string): Material {
  9. // 将颜色转换为字符串作为键值
  10. const colorKey = color.toUpperCase();
  11. // 检查材质池中是否已有该颜色的材质
  12. if (this.materialMap.has(colorKey)) {
  13. return this.materialMap.get(colorKey);
  14. } else {
  15. // 如果没有,创建一个新的材质并设置其颜色
  16. let newMaterial = new Material();
  17. newMaterial.initialize({
  18. effectName: 'builtin-toon', // 可以根据需要选择不同的effect
  19. defines: {
  20. USE_OUTLINE_PASS: true,
  21. USE_INSTANCING: true
  22. }
  23. });
  24. newMaterial.setProperty('lineWidth', 5); // 设置线宽度为 5
  25. const newColor = adjustColor(color,1,1.1)
  26. newMaterial.setProperty('mainColor', new Color(newColor));
  27. newMaterial.setProperty('shadeColor1', new Color(newColor));
  28. newMaterial.setProperty('shadeColor2', new Color(adjustColor(color,0.78,1.5)));
  29. newMaterial.setProperty('baseStep', 0.9);
  30. newMaterial.setProperty('baseFeather', 0);
  31. newMaterial.setProperty('shadeStep', 0.6);
  32. newMaterial.setProperty('shadeFeather', 0.2);
  33. // 将新创建的材质保存到材质池
  34. this.materialMap.set(colorKey, newMaterial);
  35. return newMaterial;
  36. }
  37. }
  38. static getManMaterialWithColorLineBold(color: string): Material {
  39. // 将颜色转换为字符串作为键值
  40. const colorKey = color.toUpperCase();
  41. // 检查材质池中是否已有该颜色的材质
  42. if (this.materialBoldMap.has(colorKey)) {
  43. return this.materialBoldMap.get(colorKey);
  44. } else {
  45. // 如果没有,创建一个新的材质并设置其颜色
  46. let newMaterial = new Material();
  47. newMaterial.initialize({
  48. effectName: 'builtin-toon', // 可以根据需要选择不同的effect
  49. defines: {
  50. USE_OUTLINE_PASS: true,
  51. USE_INSTANCING: true
  52. }
  53. });
  54. newMaterial.setProperty('lineWidth', 20);
  55. const newColor = adjustColor(color,1,1.1)
  56. newMaterial.setProperty('mainColor', new Color(newColor));
  57. newMaterial.setProperty('shadeColor1', new Color(newColor));
  58. newMaterial.setProperty('shadeColor2', new Color(adjustColor(color,0.78,1.5)));
  59. newMaterial.setProperty('baseStep', 0.9);
  60. newMaterial.setProperty('baseFeather', 0);
  61. newMaterial.setProperty('shadeStep', 0.6);
  62. newMaterial.setProperty('shadeFeather', 0.2);
  63. // 将新创建的材质保存到材质池
  64. this.materialBoldMap.set(colorKey, newMaterial);
  65. return newMaterial;
  66. }
  67. }
  68. }