用Unity实现抛物线向目标点发射炮弹功能
游戏开发中经常会涉及到制作向特定的目标点投掷物体的功能,比如:塔防类、射击类、即时战斗类游戏…等等,首先需要明确的一点是,要打中目标点,发射的角度、发射点与目标点的距离是最重要的计算参数。如果发射的物体是具有方向性的实体,那被发射出去的物体是要有角度变化的,而不只是一条运动轨迹。
本功能实现原理是根据与目标点距离,实时设置炮弹的旋转角度。炮弹始终朝着自身正前方移动。话不多说,上代码!
- 准备阶段
实现此功能,我一共创建了三个脚本:
DirectionalArtilleryShell.cs挂载到附加了Collider和Rigbody的炮弹物体上。
DirectionalArtilleryController.cs 挂载到发射台上
DirectionalArtilleryShootPoint.cs挂载到发射点组件上,其实这个脚本可以省略掉的,为了后面加上对发射台其他的操作,就先加上吧,哈哈。
为了使用方便,发射的炮弹是通过 Resources.Load 实例化的,DirectionalArtilleryShell是发射的炮弹,FX_ZiMuDan_ChildHit是炮弹击中之后势力画出来的特效。
炮弹和特效存放目录位置如图(可根据不同项目自行设置):
组件节点顺序
- 一、实现炮弹的飞行功能,脚本名称【DirectionalArtilleryShell】
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DirectionalArtilleryShell : MonoBehaviour
{
//打击目标
private Transform Target;
//发射速度
private float speed = 0f;
//最小接近距离
private float min_distance = 0f;
//是否需要追踪
private bool IsTrace = false;
//炮弹与目标点距离
private float distanceToTarget;
//是否移动
private bool move_flag = true;
//目标点坐标
private Vector3 TargetPosition = Vector3.zero;
//击中目标点时与目标点的角度
public float HitAngle = 45f;
//集中特效
private GameObject HitEffect;
private void Awake()
{
HitEffect = Resources.Load("Prefabs/ShellHitEffect/FX_ZiMuDan_ChildHit") as GameObject;