24.箱子

24.玩家-可击毁的箱子


24.1 知识点

明确可销毁的箱子要做的事

可销毁的箱子在被销毁时需要执行以下任务:

  • 随机生成一个奖励物品
  • 播放死亡特效
  • 自动销毁自己

拖拽资源做好箱子预设体,创建可击毁箱子脚本,实现触发碰撞逻辑,并随机出一个奖励,被销毁时出现死亡特效,给特效添加自动销毁脚本

using UnityEngine;

// 可销毁的箱子
public class CubeObj : MonoBehaviour
{
    // 奖励物品预设体
    public GameObject[] rewardObjects;

    // 死亡特效预设体
    public GameObject deadEff;

    private void OnTriggerEnter(Collider other)
    {
        // 1. 如果打到自己的子弹,应该销毁(已在子弹逻辑中处理)

        // 2. 如果被玩家击中,处理随机创建奖励的逻辑
        if (other.CompareTag("Player"))
        {
            // 随机一个数来确定是否创建奖励物品
            int rangeInt = Random.Range(0, 100);
            // 50%的几率创建一个奖励
            if (rangeInt < 50)
            {
                // 随机创建一个奖励预设体在当前位置
                int rewardIndex = Random.Range(0, rewardObjects.Length);
                Instantiate(rewardObjects[rewardIndex], transform.position, transform.rotation);
            }

            // 创建死亡特效预设体
            GameObject effObj = Instantiate(deadEff, transform.position, transform.rotation);
            // 控制音效
            AudioSource audioS = effObj.GetComponent<AudioSource>();
            audioS.volume = GameDataMgr.Instance.musicData.soundValue;
            audioS.mute = !GameDataMgr.Instance.musicData.isOpenSound;

            // 销毁自己
            Destroy(gameObject);
        }
    }
}

这样,当玩家击中可销毁的箱子时,会根据一定的几率生成一个随机的奖励物品,并播放死亡特效。同时,箱子自身也会被销毁。


24.2 知识点代码

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

//可击毁的箱子
public class CubeObj : MonoBehaviour
{
    //奖励物品预设体 关联
    public GameObject[] rewardObjects;

    //死亡特效 预设体  关联
    public GameObject deadEff;

    private void OnTriggerEnter(Collider other)
    {
        //1.打到自己的子弹 应该销毁
        //第一步 不用再这里写 只需要把箱子的tag  改成Cube 之前子弹逻辑当中就已经处理过 打中 cube销毁自己的逻辑

        //2.打到自己 应该处理 随机创建奖励的逻辑

        //随机一个数 来获取奖励
        int rangeInt = Random.Range(0, 100);
        //50%的几率 创建一个奖励 
        if( rangeInt < 50 )
        {
            //随机创建一个 奖励预设体 在当前位置
            rangeInt = Random.Range(0, rewardObjects.Length);
            //放到当前箱子所在的位置 即可
            Instantiate(rewardObjects[rangeInt], this.transform.position, this.transform.rotation);
        }

        //创建特效预设体
        GameObject effObj = Instantiate(deadEff, this.transform.position, this.transform.rotation);
        //控制音效
        AudioSource audioS = effObj.GetComponent<AudioSource>();
        audioS.volume = GameDataMgr.Instance.musicData.soundValue;
        audioS.mute = !GameDataMgr.Instance.musicData.isOpenSound;

        Destroy(this.gameObject);
    }
}


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

×

喜欢就点赞,疼爱就打赏