您现在的位置是:主页 > news > 新疆网站备案怎么办理/源码网
新疆网站备案怎么办理/源码网
admin2025/5/10 19:34:59【news】
简介新疆网站备案怎么办理,源码网,个人做的好的淘宝客网站,金华网站建设公司哪个好三、子弹的制作 我们在上一节解决了坦克移动的问题,这一节我们学习子弹的制作。 其他实体一样,我们从我们的素材中找到子弹样式的图片,拖入场景,调整大小比例为3:3:3,并且重命名为Bullet&…
三、子弹的制作
我们在上一节解决了坦克移动的问题,这一节我们学习子弹的制作。
其他实体一样,我们从我们的素材中找到子弹样式的图片,拖入场景,调整大小比例为3:3:3,并且重命名为Bullet,添加预制体:
子弹已经拖入场景了,现在我们来写一下子弹攻击的方法!
我们先在类的最上面定义一个子弹的类型:
public GameObject bulletPrefab; //bullet
然后加入我们的攻击方法:监听键盘上是否按了空格键,如果按下了空格键,就实例化一个子弹。
private void attack(){if (Input.GetKeyDown (KeyCode.Space)){Instantiate (bulletPrefab, transform.position, transform.rotation);}
}
接下来等待编译,编译完成之后,打卡界面,将预制体bullet拖过去就ok了!
但是这时候却发现子弹很别扭,无论我们的坦克头朝向哪边,子弹头都是朝向右边的。现在我们想办法让子弹根据车头朝向自己旋转。
我们可以很快的得出:子弹当前的角度=当前坦克的角度+子弹应该旋转的角度!所以我们改一下我们攻击方法的代码:
private Vector3 bulletEuluerAngels;
private void attack(){if (Input.GetKeyDown (KeyCode.Space)){Instantiate (bulletPrefab, transform.position, Quaternion.Euler(transform.eulerAngles+bulletEuluerAngels));}
}
然后在坦克的移动方法里实时更新bulletEuluerAngels,方法如下:
private void Move()
{//right and leftfloat rl = Input.GetAxisRaw("Horizontal");transform.Translate(Vector3.right * rl * moveSpeed * Time.fixedDeltaTime, Space.World);if (rl < 0){sr.sprite = tankSprite[3];bullectEulerAngles = new Vector3(0, 0, 90);}else if (rl > 0){sr.sprite = tankSprite[1];bullectEulerAngles = new Vector3(0, 0, -90);}if (rl != 0)return;//up and downfloat ud = Input.GetAxisRaw("Vertical");transform.Translate(Vector3.up * ud * moveSpeed * Time.fixedDeltaTime, Space.World);if (ud < 0){sr.sprite = tankSprite[2];bullectEulerAngles = new Vector3(0, 0, -180);}else if (ud > 0){sr.sprite = tankSprite[0];bullectEulerAngles = new Vector3(0, 0, 0);}
}
现在已经解决了子弹的朝向问题,现在我们要让子弹按照目前的方向动起来!
我们给预制体bullet加一个C#脚本,设置一个子弹移动速度,然后移动就完事儿了,看代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Bullet : MonoBehaviour {public float BulletMoveSpeed=10;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {transform.Translate (transform.up * BulletMoveSpeed * Time.deltaTime, Space.World);}
}
等待编译之后,就可以看到我们的子弹沿着自身的方向动了,现在我们给子弹加入CD。
加入CD的方法很简单,只需要加个计时器就可以了:
public float temp=0;
private void FixedUpdate()
{Move ();if (temp >= 0.4f) {Attack ();} else {temp += Time.fixedDeltaTime;}
}//Tank attack
private void Attack()
{if (Input.GetKeyDown(KeyCode.Space)){Instantiate(bullectPrefab, transform.position,Quaternion.Euler(transform.eulerAngles+bullectEulerAngles));temp = 0;}
}
效果是这个样子:(图是静止的,凑合着看吧,啊哈哈哈哈)
然后我们给子弹添加一个触发器:
然后给子弹添加一个刚体:
转载请注明出处