七:Awake 和 Start
awake:在脚本程序启用之前执行一次
start:在脚本程序启用之后执行一次
awake与start都只执行一次,无法多次调用
void Awake ()
{
Debug.Log("Awake called.");/*当不启用该脚本时仍生效*/
}
void Start ()
{
Debug.Log("Start called.");/*启用该脚本后在awake函数后生效*/
}
八:Update 和 FixedUpdate
update在代码开始执行后每帧调用一次,多用于函数或变量更新
fixedupdate在代码开始执行后固定时间调用一次,影响到物理对象的动作多用fixedupdate
九:启用和禁用组件
在脚本中,可以通过enabled来启用或者禁用组件,脚本也是一种组件,可以用enabled来启用或禁用
private Light myLight;
void Start ()
{
myLight = GetComponent<Light>();/*mylight为脚本所挂物体上light组件*/
}
void Update ()
{
if(Input.GetKeyUp(KeyCode.Space))
{
myLight.enabled = !myLight.enabled;/*相反值*/
}
}
十:激活游戏对象
在脚本中可以通过setactive来禁用或激活游戏对象,当父物体被禁用时,无法激活子物体,子物体禁用不影响父物体
gameObject.SetActive(false);
十一:Translate 和 Rotate
translate和rotate包含与transform中,可以实现非刚体物体的平移和旋转
public float moveSpeed = 10f;
public float turnSpeed = 50f;
void Update ()
{
if(Input.GetKey(KeyCode.UpArrow))
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.DownArrow))
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.LeftArrow))
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.RightArrow))
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
十二:Look At
使一个游戏对象面向一个其他位置,多用于摄像机持续对准某一游戏对象
public Transform target;
void Update ()
{
transform.LookAt(target);
}
十三:Destroy
用来销毁游戏物体或者组件,可延时销毁
void Update ()
{
if(Input.GetKey(KeyCode.Space))
{
Destroy(GetComponent<MeshRenderer>());
}
if(Input.GetKey(KeyCode.Space))
{
Destroy(other);
}
}
十四:GetButton 和 GetKey
用于获取输入的键或按钮
down:按下键或按钮后第一帧
up:抬起健或按钮后第一帧
Input.GetKeyDown(KeyCode.Space);
Input.GetKey(KeyCode.Space);
Input.GetKeyUp(KeyCode.Space);
Input.GetButtonDown("Jump");
Input.GetButton("Jump");
Input.GetButtonUp("Jump");
十五:OnMouseDown
用于检测碰撞体或GUI上元素的点击
void OnMouseDown ()
{
rigidbody.AddForce(-transform.forward * 500f);
rigidbody.useGravity = true;
}
十六:GetComponent
可以用来访问其他脚本和组件,当访问其他对象上的组件时用先定义对象x,再用x.getcomponent,
getcomponent会占用大小运算资源,尽量减少使用
public GameObject otherGameObject;
private AnotherScript anotherScript;
private YetAnotherScript yetAnotherScript;
private BoxCollider boxCol;
void Awake ()
{
anotherScript = GetComponent<AnotherScript>();
yetAnotherScript = otherGameObject.GetComponent<YetAnotherScript>();
boxCol = otherGameObject.GetComponent<BoxCollider>();
}
十七:DeltaTime
属于time类,时两次函数更新直接的时常,使用delta time可以使游戏内变化更加平滑
if(Input.GetKey(KeyCode.RightArrow))
transform.position += new Vector3(speed * Time.deltaTime, 0.0f, 0.0f);