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