注:Paotai为大炮,所挂载的脚本为Move.
using UnityEngine;
using System.Collections;public class Move : MonoBehaviour
{public Transform TargetMove;//作为炮口的瞄准目标
private GameObject _gameuseY;public GameObject bomb;//炮弹
public GameObject gun;//炮口 //爆炸特效 public GameObject BombTiny;//爆炸小特效 public GameObject BombWide;//爆炸大特效 void Start() { //实例化出名字为_gameuseY的参照物体 _gameuseY = new GameObject("_gameuseY"); } void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray,out hit,100)) { TargetMove.position = hit.point; _gameuseY.transform.LookAt(hit.point); //炮台沿着_gameuseY的Y轴旋转【旋转eulerAngles】。 transform.eulerAngles = new Vector3(transform.eulerAngles.x,_gameuseY.transform.eulerAngles.y,transform.eulerAngles.z); if (Input.GetMouseButtonDown(0)) { //按下鼠标左键 GameObject bombs = Instantiate(bomb) as GameObject; //炮弹从炮口位置发射 bomb.transform.position = gun.transform.position; //实例化出炮口位置的爆炸特效 GameObject bombTinys = Instantiate(BombTiny) as GameObject; //炮弹小特效的父物体是炮口 bombTinys.transform.parent = gun.transform; //设置爆炸特效的初始位置 bombTinys.transform.localPosition = Vector3.zero; //调用爆炸特效脚本Detonator的size属性 bombTinys.GetComponent<Detonator>().size = 3; //销毁特效 Destroy(bombTinys, 2.0f); //调用Build脚本中的SetTarget()函数 bombs.GetComponent<Bomb>().SetTarget(TargetMove, BombWide);//调用Bomb脚本中的SetTarget()函数
bombs.GetComponent<Bomb>().SetTarget(TargetMove, BombWide); } } }}Bomb脚本
using UnityEngine;
using System.Collections;public class Bomb : MonoBehaviour
{ GameObject chun; Vector3 ve; public void SetTarget(Transform trang ,GameObject chun) { ve = trang.position; this.chun = chun;//爆炸范围的预设体 } void Update() { if (ve != null) { //如果炮弹存在 if (Vector3.Distance(transform.position, ve) < 0.01f) { //实例化爆炸特效的爆炸范围的预设体 GameObject chunks = Instantiate(chun) as GameObject; chunks.transform.position = ve; destroy(gameObject); } //爆炸特效朝向发出的炮弹方向移动 gameObject.transform.position = Vector3.MoveTowards(transform.position, ve, 20f * Time.deltaTime);}
} }效果图:
注:代码参考CannonFinal