我与另外两个组员合作进行了FPS游戏(第一人称射击游戏)的开发,这个游戏对应于我们在项目开始设想的PVP玩家对战游戏。玩家之间的之间对战会让游戏变得更加紧张刺激,还能够增强玩家之间的感情。
我在这个游戏中主要负责的工作是枪械特效、枪械声音、射击反馈震屏、子弹散射、枪械射击弹孔、ui子弹数量、pun控制输入同步、remote开枪效果同步。
首先,我们是在weapon文件夹下完成对枪械的相关脚本的创建和编写的。
创建IWeapon脚本用来管理接口,命名空间归类到Scripts.Weapon下,防止出现冲突:
namespace Scripts.Weapon
{
public interface IWeapon
{
void DoAttack();
}
}
然后编写Firearms脚本,这是枪械整体共用的部分。其中把Firearms枪械类抽象掉,因为这不是具体的枪械,并且可以挂在game object上:
获取枪口的位置,还要知道子弹抛出的位置。抛出弹壳使用粒子变量,避免太多的实例化过程。
需要一个弹夹AmmoInMag,设置容纳的子弹数。并且设置每把枪最大的子弹携带数。此外开枪需要设置动画。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Scripts.Weapon
{
public abstract class Firearms : MonoBehaviour, IWeapon
{
public GameObject BulletPrefab;
public Camera EyeCamera;
public Camera GunCamera;
public Transform MuzzlePoint;
public Transform CasingPoint;
public ParticleSystem MuzzleParticle;
public ParticleSystem CasingParticle;
public AudioSource FirearmsShootingAudioSource;
public AudioSource FirearmsReloadAudioSource;
public FirearmsAudioData FirearmsAudioData;
public ImpactAudioData ImpactAudioData;
public GameObject BulletImpactPrefab;
public float FireRate;
public int AmmoInMag = 30;
public int MaxAmmoCarried = 120;
public float SpreadAngle;
[SerializeField] internal Animator GunAnimator;
public List<ScopeInfo> ScopeInfos;
public ScopeInfo BaseIronSight;
protected ScopeInfo rigoutScopeInfo;
public int GetCurrentAmmo => CurrentAmmo;
public int GetCurrentMaxAmmoCarried => CurrentMaxAmmoCarried;
protected int CurrentAmmo;
因篇幅问题不能全部显示,请点此查看更多更全内容