Unity 简单实现子弹射击

一、具体步骤:

1、  创建预制体:Assets >> Create >> Prefab 并命名,添加碰撞(Box Collider 等)并勾选 Is Trigger、添加钢体(Rigidbody)并取消 Use Gravity(暂时不做重力计算);

2、  预制体添加脚本:在Project下找到新创建的预制体,点击AddComponent,添加移动和销毁脚本;

3、  创建空物体或者Cube等等,并调整位置、旋转、缩放等使其和枪口位置一致并作为枪的子物体(移动过程中确保子弹的初始位置始终在枪口位置)即可;

4、  移动角色挂在射击脚本,拖入预制体(1)和创建的空物体(3);

5、  创建Cube作为NPC,挂在被子弹射中脚本,实现被子弹这种显示血量减少直到挂掉。

说明:所有提到脚本都在附录;

二、脚本解释:

Destroy:

1、  没碰撞,特定时间内自动销毁:

Destroy (gameObject,5); //5秒自动销毁
2、触发销毁(射中,碰撞)

void OnTriggerEnter( Collider GetObj)
{
    if (GetObj != null)  //检测到子弹碰撞销毁
       Destroy (gameObject);
}

Move:
    GetComponent<Rigidbody>().velocity = transform.up * Speed;

//子弹移动

Instantiate:

Instantiate (Bullet, BulletStart.position,

BulletStart.rotation);

//克隆预制体 并赋予位置旋转信息

附录:脚本

 

射击脚本:

using UnityEngine;
using System.Collections;
using System;

public class Fire : MonoBehaviour {

Ray        ray;
    string     getObjName;
    RaycastHit hit;

public GameObject Bullet;
    public Transform  BulletStart;

void Start () {

}

void Update () {

if (Input.GetMouseButtonDown (0)) {    
        
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
            if(Physics.Raycast(ray, out hit))
            {  
                getObjName = hit.transform.name;
            }

Instantiate (Bullet, BulletStart.position, BulletStart.rotation);
        }

}
}

预制体脚本1:移动

using UnityEngine;
using System.Collections;

public class Done_Move : MonoBehaviour {
    public float Speed;

void Start () {
        GetComponent<Rigidbody>().velocity = transform.up * Speed;
    }

}

预制体脚本2:销毁

using UnityEngine;
using System.Collections;

public class Out_Destroy : MonoBehaviour {

void Start () {
    }

void Update()
    {
        Destroy (gameObject,5);
    }
    void OnTriggerEnter( Collider GetObj)
    {
        if (GetObj != null)
            Destroy (gameObject);
    }

}

 

NPC被子弹射中脚本

 

using UnityEngine;
using System.Collections;

public class NPC_Attacked : MonoBehaviour {

private string  healthString;
    private int     heathnum;

void Start () {
        heathnum     = 100;
        healthString = " ";
    }

void Update () {

}
    void OnTriggerEnter( Collider GetObj)
    {
        //子弹射中判断
        if (GetObj.name == "Capsule(Clone)") {

// "Capsule(Clone)"为创建的预制体名字加“(Clone)”
            numAdjust( heathnum,10);
        }

}

void numAdjust( int health,int numDecrease)
    {
        if (health > 0) {
            heathnum -= numDecrease;
            healthString = "当前生命值 : + heathnum.ToString ();
        } else {
            healthString = "嗨,哥们,你挂了";
            Destroy (gameObject,2);
        }
    }

void OnGUI()
    {
        GUI.Label (new Rect(600,200,100,20),healthString);
    }
}

Unity 简单实现子弹射击相关推荐

  1. 使用Playmaker实现简单的子弹射击

    使用Playmaker实现简单的子弹射击 第一步:创建场景 第二步:创建子弹 第三步:给子弹添加playmakerFSM 第四步:将子弹设置为预制体 第五步:创建枪,并添加FSM 第六步:运行 调试 ...

  2. unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...

    哈喽大家好我是yumir. 最近沉迷元气骑士,自从官方把各种"bug"修复之后,这个游戏对我这种手残玩家来说实在是太难了.既然打不过,那我就自己写一个,不就是俯视角射击吗,分分钟给 ...

  3. unity fixedupdate_3D俯视角射击——用Unity还原东方弹幕(上)

    前言 之前我们的专栏中介绍过2D的俯视角射击,这次就来试试在3D场景下的实现.移动射击的实现方法差不多,所以本次的主要目标是在3D场景下还原东方的符卡(弹幕)效果. 我们先来看看最终结果: 可配置的弹 ...

  4. unity 3d原创制作射击游戏(全完整版+安卓apk编译)

    目录 文章目录 目录 实验一 (1)设计如下UI界面,其中包含了canvas.Panel.Text.Button.Image.RawImage等UI元素 (2)实现点击Play按钮转换场景,点击Exi ...

  5. 【Unity】第三人称射击游戏开发过程之开火设计(TPS.S.P2)

    [Unity]第三人称射击游戏开发过程之开火设计(TPS.S.P2) 枪械的开火 开火流程 开火前的准备 实体子弹的准备 开火逻辑 这一章我们来设计基础的枪械功能. 枪械的开火 我现在选择的武器是41 ...

  6. C#游戏编程之创建一个简单的卷轴射击游戏

    前几天很多朋友要求贴一篇有关C#游戏开发的实例.本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使 ...

  7. Unity 简单易用的插件汇总

    Unity 简单易用的插件汇总 2dToolKit,是一款2D开发组件,它具有很强的灵活性,可以让开发者在Unity中进行2D开发 PlayerMaker,是一个可视化脚本工具,开发者可以使用它很快的 ...

  8. java第一人称射击_[转] Unity实践 --- 第一人称射击游戏_

    一. 环境 地图资源,包含了全地图以及灯光.天空盒子. 扩展部分. 不可穿透的部分需要在bake时设置为static. 二. 设置 1. 相机 1> 主相机 挂载控制视角的c#组件. tag为m ...

  9. android实现带纹理的运动轨迹,基于SceneForm实现子弹射击(绘制子弹运行轨迹)...

    基于 SceneForm 实现的子弹射击(绘制子弹运行轨迹) Sceneform 框架很强大,不了解 Sceneform 的时候,觉得要想做 3D 场景需要会 OpenGL,而 OpenGL 的学习曲 ...

最新文章

  1. Android开源项目
  2. oracle中各种函数,oracle中常用函数大全
  3. 装载向导_麦德美爱法:异构集成时代的高阶封装载板金属化工艺
  4. Java黑皮书课后题第10章:*10.5(显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子
  5. Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml
  6. 【终结版】C#常用函数和方法集汇总
  7. php 时间错误,PHP xdebug调试trace记录时间错误
  8. 关于Jquery中animate可以操作css样式属性总结
  9. (5)verilog语言编写呼吸灯
  10. sql 执行 delete 的时候,结合子查询 exists ,怎样支持别名呢?
  11. 二年级孩子适合学C语言吗,小孩子适合学习编程吗?孩童时期对变成的接受程度有多少呢?...
  12. Spring Initializr文档翻译及源码解读
  13. dlibdotnet 人脸相似度源代码_HAAR与DLib的实时人脸检测之实现与对比
  14. LIN总线、CAN总线、FlexRay总线和MOST总线---汽车四大总线
  15. BladeX框架源码分析--00、包结构
  16. AutoCAD2014下载和安装教程(官方中文完整版)
  17. 快学Scala 学习笔记-1: (第一章到第三章)
  18. 强密码生成器的设计与实现
  19. 【spring 的 init and destory 方法】
  20. 使用ssh对服务器进行登录

热门文章

  1. B2B电子竞价有什么好处?
  2. 教师计算机培训汇报ppt,教师计算机培训(教师).ppt
  3. SpingBoot中创建动态和静态定时任务
  4. 软件联调测试报告范例,系统联调测试的报告(视频会议).doc
  5. hdu 5107 线段树+离散化+归并排序+极角排序
  6. MyEclise2016安装activiti插件
  7. 解读ChatGPT背后的技术重点:RLHF、IFT、CoT、红蓝对抗
  8. 实训双绞线制作心得体会
  9. 钢哥的MBA备考心得 - 献给同样努力的你
  10. 软件项目计划管理:三级计划管理体系