unity3d脚本之基础类(一)

unity3d脚本之基础类(一)

Transfrom类

(一)作用:主要用于描述物体的位置、旋转、移动、缩放。

(1)每个物体都有一个Transfrom组件。

(2)Transfrom组件的所有属性都是相对其父物体进行衡量的

(3)如果物体没有父物体,这些属性则相对于世界坐标进行计算

(二)获取方式:
(1)先获取 GameObject ,然后再获取 transform;
GameObject a = GameObject.Find()—>a.transform

GameObject b = GameObject.Find()—>b.GetComponent<>()

注意使用GameObject.Find()方法的时候,查找的物体必须是active的,否则会发生空指针的情况

(2)直接挂载在相应的对象上(当脚本直接挂载在相应的对象上时,可以直接拿到 GameObject,无需再用 Find 方法);
  • 小写的 gameObject;例如 :
Transform a = gameObject.transform
  • this;例如:
 Transform b = this.transform
  • 直接写 transform 就可以拿到,这个算是 Unity 给出的语法糖;例如 :
Transform c = transform
(三)成员变量:(没有local前缀的都是世界坐标)

position:在世界空间坐标transform的位置。

localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。

eulerAngles:世界坐标系中的旋转(欧拉角)。

localEulerAngles:相对于父级的变换旋转角度。

right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)

up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)

forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)

rotation:世界坐标系中的旋转(四元数)。

localRotation:相对于父级的变换旋转角度。

localScale:相对于父级的缩放比例。

parent:父对象Transform组件。

worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。

localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。

root:对象层级关系中的根对象的Transform组件。

childCount:子对象数量。

lossyScale:全局缩放比例(只读)。

(四)成员函数:(常用)

Translate:向某方向移动物体多少距离。

Rotate:按照指定欧拉角旋转。

RotateAround:按照多少度在世界坐标的某位置轴旋转物体。

LookAt:旋转物体使z轴指向目标物体。

Find:通过名字查找子物体并返回它。如果没有查找到子物体名字,将返回null。如果名字包含“/”字符它将向路径一样穿越层次。

Component 组件类

(一)作用:

最最重要的功能:component类提供了查找(当前物体后代、先辈)组件的功能

(二)成员变量:Component常用属性

gameObject 组件附加的游戏对象。组件总是被附加到游戏对象上。

transform 附加到此游戏对象Transform组件(如果没有则为空)。

tag 此游戏对象的标签。

collider 附加到此游戏对象的Collider (如无附加则为空)。

renderer 附加到此游戏对象Renderer组件(如果没有则为空)。

rigidbody 附加到此游戏对象Rigidbody组件(如果没有则为空)。

(三)成员函数:(Component常用方法)

找自身组件:
Getcomponent< type>() //返回游戏对象上type类型的组件
GetComponents < type>()//查找 [自身] 所有父类是Component的,type类型的组件 即 查找所有挂在物体上的组件
找后代组件(DFS):
GetComponentInChildren< type>() 获取后代物体中某一组件(某一组件在后代中,但不确定是哪一个后代,可用它查找)
GetComponentsInChildren< type>() //获取后代物体的指定组件(从自身开始查找)
找先辈:
GetComponentInParent 。。。同上
GetComponentsInParent 。。。同上

    if(GUILayout.Button("改变颜色"))
    {
        //返回游戏对象上type类型的组件,若没有,返回无
        this.GetComponent<MeshRenderer>().material.color = Color.red;
    }
    if(GUILayout.Button("GetComponents"))
    {
        //查找自身所有父类是Component的组件,即可查找出所有挂在物体上的组件
        var allComponent=this.GetComponents<Component>();
        foreach (var item in allComponent)
            Debug.Log(item.GetType());
    }
    if (GUILayout.Button("GetComponentsInChildren"))
    {
        //获取后代物体的指定组件(从自身开始查找)
        var allComponent = this.GetComponentsInChildren<MeshRenderer>();
        foreach (var item in allComponent)
            item.material.color = Color.blue;
    }
    if (GUILayout.Button("GetComponentInChildren"))
    {
        //深度优先搜索
        //获取后代物体中某一组件(某一组件在后代中,但不确定是哪一个后代,可用它查找)
        var item = this.GetComponentInChildren<AudioSource>();
        item.loop = true;
    }

GameObject 游戏对象

(一)作用:

主要作用:对游戏对象进行:激活/禁用、添加组件;通过Tag查找物体

(二)常见用法

有关激活/禁用游戏对象
GameObject.activeInHierarchy//【只读】场景中游戏对象实际被激活状态
GameObject.activeSelf//【只读】场景中游戏对象局部被激活状态(父辈禁用,即使自己的勾还有也是被禁用状态)
GameObject.SetActive(true/false)//激活、停用 此游戏对象

        //【只读】场景中游戏对象实际被激活状态
        Debug.Log("activeInHierarchy:"+ objectDemo.activeInHierarchy);
        //【只读】场景中游戏对象局部被激活状态(就是面板上的小勾勾的状态)
        //有的时候,他爸爸被禁用了,他也被禁用了
        Debug.Log("activeSelf:"+ objectDemo.activeSelf);
        //激活、停用 此游戏对象
        objectDemo.SetActive(false);

有关给游戏对象添加组件

怎样用代码添加一个光?/怎么给物体添加组件?
首先,要清楚,不能直接new一个组件,

 light = new Light();//错错错错错错错错错错错错错错错添加组件不能直接自己 new 

要用AddComponent方法加,此方法里面会自己对相关组件实例化
gameObject.AddComponent< Type >()//返回值即此组件的引用

        //1、创建物体
        GameObject lightGO = new GameObject();// 嗯,只有GameObject我们可以自己new
        //2、添加组件
        //这里的返回值就是对这个light 的 引用
        Light light=lightGO.gameObject.AddComponent<Light>();
        light.color = Color.red;
        light.type = LightType.Point;//点光源

        //或者直接给自身游戏对象添加组件
        this.gameObject.AddComponent<Light>();

有关通过Tag查找游戏对象

[慎用]GameObject.Find(“游戏对象名称”);//在场景中根据名称查找物体,往上、下多少辈都能查找 相当于大海里捞针
—— ps:transform.Find(“游戏对象名称”);//这个可以用只找孩子
GameObject.FindGameObjectsWithTag(“Enemy”); //获取所有使用该标签的物体(游戏场景里的所有),返回的是Gameobject数组

[首选]GameObject.FindWithTag(“Enemy”);//获取使用该标签的物体(单个应该是从上往下数首个)

        //在场景中根据名称查找物体(慎用)
        //往下多少辈都能查找相当于大海里捞针
        GameObject.Find("游戏对象名称");

        //这个可以用只找孩子
        transform.Find("游戏对象名称");

        //获取所有使用该标签的物体(游戏场景里的所有)
        //返回的是Gameobject数组
        GameObject[] allEnemy = GameObject.FindGameObjectsWithTag("Enemy");
        print(allEnemy.Length);
      
        //获取使用该标签的物体(单个应该是从上往下数首个)
        //多用这个,毕竟Tag比物体名字少多了
       GameObject obj=GameObject.FindWithTag("Enemy");
        print(obj.name);

Object 基类

(一)作用:
  • 根据组件类型查找对象;
  • 克隆物体;
  • 加载场景时保留目标对象;
  • 删除游戏对象、组件或资源,是所有类的基类
(二)常见用法
  1. Object常用属性

name //访问到游戏物体的名称

  1. Object常用方法

都是静态方法可以直接用
DontDestroyOnLoad();//加载新场景时使目标对象不会被自动销毁
FindObjectOfType< >();//根据类型查找【对象】
FindObjectsOfType< >();// (没有父子物体的限制)
Instantiate();//克隆原始物体并返回克隆物体
Destroy(); //【删除一个游戏对象、组件或资源】

        //加载新场景时使目标对象不会被自动销毁
        DontDestroyOnLoad(transform.gameObject);

        //根据类型查找【对象】 (没有父子物体的限制)
        Object.FindObjectOfType<MeshRenderer>();
        FindObjectsOfType<MeshRenderer>();

        //克隆原始物体并返回克隆物体
        GameObject ga=Instantiate(this.gameObject);

        //销毁对象
        //【删除一个游戏对象、组件或资源】
        Destroy(this.transform);
        //5s后删除对象
        Destroy(gameObject,5);

这篇文章借鉴了一些其他文章,如有侵权,请联系我删除,谢谢!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值