本文探讨了两种改变物体大小的方法,一种是通过transform.localscale,另一种是通过改变mesh的顶点坐标。第一种方式并没有真正改变物体大小,只是对物体进行了缩放,物理属性并没有改变。因此,如果要做物理效果,建议使用每二种方式。
using UnityEngine;
using System.Collections;
/*改变物体大小,GameObject的尺寸由transform.localscale与mesh.Bounds共同决定。
* 另外通过MeshRenderer.Bounds.size可以获取GameoObject的Size*/
public class ChangeGameObjectSize : MonoBehaviour {
///
/// 原始mesh顶点坐标,mesh顶点坐标使用物体坐标系。
/// mesh顶点v1的世界坐标=transform.position+new Vector3(v1.x*transform.localscale.x+v1.y*transform.localscale.y+v1.z*transform.localscale.z);
/// 也可以使用unity提供的接口transform.TransformPoint(v1) 将mesh顶点坐标转换为世界坐标.
///
string str = "";
///
/// 改变Transfrom.localscale后的mesh坐标,改变Transfrom.localscale,mesh顶点坐标不会改变
///
string str1 = "";
///
/// 改变mesh顶点坐标后的mesh坐标
///
string str2 = "";
Mesh mesh;
void Start () {
mesh = transform.GetComponent
().mesh;
int i = 0;
foreach (Vector3 vec in mesh.vertices) {
str += vec;
Vector3 pos = transform.TransformPoint (vec);
GameObject go = GameObject.CreatePrimitive (PrimitiveType.Cube);
go.transform.name = i+"";
go.transform.position = pos;
go.transform.localScale = new Vector3 (0.1f, 0.1f, 0.1f);
++i;
}
}
void OnGUI(){
GUILayout.TextArea (str);
if (GUILayout.Button ("变大1")) {
//通过改变Transfrom.localscale来改变GameObject大小
transform.localScale = new Vector3 (2, 1, 1);
mesh = transform.GetComponent
().mesh;
int i = 0;
foreach (Vector3 vec in mesh.vertices) {
str1 += vec;
Vector3 pos = transform.TransformPoint (vec);
GameObject go = GameObject.CreatePrimitive (PrimitiveType.Cube);
go.transform.name = i+"_";
go.transform.position = pos;
go.transform.localScale = new Vector3 (0.1f, 0.1f, 0.1f);
++i;
}
}
GUILayout.TextArea (str1);
if (GUILayout.Button ("变大2")) {
//通过改变Mesh顶点坐标来改变GameObject大小
Vector3[] vecs=new Vector3[mesh.vertices.Length];
for(int i=0;i
版权声明:本文为zhimenghuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。