当前位置:   article > 正文

【Unity2D 2022:NPC】制作任务系统

【Unity2D 2022:NPC】制作任务系统

一、接受任务

1. 编辑NPC对话脚本:

        (1)创建静态布尔变量用来判断ruby是否接受到任务

  1. public class NPCDialog : MonoBehaviour
  2. {
  3. // 创建全局变量用来判断ruby是否接到任务
  4. public static bool receiveTask = false;
  5. }

        (2)接受任务后可以射击

  1. public class NPCDialog : MonoBehaviour
  2. {
  3. // 创建全局变量用来判断ruby是否接到任务
  4. public static bool receiveTask = false;
  5. public void displayDialogBox()
  6. {
  7. // 接受任务后可以射击
  8. receiveTask = true;
  9. }
  10. }

2. 编辑角色脚本:

        (1)在shoot()方法中增加判断,如果接受到任务才可以射击,否则不射击

  1. public class Ruby : MonoBehaviour
  2. {
  3. // Ruby发射子弹
  4. private void shoot()
  5. {
  6. if(NPCDialog.receiveTask) {
  7. GameObject bulletObject = Instantiate(bulletPrefab, rb2d.position, Quaternion.identity);
  8. Bullet bullet = bulletObject.GetComponent<Bullet>();
  9. bullet.launch(lookDirection, 300);
  10. animator.SetTrigger("Shoot");
  11. playSound(rubyShootSound);
  12. }
  13. }
  14. }

 二、提交任务

1. 编辑NPC对话脚本:

        (1)创建静态布尔变量用来判断ruby是否接受到任务

  1. public class NPCDialog : MonoBehaviour
  2. {
  3. // 创建全局变量用来判断ruby是否完成任务
  4. public static bool missionComplete = false;
  5. }

        (2)导入UnityEngine.UI命名空间

        (3)创建文本框对象

        (4)用文本框对象接收Text组件

  1. using UnityEngine.UI;
  2. public class NPCDialog : MonoBehaviour
  3. {
  4. // 创建全局变量用来判断ruby是否完成任务
  5. public static bool missionComplete = false;
  6. // 创建文本框对象
  7. private Text textBox;
  8. void Start()
  9. {
  10. // 用textBox接收Text组件
  11. textBox = GetComponent<Text>();
  12. }
  13. }

        (5)任务完成时更换文本框内容

  1. using UnityEngine.UI;
  2. public class NPCDialog : MonoBehaviour
  3. {
  4. // 创建全局变量用来判断ruby是否完成任务
  5. public static bool missionComplete = false;
  6. // 创建文本框对象
  7. private Text textBox;
  8. void Start()
  9. {
  10. // 用textBox接收Text组件
  11. textBox = GetComponent<Text>();
  12. }
  13. public void displayDialogBox()
  14. {
  15. // 任务完成时更换文本框内容
  16. if(missionComplete) {
  17. textBox.text = "哦,伟大的Ruby。你居然真的把它们修好了,你人真好!";
  18. }
  19. }
  20. }

三、任务完成的判定

1. 创建静态变量用来存储已经修好的机器人数量

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建静态变量用来存储已经修好的机器人数量
  4. public static int fixedNum = 0;
  5. {

2. 在机器人修复完成时将fixedNum自增1

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建静态变量用来存储已经修好的机器人数量
  4. public static int fixedNum = 0;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. fixedNum++;
  9. }
  10. {

3. 每次机器人修复完成时进行判定,若全部修复完成则将missionComplete修改为true

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建静态变量用来存储已经修好的机器人数量
  4. public static int fixedNum = 0;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. fixedNum++;
  9. if(fixedNum == 36) {
  10. NPCDialog.missionComplete = true;
  11. }
  12. }
  13. {

四、在任务完成时添加音效提醒

1. 创建机器人全部修复完成的音效

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人全部修复完成音效
  4. public AudioClip missionCompleteSound;
  5. }

2. 在机器人修复完成时判断:若机器人全部修复完成,则播放任务完成的音效;否则播放机器人修复完成的音效

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人全部修复完成音效
  4. public AudioClip missionCompleteSound;
  5. // 播放敌人修复完成音效
  6. private void playFixSound()
  7. {
  8. if(NPCDialog.missionComplete) {
  9. audioSource.PlayOneShot(missionCompleteSound, 80);
  10. } else {
  11. audioSource.PlayOneShot(enemyFixSound, 80);
  12. }
  13. Invoke("stopAudioSourcePlay", 1.0f);
  14. }
  15. }

3. 将任务完成音效赋值到missionComplete

 

        本章完。感谢阅读! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/810979
推荐阅读
相关标签
  

闽ICP备14008679号