Unity改变物体大小的两种方式
发表于2019-03-06
这篇内容主要给大家分享两种改变物体大小的方法,一种是通过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
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引