xirang/Assets/StylizedProjectilePack1/WebDemo/scripts/projectileActor.cs
杨号敬 6664b0584c add
2024-11-26 22:01:14 +08:00

253 lines
6.0 KiB
C#

using UnityEngine;
using UnityEngine.UI;
public class projectileActor : MonoBehaviour {
public Transform spawnLocator;
public Transform spawnLocatorMuzzleFlare;
public Transform shellLocator;
public Animator recoilAnimator;
public Transform[] shotgunLocator;
[System.Serializable]
public class projectile
{
public string name;
public Rigidbody bombPrefab;
public GameObject muzzleflare;
public float min, max;
public bool rapidFire;
public float rapidFireCooldown;
public bool shotgunBehavior;
public int shotgunPellets;
public GameObject shellPrefab;
public bool hasShells;
}
public projectile[] bombList;
string FauxName;
public Text UiText;
public bool UImaster = true;
public bool CameraShake = true;
public float rapidFireDelay;
public CameraShake CameraShakeCaller;
float firingTimer;
public bool firing;
public int bombType = 0;
// public ParticleSystem muzzleflare;
public bool swarmMissileLauncher = false;
int projectileSimFire = 1;
public bool Torque = false;
public float Tor_min, Tor_max;
public bool MinorRotate;
public bool MajorRotate = false;
int seq = 0;
// Use this for initialization
void Start ()
{
if (UImaster)
{
UiText.text = bombList[bombType].name.ToString();
}
if (swarmMissileLauncher)
{
projectileSimFire = 5;
}
}
// Update is called once per frame
void Update ()
{
//Movement
if(Input.GetButton("Horizontal"))
{
if (Input.GetAxis("Horizontal") < 0)
{
gameObject.transform.Rotate(Vector3.up, -25 * Time.deltaTime);
}
else
{
gameObject.transform.Rotate(Vector3.up, 25 * Time.deltaTime);
}
}
//BULLETS
if (Input.GetKeyDown(KeyCode.D))
{
Switch(-1);
}
if (Input.GetButtonDown("Fire2") || Input.GetKeyDown(KeyCode.A))
{
Switch(1);
}
if(Input.GetButtonDown("Fire1"))
{
firing = true;
Fire();
}
if (Input.GetButtonUp("Fire1"))
{
firing = false;
firingTimer = 0;
}
if (bombList[bombType].rapidFire && firing)
{
if(firingTimer > bombList[bombType].rapidFireCooldown+rapidFireDelay)
{
Fire();
firingTimer = 0;
}
}
if(firing)
{
firingTimer += Time.deltaTime;
}
}
public void Switch(int value)
{
bombType += value;
if (bombType < 0)
{
bombType = bombList.Length;
bombType--;
}
else if (bombType >= bombList.Length)
{
bombType = 0;
}
if (UImaster)
{
UiText.text = bombList[bombType].name.ToString();
}
}
public void Fire()
{
if(CameraShake)
{
CameraShakeCaller.ShakeCamera();
}
Instantiate(bombList[bombType].muzzleflare, spawnLocatorMuzzleFlare.position, spawnLocatorMuzzleFlare.rotation);
// bombList[bombType].muzzleflare.Play();
if (bombList[bombType].hasShells)
{
Instantiate(bombList[bombType].shellPrefab, shellLocator.position, shellLocator.rotation);
}
recoilAnimator.SetTrigger("recoil_trigger");
Rigidbody rocketInstance;
rocketInstance = Instantiate(bombList[bombType].bombPrefab, spawnLocator.position,spawnLocator.rotation) as Rigidbody;
// Quaternion.Euler(0,90,0)
rocketInstance.AddForce(spawnLocator.forward * Random.Range(bombList[bombType].min, bombList[bombType].max));
if (bombList[bombType].shotgunBehavior)
{
for(int i = 0; i < bombList[bombType].shotgunPellets ;i++ )
{
Rigidbody rocketInstanceShotgun;
rocketInstanceShotgun = Instantiate(bombList[bombType].bombPrefab, shotgunLocator[i].position, shotgunLocator[i].rotation) as Rigidbody;
// Quaternion.Euler(0,90,0)
rocketInstanceShotgun.AddForce(shotgunLocator[i].forward * Random.Range(bombList[bombType].min, bombList[bombType].max));
}
}
if (Torque)
{
rocketInstance.AddTorque(spawnLocator.up * Random.Range(Tor_min, Tor_max));
}
if (MinorRotate)
{
RandomizeRotation();
}
if (MajorRotate)
{
Major_RandomizeRotation();
}
}
void RandomizeRotation()
{
if (seq == 0)
{
seq++;
transform.Rotate(0, 1, 0);
}
else if (seq == 1)
{
seq++;
transform.Rotate(1, 1, 0);
}
else if (seq == 2)
{
seq++;
transform.Rotate(1, -3, 0);
}
else if (seq == 3)
{
seq++;
transform.Rotate(-2, 1, 0);
}
else if (seq == 4)
{
seq++;
transform.Rotate(1, 1, 1);
}
else if (seq == 5)
{
seq = 0;
transform.Rotate(-1, -1, -1);
}
}
void Major_RandomizeRotation()
{
if (seq == 0)
{
seq++;
transform.Rotate(0, 25, 0);
}
else if (seq == 1)
{
seq++;
transform.Rotate(0, -50, 0);
}
else if (seq == 2)
{
seq++;
transform.Rotate(0, 25, 0);
}
else if (seq == 3)
{
seq++;
transform.Rotate(25, 0, 0);
}
else if (seq == 4)
{
seq++;
transform.Rotate(-50, 0, 0);
}
else if (seq == 5)
{
seq = 0;
transform.Rotate(25, 0, 0);
}
}
}