1,前言
制作敌方坦克的武器系统
2,步骤
2.1,创建ShootPoint
跟制作玩家坦克的发射炮弹一样,需要给敌方坦克(EnemyTank的Prefab)新建一个空的子物体,并命名为ShootPoint
2.2,编写脚本
然后就需要进行脚本的编写,大体逻辑与玩家坦克的发射逻辑差不多,但细节部分需要进行调整:
- 敌方坦克与玩家距离过远,不会进行开火
- 距离合适的时候,每隔一定的时间就会进行开火
新建一个脚本名为EnemyTankWeapon
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyTankWeapoon : MonoBehaviour
{
/**
* 这是控制敌方坦克发射炮弹的脚本
*/
//炮弹的外壳
public GameObject shell;
//炮弹发射时施加的力
public float shootPower;
//炮弹发射的位置
public Transform shootPoint;
//开火间隔
private int fireTime = 0;
//玩家控制的坦克
private Transform m_TargetTransform;
void Awake()
{
//通过标签找到玩家坦克
var player = GameObject.FindGameObjectWithTag("Player");
//获取玩家坦克的位置
m_TargetTransform = player.transform;
}
// Update is called once per frame
void Update()
{
//判断敌方坦克与玩家的距离
if (Vector3.Distance(transform.position, m_TargetTransform.position) < 80f)
{
fireTime++;
//每隔75帧便会发射炮弹
if (fireTime == 75)
{
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;
}
}
2.3,挂载脚本
将上述的脚本挂载到EnemyTank的Prefab中
然后将先前制作的炮弹的Prefab(我的是Shell1)
和上面创建的ShootPoint拖拽到相应的位置
2.4,细节调整
制作的过程中,发现敌方坦克的炮管会与墙壁发生穿模,所以进行了一些小的调整(出于强迫症,别问PlayerTank为什么不也作调整,问就是懒)
给EnemyTank新建一个Cube子物体,并命名为Tube。
并将其Box Collider组件删除,替换成Capsule Collider(胶囊状的碰撞体)
然后调整Capsule Collider的Collider,使之和炮管的模型重合即可
未完待续…