22.武器奖励

22.玩家-武器奖励对象和获取特效


22.1 知识点

创建多几个武器预制体,子弹预制体和特效预制体

总结武器预制体,子弹预制体和特效预制体的创建套路

  • 子弹的制作套路:
    1. 找资源,添加子弹脚本
    2. 如果没有刚体和碰撞器,添加(碰撞器是触发器)
    3. 关联爆炸特效
    4. 将子弹做成一个新的预设体
  • 武器的制作套路:
    1. 找到武器
    2. 添加武器脚本
    3. 关联发射点和子弹
    4. 将武器做成一个新的预设体
  • 爆炸特效制作套路:
    1. 找资源
    2. 添加音效脚本
    3. 拖拽音效
    4. 将特效做成一个新的预设体

拖拽资源里的武器奖励面片,给实际的面片对象添加旋转脚本

给武器奖励添加碰撞体,并改成触发器,触发玩家时获得效果,拖成预制体

明确武器奖励要做的事

武器奖励需要在触发到玩家时:

  • 随机选择一种武器效果
  • 让玩家坦克切换到对应的武器
  • 播放一个奖励特效
  • 移除自己

创建武器奖励脚本,添加玩家坦克切换武器方法,在触发到玩家时让玩家坦克切换武器

using UnityEngine;

public class WeaponReward : MonoBehaviour
{
    // 有多个用于随机的武器预设体
    public GameObject[] weaponObj;

    // 获取特效
    public GameObject getEff;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // 随机选择一种武器
            int index = Random.Range(0, weaponObj.Length);

            // 获取玩家坦克对象
            PlayerTank player = other.GetComponent<PlayerTank>();
            // 让玩家切换武器
            player.ChangeWeapon(weaponObj[index]);

            // 播放奖励特效
            GameObject eff = Instantiate(getEff, transform.position, transform.rotation);
            // 控制获取音效
            AudioSource audioS = eff.GetComponent<AudioSource>();
            audioS.volume = GameDataMgr.Instance.musicData.soundValue;
            audioS.mute = !GameDataMgr.Instance.musicData.isOpenSound;

            // 移除武器奖励
            Destroy(gameObject);
        }
    }
}

在玩家坦克脚本,给玩家添加切换武器逻辑

public class PlayerTank : MonoBehaviour
{
    private Weapon currentWeapon;

    // 切换武器
    public void ChangeWeapon(GameObject weaponPrefab)
    {
        // 删除当前拥有的武器
        if (currentWeapon != null)
        {
            Destroy(currentWeapon.gameObject);
            currentWeapon = null;
        }

        // 创建新的武器
        GameObject weaponObj = Instantiate(weaponPrefab, transform.position, transform.rotation);
        currentWeapon = weaponObj.GetComponent<Weapon>();
        currentWeapon.SetOwner(this);
    }
}

给子弹和特效加自动移除的脚本

public class AutoDestroy : MonoBehaviour
{
    public float time = 2;

    void Start()
    {
        // 在开始时销毁自己
        Destroy(gameObject, time);
    }
}

22.2 知识点代码

WeaponReward

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//武器奖励
public class WeaponReward : MonoBehaviour
{
    //有多个用于随机的 武器预设体 拖拽赋值的
    public GameObject[] weaponObj;

    //获取特效
    public GameObject getEff;

    private void OnTriggerEnter(Collider other)
    {
        if( other.CompareTag("Player") )
        {
            //让玩家 切换武器
            int index = Random.Range(0, weaponObj.Length);

            //得到撞到的玩家身上挂在的 脚本 命令它切换武器
            PlayerObj player = other.GetComponent<PlayerObj>();
            player.ChangeWeapon(weaponObj[index]);

            //播放一个 奖励特效
            GameObject eff = Instantiate(getEff, this.transform.position, this.transform.rotation);
            //控制 获取音效
            AudioSource audioS = eff.GetComponent<AudioSource>();
            //大小和开启状态
            audioS.volume = GameDataMgr.Instance.musicData.soundValue;
            audioS.mute = !GameDataMgr.Instance.musicData.isOpenSound;

            //获取到自己后 移除自己
            Destroy(this.gameObject);
        }
    }
}

AutoDestroy

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//子弹和特效自动移除脚本
public class AutoDestroy : MonoBehaviour
{
    public float time = 2;
    
    void Start()
    {
        Destroy(this.gameObject, time);
    }

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏