虽然之前做了一大堆Unity3D,但对于Unity3D各个脚本中的变量操控与使用还不够灵活,至少做了这么多唯一和旋转,对于Vector还懵懵懂懂的。其实在Unity3D各个变量在同场景拿个值非常随意,连公共类都不用自己写了,直接用鼠标轻轻一点就行,下面举个例子说明这两个基础问题,打牢基础,对以后做游戏大有裨益。

在场景中,如下图,布置一个球,和一个空物体GameObject。

unity中通过代码修改物体的大小 unity3d改变物体大小_Vector

如果要让球上升3个位置很简单,在这球挂的脚本,就一句transform.Translate(Vector3.up*3);完事。

但现在我要在GameObject中让这个球上升3个位置的同时,将挂在这个球一个简单得不能再简单,无脑得不能再无脑的脚本中的sphere_name这个值读出来。

using UnityEngine;
using System.Collections;

public class Sphere_Script : MonoBehaviour
{
    public string sphere_name = "aaa";
}

那么GameObject的剧本该怎么写呢?具体如下:

using UnityEngine;
using System.Collections;

public class Script : MonoBehaviour
{
    public GameObject A;
    void Start()
    {
        //A = GameObject.Find("Sphere");//由于在编辑器界面中指明了A是什么,这句可以省略
        A.transform.Translate(0, 3, 0);//前面没有A.指的是当前被挂脚本的物体,有A.就是对A操作
        //A.transform.Translate(Vector3.up * 3);//(0, 3, 0)与(Vector3.up * 3)是等同的
        Sphere_Script script = A.GetComponent<Sphere_Script>();
        Debug.Log(script.sphere_name);
    }
}

在“Vector3.方向”的时候,例如这里方向是up,Vector3是指大小无限接近于0的三维单位方向向量。Vector2则同理指大小无限接近于0的二维单位方向向量。

而在Vector作为一个类,定义一个对象的时候,例如Vector2/3 a=XX,尤其在Vector3 a=xx.position的时候更不容易读出来Vector到底是甚。他就是指一个向量。因为在笛卡尔立体坐标,向量是指改点对原点(0,0,0)的各个方向距离描述,因此大多数情况,一个向量指代的就是改点的坐标(x,y,z),少数情况,如给物体加个速度、加个力,就是指代一个方向了。这里一点都不抽象,稍有高中数学基础的人,都能自己领悟。因此,为何上面的代码0, 3, 0)与(Vector3.up * 3)是等同的。

至于取A脚本中的变量。因为Unity3D中,脚本一旦赋予给物体之后,这个脚本就会被认为是这个物体的其中一个组件,所以只要用GetComponent先取A中的组件,然后取组件中的脚本,赋予给相应的类,一般就是脚本的名称,这里是Sphere_Script,然后直接用对象名.变量名,就能轻松访问了,当然这个变量在这个对象里面本身要是public而不是private才行!

弄好之后将这个Script赋予给空物体GameObject,然后如下图,你会发现在GameObject多了脚本这一栏是当然了,关键是脚本这一烂,多了我们刚刚自定义的public GameObject变量A,问我们这个A是什么,我们点选旁边的⊙选定这个球就完事了。这就不用GameObject.Find("某某"),我还要好好将你这个某某的名字输入一遍,你烦不烦?

unity中通过代码修改物体的大小 unity3d改变物体大小_变量_02

具体运行效果如下,可以看到,就是我们想要的效果:

unity中通过代码修改物体的大小 unity3d改变物体大小_组件_03