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

一、接受任务

1. 编辑NPC对话脚本:

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

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

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

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

    public void displayDialogBox()
    {
        // 接受任务后可以射击
        receiveTask = true;
    }
}

2. 编辑角色脚本:

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

public class Ruby : MonoBehaviour 
{
    // Ruby发射子弹
    private void shoot()
    {
        if(NPCDialog.receiveTask) {
            GameObject bulletObject = Instantiate(bulletPrefab, rb2d.position, Quaternion.identity);
            Bullet bullet = bulletObject.GetComponent<Bullet>();
            bullet.launch(lookDirection, 300);
            animator.SetTrigger("Shoot");
            playSound(rubyShootSound);
        }
    }

}

 二、提交任务

1. 编辑NPC对话脚本:

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

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

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

        (3)创建文本框对象

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

using UnityEngine.UI;

public class NPCDialog : MonoBehaviour
{
    // 创建全局变量用来判断ruby是否完成任务
    public static bool missionComplete = false;
    // 创建文本框对象
    private Text textBox;

    void Start()
    {
        // 用textBox接收Text组件
        textBox = GetComponent<Text>();
    }
}

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

using UnityEngine.UI;

public class NPCDialog : MonoBehaviour
{
    // 创建全局变量用来判断ruby是否完成任务
    public static bool missionComplete = false;
    // 创建文本框对象
    private Text textBox;

    void Start()
    {
        // 用textBox接收Text组件
        textBox = GetComponent<Text>();
    }

    public void displayDialogBox()
    {
        // 任务完成时更换文本框内容
        if(missionComplete) {
            textBox.text = "哦,伟大的Ruby。你居然真的把它们修好了,你人真好!";
        }
    }
}

三、任务完成的判定

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

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

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

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

    // 敌人修复完成
    public void enemyFixed()
    {
        fixedNum++;
    }
{

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

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

    // 敌人修复完成
    public void enemyFixed()
    {
        fixedNum++;
        if(fixedNum == 36) {
            NPCDialog.missionComplete = true;
        }
    }
{

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

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

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

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

public class Enemy : MonoBehaviour
{
    // 创建机器人全部修复完成音效
    public AudioClip missionCompleteSound;

    // 播放敌人修复完成音效
    private void playFixSound()
    {
        if(NPCDialog.missionComplete) {
            audioSource.PlayOneShot(missionCompleteSound, 80);
        } else {
            audioSource.PlayOneShot(enemyFixSound, 80);
        }
        Invoke("stopAudioSourcePlay", 1.0f);
    }
}

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

 

        本章完。感谢阅读! 

相关推荐

  1. Unity3D 任务系统的架构与设计详解

    2024-07-10 19:44:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 19:44:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 19:44:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 19:44:03       4 阅读
  4. Python语言-面向对象

    2024-07-10 19:44:03       7 阅读

热门阅读

  1. How to Describe Figures in a Research Article

    2024-07-10 19:44:03       7 阅读
  2. 常见网络攻击方式及防御方法

    2024-07-10 19:44:03       8 阅读
  3. Amazon Bedrock 常用权限分类详解

    2024-07-10 19:44:03       7 阅读
  4. Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

    2024-07-10 19:44:03       9 阅读
  5. AWS Glue 与 Amazon Redshift 的安全通信配置

    2024-07-10 19:44:03       12 阅读
  6. Elasticsearch7.5.2 常用rest api与elasticsearch库

    2024-07-10 19:44:03       9 阅读
  7. MySQL 的 Buffer Pool 的结构及有什么作用

    2024-07-10 19:44:03       10 阅读