找到
一、Input
1)鼠标事件
GetMouseButton(0): 按下鼠标左键不动,程序会一直运行,松开左键程序停止运行。
GetMouseButton(2): 按下鼠标中键不动,程序会一直运行,松开中键程序停止运行。
GetMouseButton(1): 按下鼠标右键不动,程序会一直运行,松开右键程序停止运行。
GetMouseButtonDown(0): 按下鼠标左键时,程序运行一次
GetMouseButtonDown(1): 按下鼠标右键时,程序运行一次
GetMouseButtonUp(2): 按下鼠标中键时,程序不运行,松开中键时,程序运行一次。
if(Input.GetMouseButton(0)){
执行语句;
}
public class ClonBeen : MonoBehaviour {
public GameObject Sphere;
void Start () {
}
void Update () {
if (Input.GetMouseButtonDown(0))
{
Instantiate(Sphere, Vector3.zero, Quaternion.identity);//点击鼠标左键克隆一个Sphere
}
if (Input.GetMouseButtonDown(1))
{
Instantiate(Sphere, Vector3.one, Quaternion.identity);//点击鼠标中键克隆一个Sphere
}
if (Input.GetMouseButtonDown(2))
{
Instantiate(Sphere, Vector3.one*3, Quaternion.identity);//点击鼠标右键克隆一个Sphere
}
}
}
Input.GetButtonDown("Fire1");//点击鼠标左键
Input.GetButtonDown("Fire2");//点击鼠标右键
2)键盘事件
Input.GetAxis(“Horizontal”);//控制游戏对象水平轴方向移动(W/S方向移动)
Input.GetAxis(“Vertical”);控制游戏对象垂直轴方向移动(A/D方向移动)
public class Move : MonoBehaviour {
float speed = 10f;
void Start () {
}
void Update () {
float h = Input.GetAxis("Horizontal")*Time.deltaTime*speed;//水平轴
float v = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.Translate(h,0,v);
}
}
另一种键盘控制游戏对象移动:
Input.GetKey(KeyCode.A);
Input.GetKey(KeyCode.D);
Input.GetKey(KeyCode.W);
Input.GetKey(KeyCode.S);
public class Move : MonoBehaviour {
float speed = 10f;
void Start () {
}
void Update () {
float a = Time.deltaTime * speed;
if (Input.GetKey(KeyCode.A))
{
transform.Translate(-a,0,0);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(a, 0, 0);
}
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, 0, a);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, 0, -a);
}
}
}
3)自定义按钮
GetButton : 根据按钮名称返回true当对应的虚拟按钮被按住时
GetButtonDown: 在给定名称的虚拟按钮被按下的那一帧返回true
GetButtonUp: 在用户释放指定名称的虚拟按钮时返回true
二、协程
协程:有点类似于并行系统,多个方法同时处理,开启协同程序就是开启一个线程,协程其实就是一个IEnumerator(迭代器)
开启线程: StartCoroutine(CloneEnemy()); 或者StartCoroutine(“CloneEnemy”);
CloneEnemy:为线程名称
Yield语句 :一种特殊的Rerurn语句 ,当函数在下一次被执行时,不是从头开始,而是从Yield语句处开始 (yield return在协程中是连用的 )
运行到 yield return 语句时,会返回一个表达式并保留当前在代码中的位置。 当下次调用迭代器函数时执行从该位置重新启动
public class Enemy : MonoBehaviour {
public GameObject cube;
void Start () {
//开启协程
//StartCoroutine("CloneEnemy");
StartCoroutine(CloneEnemy());
}
void Update () {
}
IEnumerator CloneEnemy() {
//IEnumerator:协程(类似于一个方法)
//IEnumerator CloneEnemy:协程的名字为CloneEnemy
while (true)
{
//yield:确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始
yield return new WaitForSeconds(3f);//停顿三秒
Instantiate(cube);
}
}
}