Unity 脚本一文通(二)

637 阅读3分钟

一. 常用API

  1. 核心类图
2.核心类图展开图

三. Component 组件类功能

  1. 变量:(物体、标签、和位置组件)
2. 获取组件的方法:(返回该组件对应的数据类型的数据)
GetComponent<MeshRenderer>()
3. 获取所有组件的方法:(返回一个组件集合(列表))
Component[] coms= GetComponents<Component>();
4. 获取后代物体的指定类型组件,(从自身开始找)
var coms = this.GetComponentsInChildren<MeshRenderer>();
var com1 = this.GetComponentInChildren<MeshRenderer>();
5. 获取父类物体的指定类型组件,(从自身开始找)
 MeshRenderer[] coms = this.GetComponentsInParent<MeshRenderer>();
 MeshRenderer com1 = this.GetComponentInParent<MeshRenderer>();
6. 物体是否加了“?”tag标签 (返回布尔值)
CompareTag("Player");

四.Transform 变换组件

  1. 每一个物体都有一个transform组件,用于操控 位置 旋转 缩放
  2. 遍历物体的transform组件就会拿到其子物体的transform组件
3. 变量
① position
② localPosition
③ lossyScale //物体与本身模型的缩放比例(只读)
④ localScale
4. Translate 移动
transform.Translate(0,0,1);               //沿自身方向移动
transform.Translate(0,0,1,Space.World);   //沿世界方向移动
5. Rotate 旋转
transform.Rotate(0,0,10);                 //沿自身方向旋转
transform.Rotate(0,0,20,Space.World);     //沿世界方向旋转
6. RotateAround 绕轴旋转 //RotateAround(绕的点,绕点的哪个轴,旋转度数)
transform.RotateAround(Vector3.zero,Vector3.up,1);
7.root 获取根物体的Transform组件
Transform i=transform.root;
8. parent 获取父物体 (只读)
Transform i=transform.parent;
9. 设置父物体
public Transform tf;
transform.SetParent(tf);        //以自己的世界坐标为准,找爸爸后,位置不会移动
transform.SetParent(tf,false);  // 以transform为准,找爸爸后,位置按transform移动到爸爸身边
10.根据名称获取子物体
Transform ts1=transform.Find("Cube6");
11. 根据索引获取子物体
       int count=transform.childCount;
       for(int i=0;i<count;i++){
           transform.GetChild(i);
       }
12. 解除子对象
13. 获取兄弟索引
14. 设置兄弟间索引
SetSiblingIndex(int);
15. 将物体变换移动到兄弟列表最前面,做长子
16. 将物体变换移动到兄弟列表最后面,做幼子

五. GameObject 组件

场景里的实体都是 GameObject 此外,GameObject类对象是可以new的。
  1. 变量:
① 自身激活状态 //自身激活状态
② 实际激活状态 //可能自身激活,但父物体禁用,导致自己被禁用
2.方法:
① 设置激活状态
② 给物体添加组件
this.gameObject.AddComponent<Light>();
③ 根据物体找组件
④ 根据组件找物体
GameObject obj1= transform.gameObject;
⑤ 根据物体名称查找物体(消耗大量性能,慎用).
⑥ 根据标签找物体, //返回GameObject数组
⑦ 根据标签找单个物体

六. Object 组件

1. 属性
2.方法
①删除游戏对象\组件\资源
Destroy(gameObject,5); //5秒后删除对象
② 转换场景不删除对象
使用:
③ 根据类型找对象
④ 根据类型找对象集合
⑤ 克隆物体


附:

1.递归查找子物体方法

using UnityEngine;
using System.Collections;
/*
参数1: 某个transform对象
参数2: 要查找的子元素名字

返回: 找到返回该transform对象 找不到返回null
*/
/// <summary>
///递归查找子物体
/// </summary>
public class findchlid7 : MonoBehaviour 
{
    Transform Find7(Transform ts ,string str){
        if(ts.Find(str)!=null) return ts.Find(str);
        else
        {
            int count=ts.childCount;
            for(int i=0;i<count;i++){
                if(Find7(ts.GetChild(i),str)!=null) return Find7(ts.GetChild(i),str);
            }
        }
        return null;
    }
    private void OnGUI() {
        if(GUILayout.Button("递归查找子物体")){
            Find7(transform,"Cube7").GetComponent<MeshRenderer>().material.color=Color.green;
        }
    }
}
2. 查找敌人最低HP血量的物体
①创建Enemy对象
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour 
{
[Range(0,100)]
public int Hp;

}
②创建脚本搜索低血量物体
using UnityEngine;
using System.Collections;
/*



*/
/// <summary>
///
/// </summary>
public class FindEnemy : MonoBehaviour 
{
    public Enemy[] enemys;
void OnGUI()
{
    if(GUILayout.Button("min--red")){
        enemys=FindObjectsOfType<Enemy>();
        Enemy min=FindMin();
        min.GetComponent<MeshRenderer>().material.color=Color.red;
        print(min.Hp);
    }
}
Enemy FindMin(){
    Enemy min=enemys[0];
    for(int i=0;i<enemys.Length;i++){
        if(enemys[i].Hp<min.Hp){
            min=enemys[i];
        }
    }
    return min;
}

}