Я пытаюсь сделать скрипт размещения блоков, который размещает блок каждые 0,15 секунды, и он работает отлично.Проблема в том, что когда я пытаюсь сделать то же самое, чтобы уничтожить блоки, вместо того, чтобы уничтожать блок каждые 0,3 секунды, он ждет 0,3 секунды, а затем уничтожает один блок на кадр.Как я могу это исправить?
Я пытался вставить его в другой скрипт, но, похоже, он тоже не работает.Странно то, что если я добавлю Debug.Log ("1") внутри ...:
void Place(){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo)){
//here
... он печатает "1" в каждом кадре.Но если я помещаю Debug.Log ("1") в один из if if (hitInfo.collider == up){
, он печатает "1" каждые 0.3 секунды.Извините за мой плохой английский / объяснение
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class placeBlock : MonoBehaviour {
public GameObject cube;
public Collider up;
public Collider bottom;
public Collider right;
public Collider left;
public Collider front;
public Collider back;
void Update() {
if(Input.GetMouseButton(0)) {
StartCoroutine(MyMethod());
}
if(Input.GetMouseButton(1)) {
StartCoroutine(MyMethod2());
}
}
void Place2() {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo)) {
Destroy(hitInfo.transform.parent.gameObject);
}
}
void Place() {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo)) {
if (hitInfo.collider == up) {
Instantiate(cube,new Vector3(this.transform.position.x,this.transform.position.y + 1,this.transform.position.z), Quaternion.identity);
}
if (hitInfo.collider == bottom) {
Instantiate(cube,new Vector3(this.transform.position.x,this.transform.position.y - 1,this.transform.position.z), Quaternion.identity);
}
if (hitInfo.collider == right) {
Instantiate(cube,new Vector3(this.transform.position.x - 1,this.transform.position.y,this.transform.position.z), Quaternion.identity);
}
if (hitInfo.collider == left) {
Instantiate(cube,new Vector3(this.transform.position.x + 1,this.transform.position.y,this.transform.position.z), Quaternion.identity);
}
if (hitInfo.collider == front) {
Instantiate(cube,new Vector3(this.transform.position.x,this.transform.position.y,this.transform.position.z - 1), Quaternion.identity);}
if (hitInfo.collider == back){
Instantiate(cube,new Vector3(this.transform.position.x,this.transform.position.y,this.transform.position.z + 1), Quaternion.identity);
}
}
}
IEnumerator MyMethod(){
yield return new WaitForSeconds(0.15F);
Place();
}
IEnumerator MyMethod2(){
yield return new WaitForSeconds(0.3F);
Place2();
}
}