脚本内容
除了JavaScript函数,C#和BOO的脚本都需要预先载入类库。这里以C#为例:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
}
NewBehaviourScript是脚本的名称,它必须和脚本文件的外部名称一致(如果不同,脚本无法在物体上被执行)。所有游戏执行语句,都包含在这个继承自MonoBehaviour类的自创脚本中(大括号内)。
以下介绍一些常用的内置运行函数(定义函数时,JavaScript的关键字是function,C#是void,BOO是def。如:void Start()。
U3D内置的代码有个命名规则,开头第一个字母大写的词组都属于类或者函数,而开头小写的词组则是变量。新手经常会混淆它们之间的区别。简单说来,函数词组可以作为变量的类型,还可以直接执行功能,词组后必接成对小括号;变量是对应函数的分支,实现的是对一个具体属性的控制。例如:
Camera和camera。当场景中存在一个默认的主摄像机,脚本位于摄像机时,Camera.mainCamera.transform和camera.transform是等同的;假如脚本在其他物体上,Camera.mainCamera.transform仍旧直接获取了主摄像机,而camera.transform必须要使用Find函数先找到指定名称的摄像机:GameObject.Find("mainCamera").camera.transform。当然,这里是列出细节来比较,实际运用时,脚本位于特殊元素上我们可以不用声明这个元素的类别,如camera.transform可以简化到transform。
GameObject和gameObject。前者包含查找,破坏和产生游戏物体的函数,同时可以将一个变量定义为“游戏物体”类型;后者则包含丰富的游戏物体属性,例如名称,变形信息,动画,渲染等。
同上面列举的camera,对于直接作用于指定物体的脚本,gameObject也可以省略掉。不过,在开始学写代码时,书写完整的变量名能让我们更深刻的记忆每个属性和变量的关系。 通过以上对比后可以这么理解,函数通常是全局控制(包含脚本外的其他物体),而变量是需要指出具体的应用对象。
如果书写代码时语句不在函数作用范围内,编译器将无法智能完成一些变量的全名显示。 更多函数的运用方法,用户可参考官方提供的帮助文档。
示例:绑定脚本的模型,当鼠标移入模型范围,模型颜色改变并y轴旋转,鼠标移开则停止。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CustomClass : MonoBehaviour {
bool tril1 = false;
Color orgColor;
// Use this for initialization
void Start () {
Renderer renderer = gameObject.GetComponent<Renderer>();
orgColor = renderer.material.color;
}
// Update is called once per frame
void Update () {
if (tril1) {
print ("----------------");
transform.Rotate (Vector3.up * Time.deltaTime * 200);
}
}
void OnMouseOver() {
GetComponent<Renderer>().material.color = Color.yellow;
tril1 = true;
}
void OnMouseExit() {
GetComponent<Renderer>().material.color = orgColor;
tril1 = false;
}
void OnMouseDown() {
}
}