unity改变物体大小的两种方式

本文探讨了两种改变物体大小的方法,一种是通过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

你可能感兴趣的:(Unity)