用立方体和圆柱体搭建完坦克的外观,接下来我们主要实现炮筒的上下移动、炮弹的发射和炮弹的运动。

坦克模型

  • 可调节的炮筒
  • 炮弹发射点
  • 炮弹的抛物线运动

可调节的炮筒

  功能目标:鼠标单击上下移动以控制炮筒的上下移动。
  其实本质上就是实现一个物体的旋转,但是问题在于,旋转的轴心。选中炮筒,我们可以看到,它旋转的轴心就是中心,但是炮筒的旋转肯定是要以圆柱体的下端点为轴心。为了解决这个问题,增加一个空物体(Cylinder_father),位置在炮筒圆柱体的下端点(即炮筒目标的旋转轴心),并且把圆柱体炮筒放在其下面,使二者成为父子关系,这样也就可以间接的改变物体旋转的轴心。

  在Cylinder_father上面挂载代码控制物体的旋转,以此间接的控制炮筒的上下移动。

public class Tank_rotate : MonoBehaviour
{private float offsetY = 0;public float rotatespeed = 6f;//public GameObject firepoint;// Update is called once per framevoid Update(){//Debug.Log(transform.rotation.eulerAngles.z);//炮台的旋转if (Input.GetMouseButton(0))//鼠标单击{offsetY = Input.GetAxis("Mouse Y");//鼠标的移动向量//Debug.Log(offsetY);if (transform.rotation.eulerAngles.z > 283 && transform.rotation.eulerAngles.z < 324){transform.Rotate(new Vector3(0, 0, offsetY ) * rotatespeed, Space.Self);//firepoint.transform.Translate(new Vector3(0, -offsetX, offsetY) * rotatespeed, Space.World);}else if (transform.rotation.eulerAngles.z <= 283){if(offsetY > 0){transform.Rotate(new Vector3(0, 0, offsetY) * rotatespeed, Space.Self);}}else{if(offsetY < 0){transform.Rotate(new Vector3(0, 0, offsetY) * rotatespeed, Space.Self);}}}}
}

炮弹发射点

  功能目标:按下攻击键,炮弹要从炮筒的上端点发射出去。
  需要用一个物体标记发射点的位置,更重要的是,炮弹发射点的位置一定要跟随炮筒的移动而移动。因此,新增一个空物体表示发射点(firepoint),并且将发射点移到炮筒下面,形成父子关系
  在firepoint上面挂载代码,实现发射炮弹的功能。按下J键,在发射点的位置实例化生成一个预制体炮弹。

public class Shoot : MonoBehaviour
{private Transform firepoint;//发射地点public GameObject s;private Rigidbody shell;//炮弹private float nextfire = 1f;public float firerate = 2f;// Start is called before the first frame updatevoid Start(){firepoint = gameObject.GetComponent<Transform>();//发射点位置shell = s.GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){//点击左键并且时间已经大于发射时间if (Input.GetKeyDown(KeyCode.J)&&Time.time>nextfire )//攻击键——键盘J{nextfire = Time.time + firerate;//实例化炮弹Rigidbody clone;clone = (Rigidbody)Instantiate(shell, firepoint.position, shell.transform.rotation);}}
}

炮弹的抛物线运动

  目标功能:炮弹发射后要按照抛物线的轨迹运动。
  这里其实就是一个简单的斜抛运动,关键点就在于将速度分解到竖直方向(Y轴)和水平方向(Z轴),然后竖直方向上模拟匀加速运动,水平方向上是匀速运动。速度的分解也很简单,利用三角函数就可以实现。注意:Unity中的三角函数必须要转化成为弧度制。
  在预制体炮弹上挂载代码,实现抛物线运动。

public class SheelMove : MonoBehaviour
{private Transform Cylinder_father;private float angle = 0;public float speed = 10f;private float speedY = 0;private float speedZ = 0;public float g = 1f;private bool flag = true;void Start(){Cylinder_father = GameObject.Find("Cylinder_father").transform;angle = Cylinder_father.eulerAngles.z-360;//炮筒的角度也即速度分解的角度speedY = (-1)*speed * Mathf.Cos((-1)*angle * Mathf.PI / 180);//弧度制转换speedZ = speed * Mathf.Sin(angle * Mathf.PI / 180);//弧度制转换}// Update is called once per framevoid Update(){if (speedY>0&&flag){speedY -= g * Time.deltaTime;//竖直方向上模拟匀加速运动transform.Translate(0,speedY*Time.deltaTime, speedZ * Time.deltaTime);}else{flag = false;speedY += g * Time.deltaTime;//竖直方向上模拟匀加速运动transform.Translate(0, -speedY * Time.deltaTime, speedZ * Time.deltaTime);}if(this.transform.position.y<0)//如果炮弹运动到地面以下,毁灭{Destroy(this.gameObject);}}
}

【Unity】坦克模型相关推荐

  1. unity坦克大战(一)

    前面简单的 介绍了unity的一些功能和方法,从现在开始,我们就以一个游戏实例(坦克大战)来讲解unity游戏开发,因为我之前也是看别的教程学习的所以所以可能和别人做法的一样,现在我是一边做一边写,在 ...

  2. Unity 3D模型展示框架篇之项目整理

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 1. ...

  3. Unity 3D模型展示框架篇之自由观察(Cinemachine)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 在U ...

  4. Unity 3D模型展示之webGL平台展现

    在之前的项目基础上我们已经打包后在PC端进行展示了.这篇文章主要介绍在切换到webGL上时效果展示不出来需要进行调整,特此记录一下. 1.平台切换 选择WebGL平台切换,没有的可以进行安装,安装之后 ...

  5. unity下载模型到本地并加载

    目录 1.目的 2.参考 2.1 Unity3D 动态加载本地/网络GLB模型 2.2 unity下载模型到本地并加载 2.3 插件:TriLib2.0 3.注意 4.操作 4.1 3dmax简单的制 ...

  6. unity FBX模型导出系统源码WRP FBX Exporter下载

    unity FBX模型导出系统源码WRP FBX Exporter Requires Unity 5.0.4 or  higher. Fast and easy way to export FBX f ...

  7. unity木船模型,古代帆船模型,古船

    unity木船模型 模型如下图所示:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/64876331

  8. Unity导出模型为Obj文件

    Unity导出模型为Obj文件 资源链接 下载导入 代码纪要 使用方式 参考链接 资源链接 原插件代码中只有MeshFilter的Obj导出代码:由于项目需求,需要将SkinnedMeshRender ...

  9. Unity 3D模型展示框架篇之框架运用

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程.增加了Asset Bundle+ILRuntime热更新技术流程. 效果 ...

最新文章

  1. 2.1/2.2 系统目录结构 2.3 ls命令 2.4 文件类型 2.5 alias命令
  2. javascript系列之执行上下文
  3. Jquery事件、冒泡、委托与节点
  4. Python 小白从零开始 PyQt5 项目实战(4)基本控件
  5. 大众流行编程语言有哪些 该选择哪一个来入门
  6. 1.7 编程基础之字符串 31 字符串p型编码 python
  7. 小程序 - 参考数据 - ASC字符码表和常用的中文字符编码表
  8. 一键换ip命令_软网推荐:高效命令行备份更简单
  9. [C#]方法示例:判断是否闰年
  10. 多线程CountDownLatch和Join
  11. 数据库得事务控制详解,什么是事务回滚详解,通俗易懂
  12. 2016年中国OTT盒子行业市场现状及发展前景分析
  13. sql convert 转换时间格式
  14. 苹果Mac网络视频下载工具推荐:Downie 4
  15. oracle 0604,Oracle建立配置环境
  16. python中@property的作用
  17. c语言程序小猪佩奇,使用canvas 代码画小猪佩奇(示例代码)
  18. 暴雪修改手机500服务器错误,改造:500内部服务器错误
  19. 失物招领网站毕业设计,失物招领网站设计与实现,失物招领论文源码设计分析毕设作品参考
  20. 诚之和:没了“全网最低价”,薇娅李佳琦靠什么支撑背后公司上市?

热门文章

  1. 角蜂鸟AI视觉套件1:开箱和开发环境搭建
  2. ArcGIS API for JavaScript官网解析
  3. 京东2016笔试题【分苹果】-简单的公式法
  4. ss 命令 使用说明
  5. 转载 uboot LCD 进度条 为OMAP L138增加uboot启动画面
  6. linux 精简桌面,ubuntu 安装精简桌面
  7. 逆战计算机按键,逆战按哪个键语音说话
  8. java asq_Java并发:AQS原理
  9. 智能围网,智慧围栏,智能围栏,智能护栏,攀破报警围栏——0误报,无漏报
  10. [BZOJ3677/UOJ#105][APIO2014]Beads and wires 连珠线(树形dp+换根)