やまめも

【 ゲーム開発・日々のことについて 】

【Unity】コルーチンと同様の機能

コルーチンのように、ある一定時間を待たせる機能をコルーチンを使わずに行うことができる。

private float shotWait = 0;
private float shotWait = 0.3;
void Update () {
	if(shotWait > 0){
		shotWait-= Time.deltaTime;
		// returnでこのフレームを一旦抜ける
		return;
	}
	// ここに行いたい処理を書く。
}


下のコードと同じ

void Awake (){
	StartCoroutine("ganerateCube1");
}
IEnumerator generateCube1(){
	while(true){
		// ここに行いたい処理を書く。
	}
}

using UnityEngine;
using System.Collections;

public class ShotControl : MonoBehaviour {

	[SerializeField] private GameObject shot;
	private float shotWait = 0;
	public float speed =3000.0f;

	void Update () {
		if(shotWait > 0){
			shotWait-= Time.deltaTime;
			// returnでこのフレームを一旦抜ける
			return;
		}
		if(Input.GetMouseButton(0)){
			shotWait=0.3f;
			Vector3 hitPoint;
			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

			RaycastHit hit;
			if(Physics.Raycast(ray, out hit, 200)){
				if(hit.collider.gameObject == null){
					return;
				}
				hitPoint = hit.point;
			}else{
				return;
			}
			Vector3 point = transform.localPosition;

			GameObject obj = (GameObject)Instantiate(shot);
			obj.transform.localPosition = point;

			Vector3 line = Vector3.Normalize(hitPoint-obj.transform.position);
			obj.transform.LookAt(hitPoint);
			obj.transform.rigidbody.AddForce(line * speed);

		}
	}
}