0

所以我一直在设置这个测试来实现享元模式。我在这里创建了一个对象类和一个工厂,以基本上生成具有不同属性(在本例中为颜色、大小和形状)的相同类型的对象。所以我有每个属性的下拉菜单和一个创建对象的按钮。我想使用工厂类中的getobject函数来创建对象,但我似乎无法正确创建它。我得到了形状,但不是颜色或大小。它与我为函数设置的参数有关。我不想只做我现在正在做的事情来生成立方体和圆柱体。那只是一个测试。如果有人能想出解决这个问题的方法,我很感激谢谢。

public class FlyWeight : MonoBehaviour
{


public Button CreateButton;

List<string> colors = new List<string>() { "Choose Color", "Red", "Blue", "Green" };
List<string> shapes = new List<string>() { "Choose Shape", "Sphere", "Cube", "Cylinder" };
List<string> sizes = new List<string>() { "Choose Size", "Small", "Medium", "Large" };

public Dropdown Shapes;
public Dropdown Colors;
public Dropdown Sizes;

private void Start()
{
    Button button = CreateButton.GetComponent<Button>();

    Shapes.AddOptions(shapes);
    Colors.AddOptions(colors);
    Sizes.AddOptions(sizes);

}

public void TaskOnClick()
{
    if (Shapes.value == 1)
    {
         var sphere= Factory.getObject(GameObject.CreatePrimitive(PrimitiveType.Sphere), getSize(), getColor());
    }
    else if (Shapes.value == 2)
    {
        var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        cube.GetComponent<Renderer>().material.color = getColor();
        cube.transform.localScale = getSize();

    }
    else if (Shapes.value == 3)
    {
        var cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
        cylinder.GetComponent<Renderer>().material.color = getColor();
        cylinder.transform.localScale = getSize();

    }
}

public Color getColor()
{
    if (Colors.value == 1) { return Color.red; }
    else if (Colors.value == 2) { return Color.blue; }
    else if (Colors.value == 3) { return Color.green; }
    else return Color.white;
}

public Vector3 getSize()
{
    if (Sizes.value == 1) { return gameObject.transform.localScale = new Vector3(1, 1, 1); }
    else if (Sizes.value == 2) { return gameObject.transform.localScale = new Vector3(2, 2, 2); }
    else { return gameObject.transform.localScale = new Vector3(3, 3, 3); }
}




}

项目等级

public class Object
{
private Color color;
private Vector3 size;
private GameObject shape;
private int x, y;

public Object (GameObject shape, Vector3 size,Color color)
{
    this.color = color;
    this.size = size;
    this.shape = shape;
}
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
}

工厂类

public class Factory
{
private static List<Object> objects = new List<Object>();

public static Object getObject(GameObject shape,Vector3 size, Color color)
{
    Object obj = null;

    if (obj == null)
    {
        obj = new Object(shape, size, color);
        objects.Add(obj);
    }
    return obj;
}
}
4

0 回答 0