版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明

目标:

  • 坦克和子弹预制体的制作
  • 脚本编写子弹的发射

坦克和子弹预制体的制作

  • 首先我们先新建一个空的GameObject重命名为Tank然后在其子节点创建一个Cube调整至合适的大小,调整完成后我们复制一个同样的Cube并把它旋转90度,调整至如下图所示
  • 这样我们的坦克便制作完成了,然后我们在场景中新建一个Sphere并重命名为Projectile并把我们的子弹调整至合适的大小,添加上Rigidbody,并把我们制作完成的物体保存到文件夹下就可以了

脚本编写子弹的发射

  • 首先我们打开Tank的预制体并且新建一个空的Ganmeobject改名为ShotPos并把位置调整至合适的坐标
  • 作为我们炮弹的发射点,然后我们在Tank下新建一个脚本命名为Tank并打开编写如下代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tank : MonoBehaviour
{
    public GameObject projPrefab; // 要发射的子弹的预制体

    public Transform shotPos; // 要发射的子弹的位置

    private float lastFireTime; // 上一次发射的时间

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetButton("Fire1")
            && Time.time - lastFireTime > 0.2f)
        {
            // 实例化(从预制体克隆)一个子弹
            var transProj = Instantiate(projPrefab).transform;

            // 设置子弹的位置在坦克设定好的炮口位置
            transProj.SetParent(this.transform, false);
            transProj.position = shotPos.position;
            Vector3 v = shotPos.forward * 100;
            transProj.GetComponent<Rigidbody>().AddForce(v, ForceMode.Impulse);

            Destroy(transProj.gameObject, 2f);

            lastFireTime = Time.time;
        }
    }
}
  • 然后保存并关闭我们的脚本,最后把我们的刚刚制作的预制体和ShotPos拖给脚本上的Public变量。
  • 最后打开游戏我们按下鼠标左键就能发射炮弹啦!

版权声明:本文为raymondking123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/raymondking123/p/11445369.html