脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。
脚本的产生:
在Unity中下面这个面板中,Assets进行操作,可以生成C#语言的脚本,然后双击点开,进行编码.
进入脚本后,
常用生命周期函数有 Awake,Start,Update,
Awake和Start的区别在于 Awake在脚本中永远是第一个执行并且不论脚本是否挂载,
相同点是都只执行一次,
Update是一个每秒执行50次左右的函数(游戏就可以理解成一个死循环).
Color.a 透明
Color.b 蓝色
Color.black 黑色
Color.blue 蓝色
Color.clear 清空
Color.cyan 青色
Color.magenta 紫红色
Color.yellow 黄色
Color.white 白色
Color.green 绿色
Color在这里是一个结构,
public int age;
[HideInInspector]:作用将公开的属性,保护起来.
public int num = 20;
[SerializeField]:作用是将隐藏的,受保护的属性公开出来.
private string name;
[SerializeField]
protected char gender;
public int R;
public int G;
public int B;
public Color m_color;
// Use this for initialization
void Start () {
num = 50;
}
// Update is called once per frame
void Update () {
//颜色的范围是0~255,但是在Unity面板中是0~1的范围,所以需要转换。
m_color = new Color(R / 255.0f, G / 255.0f, B / 255.0f, 1);
}
void Test()
{
for (int i = 1; i <= 30; i++)
{
GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
obj.name = "Cube"+i;
obj.transform.position = new Vector3(i,0,0);
if (i%3!=0)
{
//确定是否**
obj.SetActive(false);
}
}
}
Debug.Log("获取状态:" +cubeObj.activeSelf);
Debug.Log("Hirearchy:" + cubeObj.activeInHierarchy);
cubeObj.SetActive(true);
Debug.Log("获取状态:" + cubeObj.activeSelf);
Debug.Log("Hirearchy:" + cubeObj.activeInHierarchy);
生成游戏对象有两种,一种是克隆(GameObject table = GameObject.Instantiate(prefabObj, new Vector3(15 * i, 0, 0), Quaternion.identity) as GameObject;),
一种是创建(GameObject obj = new GameObject();)
克隆比创建更快捷!
public GameObject prefabObj;
void Start () {
当前脚本挂载在哪个游戏对象上,那么gameobject就表示哪一个游戏对象
gameObject.name = "YY";
Debug.Log(gameObject.name);
设置游戏对象的tag值
gameObject.tag = "Tag01";
Debug.Log(gameObject.tag);
设置游戏对象所在的层
gameObject.layer = 8;
将游戏对象的层转化成字符串
Debug.Log(LayerMask.LayerToName(gameObject.layer));
//创建基本的游戏对象
GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
//改变游戏对象的生成位置
capsule.transform.position = new Vector3(1, 1, 1);
void Test03(int number)
{
for (int i = 0; i < number; i++)
{
//GameObject 是Object的子类
//GameObject table = GameObject.Instantiate(prefabObj);
//table.transform.position = new Vector3(i*15,0,0);
//和上面的两行代码是一样的
GameObject table = GameObject.Instantiate(prefabObj, new Vector3(15 * i, 0, 0), Quaternion.identity) as GameObject;
}
}
void Task04()
{
GameObject obj = GameObject.Find("Cube");
Debug.Log("查找对象的名字是:"+obj.name);
Debug.Log(obj.transform.position);
obj.transform.position = new Vector3(5,5,5);
Debug.Log("-------------");
GameObject[] obj01Arr = GameObject.FindGameObjectsWithTag("Tag01");
if (obj01Arr.Length>0)
{
foreach (var item in obj01Arr)
{
Debug.Log(item.name);
}
}
Debug.Log("******************");
GameObject obj2 = GameObject.FindWithTag("Tag01");
Debug.Log(obj2.name);
GameObject.Destroy(obj2);
}
创建10个tag为“task04”的对象,编写脚本获得所有对象,迭代将名字打印出来。
void Test()
{
for (int i = 0; i < 10; i++)
{
GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
obj.transform.position = new Vector3(i, 1, 1);
obj.tag = "Task04";
obj.name = "obj" + i;
}
Type t = typeof(CapsuleCollider);
CapsuleCollider[] objs = FindObjectsOfType<CapsuleCollider>();
for (int i = 0; i < objs.Length; i++)
{
Debug.Log(objs[i].gameObject.name);
}
}
//生成空对象
GameObject obj = new GameObject();