【Unity3D】 简单设计一个自动攻击的炮塔

简单说明:
本文简单介绍了射击系统的基本原理,并上传了源码到git仓库:https://gitee.com/jeady5/unity3dSample,有需要的可以自取,如有帮助,记得三连…

Unity3D 逐步设计一个射击系统

一、概述

本文要实现的只是一个简单的射击模拟效果,提供一个简单思路。

整体思路分为下列几个过程:

  • 炮弹从炮筒沿指定方向,随机的瞄准精度发出
  • 炮弹未击中目标,则一定时间后自动销毁
  • 炮弹击中目标,则在目标的相应位置留下伤痕

文章最后也放着相匹配的制作视频,不喜欢看文字的朋友可以直接跳转。

二、流程分析

  1. 生成炮弹
    该流程使用到的是动态创建物体的流程。

  2. 射出炮弹
    有关物体位置和角度的问题,该流程使用到的肯定是一些相关的transform属性和方法。
    如 炮筒位置属性,炮筒的瞄准方向,炮弹的移动等。

  3. 自我销毁
    自我销毁就用到Destroy方法,传入要销毁的游戏对象即可。
    关于销毁时间可以通过在update周期方法中对Time.deltaTime进行累加来判断多少秒后进行销毁。

  4. 击中目标
    对击中目标的判断,本文假想的是停止作用较小的贯穿效果,所以选用的是碰撞体触发的方式来检测是否击中目标。

你也可以采取碰撞的方式来模拟目标受击后短距离的击退效果。

  1. 中弹现场
    这个就比较简单了,只要在获得了击中位置后,在此位置上放置一个模拟效果的物体即可。

三、知识点解读

  1. Instantial —— 动态生成物体
    该方法实现了将传入的物体对象参数复制一个出来。
    这样的话,我们就只需要得到那个对象的实例就可以了。比如:
  • 通过检查器拖拽赋值
  • 根据路径从本地对象文件加载
  1. transform.Translate —— 相对移动
    该方法实现的是对象的相对移动。如:炮弹的移动

  2. Destroy —— 销毁目标对象
    销毁传入的任何对象(游戏对象/组件)

  3. OnTriggerEnter —— 检测碰撞体触发。
    只需要在MonoBehaviour的派生类中实现该方法即可自动调用。 原型为:
    void OnTriggerEnter(Collider other)

  4. Collider.ClosedPoint —— 获取碰撞体上的点。
    该方法用于获取在碰撞体上距离给定点最近的点的坐标。

四、注意事项

  1. 在使用Translate方法进行移动时,要注意参数是相对移动的距离和方向信息
  2. 在使用Translate方法进行移动时,要注意给定偏移参数是世界坐标还是本地坐标,注意转换
  3. 使用碰撞体触发时,注意触发发生的条件: 不能两个都是静态碰撞体且其中一个是触发碰撞体。
  4. 在使用到forwardright等内置的世界坐标属性时,要记得检查物体的本地轴方向而非世界坐标轴方向

武、最后

本文只是从原理上说明了基本实现,并没有在特效上深入。

分享不易,记得三连,感谢~

你可能感兴趣的:(经验详谈,unity)