22.玩家-武器奖励对象和获取特效
22.1 知识点
创建多几个武器预制体,子弹预制体和特效预制体
总结武器预制体,子弹预制体和特效预制体的创建套路
- 子弹的制作套路:
- 找资源,添加子弹脚本
- 如果没有刚体和碰撞器,添加(碰撞器是触发器)
- 关联爆炸特效
- 将子弹做成一个新的预设体
- 武器的制作套路:
- 找到武器
- 添加武器脚本
- 关联发射点和子弹
- 将武器做成一个新的预设体
- 爆炸特效制作套路:
- 找资源
- 添加音效脚本
- 拖拽音效
- 将特效做成一个新的预设体
拖拽资源里的武器奖励面片,给实际的面片对象添加旋转脚本
给武器奖励添加碰撞体,并改成触发器,触发玩家时获得效果,拖成预制体
明确武器奖励要做的事
武器奖励需要在触发到玩家时:
- 随机选择一种武器效果
- 让玩家坦克切换到对应的武器
- 播放一个奖励特效
- 移除自己
创建武器奖励脚本,添加玩家坦克切换武器方法,在触发到玩家时让玩家坦克切换武器
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