(七)坦克大战--(5)敌方发射炮弹

1,前言

制作敌方坦克的武器系统

2,步骤

2.1,创建ShootPoint

跟制作玩家坦克的发射炮弹一样,需要给敌方坦克(EnemyTank的Prefab)新建一个空的子物体,并命名为ShootPoint

在这里插入图片描述

2.2,编写脚本

然后就需要进行脚本的编写,大体逻辑与玩家坦克的发射逻辑差不多,但细节部分需要进行调整:

  1. 敌方坦克与玩家距离过远,不会进行开火
  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,使之和炮管的模型重合即可
在这里插入图片描述
未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值