Проблема с IEnumerator и щелчком мыши, чтобы разместить блок - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь сделать скрипт размещения блоков, который размещает блок каждые 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)){, это напечатает 1 каждый кадр. Но если я положу Debug.Log("1") внутрь 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 Start(){}

    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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...