博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
炮弹转向鼠标点击方向,随即发射炮弹并产生爆炸特效
阅读量:7086 次
发布时间:2019-06-28

本文共 2381 字,大约阅读时间需要 7 分钟。

 

注: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

 

转载于:https://www.cnblogs.com/Cocomo/p/5642662.html

你可能感兴趣的文章
问题三兄妹、个性三兄妹、神仙三兄妹……
查看>>
程序员编程艺术:三之三续、求数组中给定下标区间内的第K小(大)元素
查看>>
4、应用程序设置应用程序详细信息页面
查看>>
QTP的那些事--执行用例后提交bug到QC中
查看>>
[火狐REST] 火狐REST 模拟 HTTP get, post请求
查看>>
C++中数字与字符串之间的转换
查看>>
[Android Pro] Java进阶学习:jar打包详解
查看>>
Linux中断(interrupt)子系统之一:中断系统基本原理【转】
查看>>
Sublime Text2格式化HMTL/CSS/JS插件HTML-CSS-JS Prettify
查看>>
AgileEAS.NET平台开发实例-药店系统-BLL层分析
查看>>
Duanxx的Altium Designer学习:PCB试想一下,在目前的水平
查看>>
JMS(Java消息服务)入门教程
查看>>
Trie树的C++实现
查看>>
Android的init过程(二):初始化语言(init.rc)解析【转】
查看>>
HDOJ2017 ( 字符串统计 )
查看>>
xcode 5.0中,新的开发者证书加载方式
查看>>
如何在Windows 2003 中使用Windows Live Writer? - 2010年5月21日学习笔记(1)
查看>>
善用VS中的Code Snippet来提高开发效率
查看>>
EXTJS学习系列提高篇:第六篇(转载)作者殷良胜,更换皮肤
查看>>
Metro style App ContextMenu Summary
查看>>