一.今日问题:

1.任务出现图层时衔接bug(后续任务图片不显示); 

public class NPCdialog : MonoBehaviour
{

    public GameObject dialogBox;
    public GameObject dialog_warming;
    public float displayTime_one = 4.0f;
    public float displayTime_two = 4.0f;
    public float timerDisplay;
    public Text dialogText;
    public AudioSource audioSource;
    public AudioClip completeTask;
    private bool hasplaed;


    // Start is called before the first frame update
    void Start()
    {
        dialogBox.SetActive(false);
        timerDisplay = -1;
    }

    // Update is called once per frame
    void Update()
    {
        if (timerDisplay >= 0)
        {
            timerDisplay-= Time.deltaTime;
            if (timerDisplay <= 0)
            {
                displayTime_two = 4;
                dialog_warming.SetActive(false);
                dialogBox.SetActive (false);
                UIhealthbar.instance.ifCompleteTask_One = true;
            }
        }
    }

    public void DisplayDialog()
    {
        timerDisplay = displayTime_one; 
        dialogBox.SetActive(true);
        UIhealthbar.instance.hasTask=true;
        if (UIhealthbar.instance.fixNum>=1)
        {
            dialogText.text = "你怎么又回来了?" +
                "你还想要报酬吗?这可是你的工作啊!";  //完成任务
            if (!hasplaed)
            {
                hasplaed = true;
                audioSource.PlayOneShot(completeTask);
                UIhealthbar.instance.ifCompleteTask_Two = true;
                displayTime_two=displayTime_two-Time.deltaTime;
                
                if (displayTime_two<=0)
                {
                    dialog_warming.SetActive(true);
                }
            }
            
        }
        else if(UIhealthbar.instance.ifCompleteTask_One== true)                      //待完成
        {
            dialogText.text = "还盯着我干什么?" +
                "去工作啊!"+"去把那些机器人修好很难吗?";
        }
    }
}

问题:在设定了任务倒计时和物体失活后,界面ui图片触发是无法响应且出现的,测试发现去除任务倒计时,前一任务完成时能图层能正常出现。

解决方法&&问因:没有设定好时间变量随着游戏时间改变,只在第一帧发生变化。

代码部分

public class NPCdialog : MonoBehaviour
{

    public GameObject dialogBox;
    public GameObject dialog_warming;
    public float displayTime_one = 4.0f;//一号赋值器
    public float displayTime_two;//任务结束到ui对话框显示的中间时间
    public float timerDisplay;  //一号计时器——npc角色谈话框停留时间
    public float timerDisplay_one; //二号计时器——ui界面话框停留计时器

    public Text dialogText;
    public AudioSource audioSource;
    public AudioClip completeTask;
    private bool hasplaed;


    // Start is called before the first frame update
    void Start()
    {
        dialogBox.SetActive(false);
        timerDisplay = -1;
        timerDisplay_one = 6;
    }

    // Update is called once per frame
    void Update()
    {
        if (timerDisplay >= 0)
        {
            timerDisplay -= Time.deltaTime;
            if (timerDisplay <= 0)
            {
                displayTime_two = 4;
                dialog_warming.SetActive(false);
                dialogBox.SetActive(false);
                UIhealthbar.instance.ifCompleteTask_One = true;
            }
        }
        if (displayTime_two >= 0&&UIhealthbar.instance.ifCompleteTask_Two == true)
        {
            displayTime_two -= Time.deltaTime;
            WarmingDialogWay();
            
        }
        if (displayTime_two <= 0)
        {
            timerDisplay_one -= Time.deltaTime;
            if (timerDisplay_one <= 0)
            { dialog_warming.SetActive(false); }
        }

    }

    public void DisplayDialog()
    {
        timerDisplay = displayTime_one; 
        dialogBox.SetActive(true);
        UIhealthbar.instance.hasTask=true;
        if (UIhealthbar.instance.fixNum>=1)
        {
            dialogText.text = "你怎么又回来了?" +
                "你还想要报酬吗?这可是你的工作啊!";  //完成任务
            if (!hasplaed)
            {
                hasplaed = true;
                audioSource.PlayOneShot(completeTask);
                UIhealthbar.instance.ifCompleteTask_Two = true;
            }
            
        }
        else if(UIhealthbar.instance.ifCompleteTask_One== true)                      //待完成
        {
            dialogText.text = "还盯着我干什么?" +
                "去工作啊!"+"去把那些机器人修好很难吗?";
        }
    }
    private void WarmingDialogWay()
    {
        if (displayTime_two <= 0)
        {
            dialog_warming.SetActive(true);
  
        }
    }
}

改进于结论:游戏时间是关键,当大量延时任务的代码出现时需要时刻关注有关每一帧的方法“update()”。此次问题就在于update中上一任务已经完成,不再执行。而后续的计时器代码居然在吃条件下(作者着实有够蠢的)

为了成功运行,当前if的嵌套过多,需要更多的改进,如果脚本过多将导致代码中的变量过多,看起来非常繁杂和混乱。下次可以尝试建立一个独立的时间类或方法来作为专门的计时器方法。


2.敌人的数量堆积出现bug;

private void Update()
{

    
        if (UIhealthbar.instance.ifCompleteTask_Two == true&&clone_key==false)
        {
            waitenamycreat_Time = waitenamycreat_Time - Time.deltaTime;
            if (waitenamycreat_Time < 0)
            {                
                StartCoroutine(Clone());
                clone_key = true;  
            }
        }

问题原因:如图,在update方法中,将会反复执行克隆方法clone(),导致按帧率重复刷新敌人,

************************************

3.一次武器能穿透攻击多个敌人bug;目前暂无更好的解决办法,只能通过调节层级让敌人之间不发生碰撞从而使武器一次击中一名敌人。

************************************

怪物过多导致的音频限制;

技术原因,暂无解决方法~

二.今日完成:

1,0.1版本的简单初次任务调试完成

2,暂时完善了敌人的刷新问题。

3.音乐播放器随任务开始