如果要在场景中现在一个图片,可以用plane。但是plane是由很多三角形组成,渲染效率会降低。因此可以通过脚本绘制一个由2个三角形构成的四边形代替plane.
using
UnityEngine;
using
UnityEditor;
public class AssetDatabase_Test : ScriptableWizard {
public string AssetName = "Quad" ;//在资源中的名称
public float Width= 1.0f ;
public float Height= 1.0f ;
[ MenuItem ( "AssetDatabase/CreateAsset" )]
static void CreateExample ()//菜单项
{
ScriptableWizard .DisplayWizard( //创建窗口
"CreateAsset" , //窗口标题
typeof ( AssetDatabase_Test ), //执行向导类
"ok" ); //创建按钮
}
void OnWizardCreate(){
mesh.name = AssetName;
mesh.vertices = Vertices;
mesh.uv = UV_Position;
mesh.triangles = Triangles;
mesh.RecalculateNormals ();
//在资源面板中生成
AssetDatabase .CreateAsset ( mesh , AssetDatabase .GenerateUniqueAssetPath( AssetPath+ "/" +AssetName ) + ".asset" );
AssetDatabase .SaveAssets ();
//在场景中生成
GameObject plane = new GameObject (NewGameObjectName);
meshFilter.sharedMesh = mesh;
mesh.RecalculateBounds();
plane.AddComponent ( typeof ( BoxCollider ));
}
public class AssetDatabase_Test : ScriptableWizard {
public string AssetName = "Quad" ;//在资源中的名称
public string NewGameObjectName = "New Quad";//在场景中的名称
public string AssetPath="Assets";//资源中的保存路径
public float Width= 1.0f ;
public float Height= 1.0f ;
[ MenuItem ( "AssetDatabase/CreateAsset" )]
static void CreateExample ()//菜单项
{
ScriptableWizard .DisplayWizard( //创建窗口
"CreateAsset" , //窗口标题
typeof ( AssetDatabase_Test ), //执行向导类
"ok" ); //创建按钮
void OnSelectionChange(){//选择发生改变时调用,选取的资源保存的路径
if
(
Selection
.objects !=
null
&&
Selection
.objects.Length ==
1
) {
AssetPath=
AssetDatabase
.GetAssetPath (
Selection
.objects[
0
]);
}
}void OnWizardCreate(){
Vector3[] Vertices = {new Vector3 (0,0,0),new Vector3(Width,0,0),new Vector3 (0,Height,0),new Vector3(Width,Height,0) };//四个顶点的位置
Vector2[] UV_Position = {new Vector2 (0, 0),new Vector2 (1, 0),new Vector2 (0, 1),new Vector2 (1, 1)};//四个UV坐标
int
[] Triangles =
new
int
[] {
3
,
1
,
2
,
2
,
1
,
0
} ;//两个三角形(四方形的四个顶点的标号从左下角按顺时针排列分别是:0,2,3,1;分为两个三角形,注意的是两个三角形都需按顺时针排列,因为逆时针将
//是反面)
//创建新的mesh
Mesh
mesh =
new
Mesh
();mesh.name = AssetName;
mesh.vertices = Vertices;
mesh.uv = UV_Position;
mesh.triangles = Triangles;
mesh.RecalculateNormals ();
//在资源面板中生成
AssetDatabase .CreateAsset ( mesh , AssetDatabase .GenerateUniqueAssetPath( AssetPath+ "/" +AssetName ) + ".asset" );
AssetDatabase .SaveAssets ();
//在场景中生成
GameObject plane = new GameObject (NewGameObjectName);
MeshFilter meshFilter = (MeshFilter)plane.AddComponent (typeof(MeshFilter));//
网格过滤器用于从你的资源中获取网格信息(Mesh)并将其传递到用于将其渲染到屏幕的
网格渲染器
当中。
plane.AddComponent (
typeof
(
MeshRenderer
));//需要有网格渲染器才能显示meshFilter.sharedMesh = mesh;
mesh.RecalculateBounds();
plane.AddComponent ( typeof ( BoxCollider ));
}
}
运行结果:
最后可自行添加材质。