【Unity3D游戏魔坦之争】敌方逻辑封装实现【六】

慈云数据 2024-03-12 技术支持 78 0

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:unityUI专题篇

在这里插入图片描述


⭐通用API实现抽象行为封装【五】⭐


文章目录

    • ⭐通用API实现抽象行为封装【五】⭐
    • 🎶前言
    • 🎶(==A==)UML
    • 🎶(==B==)需求分析
    • 🎶(==C==)行为实现——炮台的自动检测并攻击
    • 🎶(==D==)行为实现——敌军坦克的移动路线和检测攻击
      • 总结:

        🎶前言

        在这里插入图片描述

        在这里插入图片描述


        🅰️


        🎶(A)UML


        在这里插入图片描述


        🎶(B)需求分析


        在这里插入图片描述

        在这里插入图片描述


        🎶(C)行为实现——炮台的自动检测并攻击


        在这里插入图片描述


        😶‍🌫️:步骤实现

        1.炮台的行为逻辑封装:旋转,触发检测,发射炮弹及特效

        2.检测玩家后自动瞄准攻击

        3.玩家扣血,更新血条,触发保护罩特效及死亡


        ——————————————在这里插入图片描述

        涉及到四个脚本

        炮台封装

        using System.Collections;
        using System.Collections.Generic;
        using UnityEngine;
        //-------------------------------------
        //—————————————————————————————————————
        //___________项目:       ______________
        //___________功能: 炮台的行为逻辑实现
        //___________创建者:秩沅_______________
        //_____________________________________
        //-------------------------------------
        public class battery : TankFather
        {
            public AudioSource shootMusic;   //发射音效
            public GameObject shootball;     //发射的子弹类型
            public float shootSpeed = 1000f; //子弹的速度 
            public Transform shootTransform; //发射的组件信息
            public bool shootSwitch = false;
            //射击检测参数
            public Transform player;         //闯入者
            private float endTime = 8f;      //子弹发射间隔的时间
            
            private void Start()
            {
                //属性初始化赋值
                Head = transform.GetChild(0);
                maxBlood = 500;
                nowBlood = 500;
                attack = 20;   
                HeadSpeed = 50;
                //射击音效关闭
                shootMusic.enabled = false;
         
            }
            private void Update()
            {  
                if (shootSwitch == false)   //不停的旋转
                {
                    Head.transform.Rotate(Vector3.up * HeadSpeed * Time.deltaTime);
                }          
                else 
                {
                    Head.transform.LookAt(player);
                    //倒计时发射子弹
                    endTime = Mathf.MoveTowards(endTime, 0, 0.1f);
                    if(endTime 
                        Fire();
                        endTime = 3f;
                    }
                }     
            }
            //玩家进入范围内就开始射击
            private void OnTriggerEnter(Collider other)
            {
                if(other.tag == "Player")
                {
                    shootSwitch = true;
                    player = other.transform;
                }
               
            }
            //受伤检测
            private void OnTriggerStay(Collider other)
            {
                float off = Vector3.Distance(other.transform.position, transform.position);
                if (other.gameObject.tag == "bullet" && off 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon