您现在的位置是:主页 > news > 新疆网站备案怎么办理/源码网

新疆网站备案怎么办理/源码网

admin2025/5/10 19:34:59news

简介新疆网站备案怎么办理,源码网,个人做的好的淘宝客网站,金华网站建设公司哪个好三、子弹的制作 我们在上一节解决了坦克移动的问题,这一节我们学习子弹的制作。 其他实体一样,我们从我们的素材中找到子弹样式的图片,拖入场景,调整大小比例为3:3:3,并且重命名为Bullet&…

新疆网站备案怎么办理,源码网,个人做的好的淘宝客网站,金华网站建设公司哪个好三、子弹的制作 我们在上一节解决了坦克移动的问题,这一节我们学习子弹的制作。 其他实体一样,我们从我们的素材中找到子弹样式的图片,拖入场景,调整大小比例为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;}
}

效果是这个样子:(图是静止的,凑合着看吧,啊哈哈哈哈)

 然后我们给子弹添加一个触发器:

然后给子弹添加一个刚体:


转载请注明出处