您的位置:首页 > 移动开发 > Unity3D

Unity3D-塔防游戏项目主要源码(防御塔导弹脚本)

2017-09-08 19:46 239 查看
using UnityEngine;
using System.Collections;

namespace TowerDefenceTemplate
{
public class Rocket : MonoBehaviour
{
[HideInInspector]
public GameObject Target;//导弹的射击目标

[HideInInspector]
public float Damage;//伤害值

private bool Exploded;//是否已经爆炸

private GameManager gameManager;//实例化游戏管理器的对象

public GameObject Body;//激活导弹体

public EllipsoidParticleEmitter Explosion;//实例化例子系统的对象

public ParticleSystem Smoke;//实例化分系统的对象,产生一个在飞行期间冒烟的效果

public int RocketSpeed;//导弹的移动速度

void Start()
{
gameManager = FindObjectOfType<GameManager>();//获取脚本
if (gameManager == null)
{
enabled = false;
}
}

void Update()
{
Fly();
if (Target != null)
{
AimAtTarget();
}
}

void Fly()
{
transform.Translate(transform.forward * Time.deltaTime * RocketSpeed,Space.World);
}

void AimAtTarget()//跟踪目标
{
Quaternion TargetRotation = Quaternion.LookRotation(Target.transform.position - transform.position);//定义一个跟踪旋转四元数
transform.rotation = Quaternion.RotateTowards(transform.rotation, TargetRotation, Time.deltaTime * 1000);//导弹做跟踪旋转
if (Vector3.Distance(transform.position, Target.transform.position) < 3 && !Exploded)//如果导弹与目标之间的距离小于3并且导弹还没爆炸
{
Explode();//让它爆炸
}
}

void GetParentingBack()//回收导弹
{
Explosion.transform.parent = transform;//把自己的位置赋值给粒子系统爆炸的位置的父物体
Explosion.transform.position = transform.position;//自身的坐标赋值给爆炸点的坐标
Smoke.Play();//分系统冒烟执行
Body.SetActive(true);//导弹体激活
gameObject.SetActive(false);//所有炮塔互不影响
Exploded = false;//设置没有爆炸
}

void Explode()//爆炸
{
Target.transform.SendMessage("GetDamage", Damage);//目标受到伤害
Exploded = true;//已经爆炸
gameManager.RocketExplosionSound.Play();//播放导弹爆炸音效
Explosion.Emit();//调用粒子系统
Explosion.transform.parent = null;//爆炸粒子位置的父物体设置为空
Smoke.Stop();//冒烟停止
Target = null;//目标为空
Invoke("GetParentingBack", 0.9f);//0.9s后执行方法GetParentingBack,
Body.SetActive(false);//导弹体失活
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息