《杜增强讲Unity之Tanks坦克大战》6-发射子弹
6 发射子弹
本节完成发射子弹的功能,最终代码如下:
首先,发射子弹得确定发射的位置和方向,还有发射的初始速度.具体的发射速度和按下发射按键的时间长短有关,这个关于子弹的蓄力我们在第九小节中会讲到.
首先我们在Tank上添加一个空物体,命名为FirePosition,设置Position为(0,1.7,1.35),
Rotation为(350,0,0)
在wm/Scripts中创建C#脚本Shooter.cs
首先我们是在按下开火键的时候发射子弹的,所以我们在Update()里面需要判断开火键有没有按下,因为两个tank是不同的按键,所以我们需要区分一下当前是哪一个坦克
public int id = 1; // 坦克id
void Update () { if (Input.GetButtonDown ("Fire" + id)) { // 按下开火键 Fire ();// 发射子弹 } }
.
发射子弹的时候需要子弹的Prefab和发射位置.
public GameObject shellObject; // 子弹Prefab
public Transform firePosition; // 发射点
在真正发射子弹的Fire()函数里面,我们需要使用Instantiate方法来创建Shell的实例
GameObject go = Instantiate (shellObject, firePosition.position, firePosition.rotation ) as GameObject;
至于让子弹发射出去,则可以通过直接设置刚体的速度来实现.
Rigidbody rb = go.GetComponent<Rigidbody> ();
if (rb) rb.velocity = firePosition.forward * 20;
发射子弹功能完整代码如下:
Shooter.cs代码:
using UnityEngine;
using System.Collections;
public class Shooter : MonoBehaviour {
public GameObject shellObject; // 子弹Prefab public Transform firePosition; // 发射点 public int id = 1; // 坦克id // Update is called once per frame void Update () { if (Input.GetButtonDown ("Fire" + id)) { // 按下开火键 Fire ();// 发射子弹 } } public void Fire(){ // 发射子弹 GameObject go = Instantiate (shellObject, firePosition.position, firePosition.rotation ) as GameObject; Rigidbody rb = go.GetComponent<Rigidbody> (); if (rb) rb.velocity = firePosition.forward * 20; }
}
然后回到Hierarchy里面,选中Tank,将Shooter挂载到上面,设置Shell预设体和发射点,保存Tank Prefab.
点击Play运行游戏,实际效果如下.
---------------------------我是目录分割线---------------------------
《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
---------------------------我是目录分割线---------------------------
《杜增强讲Unity之Tanks坦克大战》6-发射子弹的更多相关文章
- 《杜增强讲Unity之Tanks坦克大战》10-相机控制
10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内. image 在Hierarchy点击右键 image 点击 Create Empty,生成空对象,改名 ...
- 《杜增强讲Unity之Tanks坦克大战》11-游戏流程控制
11 游戏流程控制 使用协程来控制游戏流程 11.1 添加MessageText 首先添加一个Text来显示文字 image 设置GameMgr image 11.2 游戏整体流程 下面Gam ...
- 《杜增强讲Unity之Tanks坦克大战》9-发射子弹时蓄力
9 发射子弹时蓄力 实现效果如下 image 按下开火键(坦克1为空格键)重置力为最小力,一直按着的时候蓄力,抬起的时候发射.如果按着的时候蓄力到最大,则自动发射,此时在抬起则不会重复发射. 首先 ...
- 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转
4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览 image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...
- 《杜增强讲Unity之Tanks坦克大战》1-准备工作
0.案例介绍 0.1开始界面 点击Play Now 进入游戏界面 左边的坦克使用ws控制前后移动,ad键左右旋转,空格键开火 右边的坦克使用方向键上下控制前后移动,方向键左右键实现左右旋转 ...
- 《杜增强讲Unity之Tanks坦克大战》2-场景设置
2 场景设置 2.1 本节效果预览 2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹 Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...
- 《杜增强讲Unity之Tanks坦克大战》3-添加坦克
3 添加坦克 3.1 本节效果预览 3.2 另存新场景 首先打开上次的场景s1,另存为s2,放到同一个文件夹下面. 3.3 添加坦克模型 在Model文件夹下面找到Tank模型 将Tank ...
- 《杜增强讲Unity之Tanks坦克大战》5-子弹
5 子弹 本节的任务是创建子弹的Prefab image 首先从Model/Shell找到子弹的模型,拖入Hierarchy中,添加刚体组件,所有属性默认值. 添加Capsule Collider ...
- 《杜增强讲Unity之Tanks坦克大战》7-坦克血条
7 坦克血条 点击菜单GameObject->UI->Slider创建Slider 选中EventSystem,设置Horizontal Axis为HorzontalUI,Vertic ...
随机推荐
- Jmeter入门3 http请求—content-type与参数
本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分:目前工作中涉及到的content-type 有三种: content-type:在Request Headers里, ...
- Day15 集合(二)
Set简介 定义 public interface Set<E> extends Collection<E> {} Set是一个继承于Collection的接口,即Set也是集 ...
- 集合之保持compareTo和equals同步
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法.我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于.同时我们也知道e ...
- vue.js数据绑定
语法 插值 双大括号:{{text}} {{*text}}之渲染第一次 {{{html}}} 表达式(各种数值,变量,运算符的综合体) ...
- HDU 1698 Just a Hook(线段树模板之区间替换更新,区间求和查询)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 新手搭建 x-boot 编译环境笔记
1.需要先搭建交叉编译环境,即制作交叉编译工具链,这个过程比较复杂,所以我在这里使用别人做好的交叉编译工具链. 2018年8月27日15:03:37 2.X-boot 源码github地址:htt ...
- 【vue】vue生命周期解读 (流程+钩子函数)
参考详细说明一波简书 (vue中钩子函数解读) 1.实例渲染流程 2.生命周期钩子函数比 钩子函数详解简书一 钩子函数详解简书二
- oracle快速学习
- python3通过纯真IP数据库查询IP归属地信息
在网上看到的别人写的python2的代码,修改成了python3. 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下. #! /usr/bin/env python # -*- co ...
- JavaWeb基础—JavaBean
一.什么是JavaBean 一个遵循一定规范的普通的Java类 百度的JavaBean规范: (1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public , 如: public c ...