首页 > 代码库 > unity demo之坦克攻击
unity demo之坦克攻击
先展示一下成果吧,节后第一天上班简直困爆了,所以一定要动下脑子搞点事情。
分析:
1.涉及到的游戏对象有:坦克,摄像机,场景素材(包含灯光),子弹
2.坦克具有的功能:移动,旋转,发射子弹,记录生命值或血量
3.摄像机具有功能:跟随目标拍摄
4.子弹具有的功能:移动,并且是在常见出来的时候就要移动,碰撞后要销毁
OK,先分析到这里,其他就边做边看吧。
1.先把素材导进来,素材.unitypackage下载地址链接: https://pan.baidu.com/s/1qXH4EXu 密码: h6gt
2.添加坦克,找到模型拖到场景里面就行了。
坦克的两个轮跑起来会有特效,找到拖到坦克下面,调整好位置,坦克的轮后面。
指定坦克开火的位置,创建一个空GameObject,改名FirePosition,初学者还是要养成好的习惯,认真对待每一个取名,规范起来比较好。将FirePosition移动到发射子弹的炮眼,微调一下旋转。
下面开始挂脚本了,第一个脚本是控制坦克的前后移动,TankMovement.cs
using UnityEngine; public class TankMovement : MonoBehaviour { public float speed = 5f; public float angularSpeed = 30; private Rigidbody rigidbody; public int number = 2; // Use this for initialization void Start () { rigidbody = GetComponent<Rigidbody> (); } // Update is called once per frame void FixedUpdate () { //前后移动 float v = Input.GetAxis("Verticalplay" + number ); rigidbody.velocity = transform.forward * speed * v; //控制旋转 float h = Input.GetAxis("Horizontalplay" + number); rigidbody.angularVelocity = transform.up * angularSpeed * h; } }
通过刚体组件让坦克移动旋转,number是为了后面添加第二个坦克,
用什么键控制可以自己设定。
第二个脚本是控制坦克发射子弹,TankAttack.cs
using UnityEngine; public class TankAttack : MonoBehaviour { private Transform firePosition; public GameObject shellPrefab; public KeyCode fireKey = KeyCode.Space; public float shellSpeed = 20; public AudioClip shotAudio; // Use this for initialization void Start () { firePosition = transform.Find("FirePosition"); } // Update is called once per frame void Update () { if (Input.GetKeyDown(fireKey)) { //音效 AudioSource.PlayClipAtPoint(shotAudio,firePosition.position); //生成子弹对象 GameObject go = GameObject.Instantiate(shellPrefab, firePosition.position, firePosition.rotation); //让子弹移动 go.GetComponent<Rigidbody>().velocity = go.transform.forward * shellSpeed; } } }
音效那一行先注释掉吧,音效放后面搞。接下来做shellPrefab
找到子弹预制体,检查该有的组件是否有缺失,
挂脚本Shell.cs,控制子弹碰撞后的爆炸特效,
using UnityEngine; public class Shell : MonoBehaviour { public GameObject shellExplosionPrefab; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnTriggerEnter(Collider other) { GameObject.Instantiate(shellExplosionPrefab, transform.position, transform.rotation); GameObject.Destroy(gameObject); if (other.tag == "Tank") { other.SendMessage("TakeDamage"); } } }
这个tag要为坦克设置“Tank”,具体方法这里懒得说了。
到这里为止游戏基本功能已经实现了,实在有点疲乏,后面以后再补充。
unity demo之坦克攻击
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。