1,前言
制作坦克发射炮弹
参考自–b站视频
2,思路
发射炮弹的思路其实就是:
实例化一个炮弹出来,然后给这个炮弹添加一个向前的力,使其发射
3,步骤
3.1,发射位置
首先需要给PlayerTank(玩家坦克)创建一个空的子物体(Empty Child)
命名为ShootPoint,这个ShootPoint就是实例化炮弹的位置,炮弹会在这个位置被实例化出来,然后通过脚本给它一个力。
创建完之后就需要调整一下这个发射点的位置,使它在坦克的炮管发射口的正前方即可(又或者调整到你想要的位置和角度)
3.2,炮弹模型
然后就是炮弹的模型,我们可以去Unity的Asset Store中的寻找我们需要的炮弹模型,下载导入即可。这里我用的是Unity官方教程双人坦克小游戏中的炮弹模型。
导入之后给这个炮弹模型添加上Box Collider和Rigibody还有Light组件
Box Collider是为了方便炮弹命中坦克时进行碰撞判定的
Rigibody是为了让炮弹有物理属性
Light是为了让炮弹飞行时带有光效,纯粹是酷!
然后将炮弹存为Prefab方便后面使用
3.3,编写脚本
接下来就是编写脚本(MainTankWeapon),使得按下空格键的时候就会实例化一个炮弹并进行发射。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainTankWeapon : MonoBehaviour
{
//炮弹Prefab
public GameObject shell;
//发射时给炮弹施加的力
public float shootPower;
//炮弹发射的位置
public Transform shootPoint;
//炮弹发射间隔
public int fireTime=0;
// Update is called once per frame
void Update()
{
if (fireTime<=999)
{
fireTime++;
}
//防止炮弹进行无间断发射
//按下空格键就会发射炮弹
if (fireTime>=30 && Input.GetKeyDown(KeyCode.Space))
{
Shoot();
fireTime = 0;
}
}
//发射炮弹的方法
void Shoot()
{
//这是实例化出来的炮弹
GameObject newShell=Instantiate(shell, shootPoint.position, shootPoint.rotation) as GameObject;
//获取炮弹的刚体组件
Rigidbody r =newShell.GetComponent<Rigidbody>();
//给炮弹施加一个力,使其飞行
r.velocity = shootPoint.forward * shootPower;
}
}
3.4,挂载脚本
接下来就是将脚本挂在在PlayerTank上
并通过属性菜单进行赋值
将ShootPoint和炮弹Prefab(我这里的是Shell1)拖到对应的框即可
并在ShootPower框上填上相应的值,表示炮弹发射时施加的力。
力越大,炮弹飞的越远越快
未完待续…