导弹

(由于本鼠鼠是手上没有合适的素材又是美工苦手,就凑合着看吧...)

红色即为导弹,蓝色即为目标

在导弹上挂载钢体组件和碰撞组件

ps:勾选碰撞组件中的is Trigger属性

在目标上挂载碰撞组件

创建C#脚本

代码实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;[RequireComponent(typeof(Rigidbody2D))]
public class Missile : MonoBehaviour
{public Transform target;public float speed=5f;//导弹的飞行速度public float rotateSpeed=200f;//导弹的转弯速度private Rigidbody2D rigidbody2D;private void Start() {rigidbody2D=GetComponent<Rigidbody2D>();}private void FixedUpdate() {//目标相对于导弹的方向向量Vector2 direction = (Vector2)target.position-rigidbody2D.position;direction.Normalize();float rotateAmount=Vector3.Cross(direction,transform.up).z;//导弹的角速度rigidbody2D.angularVelocity=-rotateAmount*rotateSpeed;//导弹的线速度rigidbody2D.velocity=transform.up*speed;}//导弹命中private void OnTriggerEnter2D(Collider2D target) {Destroy(target.gameObject);Destroy(gameObject);}
}

对于导弹来说,当目标不在其左侧就在其右侧

当所需的旋转的角度越大,叉乘得到的结果向量模长越长(可以通过叉乘所得到向量的Z轴)

 Rigidbody2D.angularVelocity:角速度(以度/秒为单位)

rigidbody2D.angularVelocity=-rotateAmount*rotateSpeed;

ps:一定要加负号,否则导弹会被“排斥”,而非跟踪

如图

射击

创建一个炮台

如图所示的双管炮台,蓝色的炮台包括两个子物体,即左右炮管。左右炮管分别包括了一个空物体firePos,用于确定子弹被实例化的位置

创建子弹

为子弹挂载钢体组件和碰撞组件

靶子就沿用上图中的target,但是为其创建一个名为target的新Tag

创建C#脚本,Bullet,Turret,Weapon并挂载至子弹,炮台,两个炮管

代码实现

Weapon

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Weapon : MonoBehaviour
{public Transform firePos;//设置开火位置public GameObject bulletPrefab;//发射的子弹private void Update() {//鼠标左键攻击if(Input.GetMouseButtonDown(0)){Shoot();}}private void Shoot(){//实例化子弹Instantiate(bulletPrefab,firePos.position,firePos.rotation);}
}

Bullet

public class Bullet : MonoBehaviour
{public float speed = 20f;//子弹的速度public Rigidbody2D rb;void Start(){rb.velocity = transform.up*speed;}private void OnTriggerEnter2D(Collider2D target) {//命中后摧毁靶子if(target.tag=="target"){Destroy(target.gameObject);}Destroy(gameObject);}
}

Turret

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Turret : MonoBehaviour
{void Update() {      //鼠标在世界坐标的位置Vector2 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition);//炮台要指向的方向Vector2 aimPos=mousePos-(Vector2)transform.position.normalized;//将物体自身坐标系的x轴朝向aimPostransform.up=aimPos;}
}

附赠一个简单的激光枪

​​​​​创建一个LineRenderer

记得调整LineRenderer中Position的值

创建相应的武器

代码实现

using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class LaserWeapon : MonoBehaviour
{public Transform firePos;public LineRenderer laser;private void Update() {if(Input.GetMouseButtonDown(0)){//启动协程StartCoroutine(Shoot()) ;}}IEnumerator Shoot(){//射线检测RaycastHit2D hit=Physics2D.Raycast(firePos.position,firePos.right,100);if(hit){//射程内有物体(距离<=100)laser.SetPosition(0,firePos.position);laser.SetPosition(1,hit.point);Destroy(hit.collider.gameObject);}else{//射程内没有物体(距离>100)laser.SetPosition(0,firePos.position);laser.SetPosition(1,firePos.position+firePos.right*100);}laser.enabled=true;//激光停留的时间yield return new WaitForSeconds(0.02f);laser.enabled=false;}}

借用上面写好的组件,我们可以完成一个小游戏

玩法是地图上随机生成导弹,玩家要躲避来袭的导弹,同时可以击毁导弹

在背景上挂载名为Missile_Dodge的C#脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Missile_Dodge : MonoBehaviour
{public GameObject Missile;public Transform pos;private float timer=3;//生成时间间隔Vector2 random_pos;void Update() {//每隔3s在随机位置生成导弹if(timer>=3){Generator();timer=0;}else{timer+=Time.deltaTime;}}void Generator(){random_pos.x=Random.Range(-10,10.1f);random_pos.y=Random.Range(-4.5f,4.6f);pos.position=random_pos;Instantiate(Missile,pos.position,pos.rotation);}
}

玩家控制脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MouseFlying : MonoBehaviour
{private float moveSpeed=5f;void Update(){transform.Translate(transform.up*moveSpeed*Time.deltaTime,Space.World);//转向鼠标的位置Vector2 dir=Camera.main.ScreenToWorldPoint(Input.mousePosition)-transform.position;transform.up=dir;}
}

效果图

Unity导弹,射击相关推荐

  1. 将Unity官方射击游戏 Space Shooter 改为实时对战小游戏,使用天梯实时对战服务(NanoLink)

    将Unity官方射击游戏(Space Shooter)改为实时对战小游戏,使用天梯实时对战服务(NanoLink) io 类型游戏如此热门,有没有蠢蠢欲动? 如何让自己的游戏快速实现可实时联机对战? ...

  2. 【日常点滴019】Python制作流浪气球游戏(导弹射击类)

    Python制作流浪气球游戏(导弹射击类) 教学课程代码(分步教学版) 1.构建全局通用代码结构 2.构建气球精灵类 3.构建导弹精灵类 4.碰撞检测 5.构建游戏信息类 (最终完整代码) 教学课程代 ...

  3. Unity空间射击游戏开发教程

    描述 在本课程中,您将学习如何在unity中制作一款太空射击游戏.本课程使用全新的特性和编码实践,并且兼容所有较新版本的unity. 了解如何使用世界领先的免费游戏开发工具Unity创建太空射击游戏. ...

  4. unity太空射击源码_引擎入门 | 创建双杆射击游戏(入门 2)

    点击上方"蓝字"关注我们吧! 本期我们继续为大家进行双杆射击游戏的后续教程 学习内容 3.整理资产 4.导入资产 5.安装 Blender 6.导入包 文章末尾可免费获取教程源代码 ...

  5. 对 Unity 太空射击游戏的实践

    写在前面 # 本次 Space Shooter 实践通过实现以下功能达到加深对 U3D 游戏开发的认知. 键盘控制飞船移动; 发射子弹设计目标; 随机生成大量障碍物; 计分; 实现游戏对象的生命周期管 ...

  6. unity 开发射击打靶vr_暑假VR集训+unity自制射击游戏+李明

    Unity完全自制游戏<射击>项目记录 不知不觉利用暑假的生活来学校参加VR培训已经有三个星期了,回顾这么多日子既忙碌又充实的生活.制作时间为期三周,老师为了更好的磨练我们,给我们布置了这 ...

  7. unity 开发射击打靶vr_【好玩微信小游戏大全】香肠派对:点开既玩的射击小游戏!正版授权...

    沐沐带你发现好游戏! 沐沐今天推荐这款游戏叫<香肠派对>, 你以为是这款吃鸡的APP游戏吗? 大错特错! 沐沐我怎么会这么俗呢? 要推荐就推荐你没玩过的! 今天推荐这款<香肠派对&g ...

  8. Unity 子弹射击算法

    主要参考链接中的博主 其实最为关键的就是LookAt这个方法,让子弹看向屏幕中心点检测到的位置 参考链接地址 https://assetstore.unity.com/packages/essenti ...

  9. [游戏开发][Unity] TPS射击游戏相机实现

    TPS射击游戏要实现的功能有: 滑屏控制 角色的横向旋转 相机的纵向旋转(区别于横向旋转) 相机贴墙拉近(不能穿墙) 相机观察旋转(角色不转相机转用于观察四周) 开火按钮和旋转屏幕功能共存(边开枪边转 ...

  10. unity 开发射击打靶vr_自制Unity3D VR射击游戏

    未经作者授权,禁止转载 课程的一个作业,第一次做vr游戏就放上来留个纪念,整理好会放上源代码和exe封装后的版本. 这个游戏可以不需要vr设备就能玩,已经内部设置了VR模拟器. 下面是readme文件 ...

最新文章

  1. 支付宝支付 第十二集:狂神、飞哥支付宝支付配置代码(免费资源,拿走不谢)
  2. PHP菜刀工具WebHandler
  3. wk一sm5时间温度控制器_新能源汽车电机控制器温度计算及其模型—DC电容篇
  4. 如何实现js调用java函数
  5. 博客属性10个非常不错的CSS技巧
  6. ultilize什么意思_ultilize是什么意思
  7. 今日上新:两个图像领域的现金奖励实时竞赛
  8. 能留住女友的,都是王者
  9. 社区拼团赛道的突然火爆,究竟是受何因素影响?
  10. 漏型和源型区分,NPN和PNP区别
  11. 大学计算机课要怎么学,大学计算机课学结
  12. Python新手-记一次股权穿透层级打分(森林实现)
  13. java 利用工具包Geotools实现不同坐标系之间坐标转换
  14. 微信分享 微信对图片文字大小的限制 代码如下
  15. 1.Java基础_Java入门--001
  16. 下三角输出和上三角输出
  17. ToolsOhの密码生成器(KT:java、zxcvbn、passay)
  18. 静悄悄的双11,有新意,有温度:国货潮与公益热正在改变商业
  19. 前端扑街仔的nginx配置
  20. 轨迹聚类光谱分析_光谱聚类

热门文章

  1. 批处理学习(一)——MS-DOS命令
  2. 关系型数据库基础概念:MySQL系列之开篇
  3. linux tac命令_Linux tac命令入门
  4. 用Python编程语言来实现阿姆斯特朗数的检查
  5. Android Studio实现记单词App,背完四六级一次过~
  6. python算积分蒙特卡罗_python编程通过蒙特卡洛法计算定积分详解
  7. to_param()函数和parameterize()函数
  8. elastic APM 简单使用
  9. Pyecharts上的颜色设置
  10. 实变函数(4)--Lebesgue积分