如何在统一C#中重用不同形状的脚本

时间:2017-08-23 11:51:46

标签: c# unity3d procedural-generation

我为程序立方体编写了一个脚本。基本上我想建造一个宽度,长度和高度我可以通过参数控制的建筑物。因此,通过改变参数,我可以制作不同的形状,如窗户,门和屋顶等等。但我不知道该怎么做。如何将这个脚本重用于不同的形状?

constructor(props){
   super(props);
   this.state = {
     load: '',
     projectInfo:{
      "projects":[]
     }
   };
   this.handleClick = this.handleClick.bind(this);

}

2 个答案:

答案 0 :(得分:1)

你需要使用继承 像这样制作一个类Cube:

public class Cube:MonoBehaviour{
}

然后制作这样的其他类:

public class Door:Cube{
}

您可以在此处获取更多详细信息:https://unity3d.com/learn/tutorials/topics/scripting/inheritance

答案 1 :(得分:1)

您不需要从头开始编辑场景中的立方体或其他元素的尺寸。 Unity已经提供了一些你可以在你的游戏中实例化的原语,并从你的脚本中访问它们的属性来修改它们的值。

如果您想使用带有基元的游戏对象(如立方体,球体......)或自定义游戏对象(如您在Blender上创建的3D模型)以编程方式创建环境,则可以执行以下操作:

//You will need to pass in the inspector a GameObject as parameter in the correct field
public GameObject customGameObject;

void Start()
{
    generateEnviroment()
}


void generateEnviroment()
{
    //You instantiate a GameObject of type cube
    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    //You change its position
    cube.transform.position = new Vector3(0, 0.5F, 0);
    // Widen the object by 0.1
    cube.transform.localScale += new Vector3(0.1F, 0, 0);
    //Change material properties, assuming it has a material component
    Renderer rend = cube.GetComponent<Renderer>();
    rend.material.shader = Shader.Find("Specular");
    rend.material.SetColor("_SpecColor", Color.red);


    //In case you want to add other type of GameObject, like a car or sth you have created:
    GameObject myGameObject = GameObject.Instantiate (customGameObject);

}

你可以根据需要设置复杂功能,只需对名称进行整理即可。

https://docs.unity3d.com/ScriptReference/GameObject.CreatePrimitive.html