在上一节,我们解决了一个小bug,使得小鸟不会一次产生多个。这种方法是通过操纵游戏对象来使得游戏对象具有初速度,对其他物体进行击打。 由此可以联想到我们是否可以发射一个小鸟来形成炮弹状效果,击打物体。对于小鸟这个预制体,我们每隔一定时间,发射一次小鸟。让小鸟以抛物线状发射出去。需要给预制体的小鸟增加一个初速度。我们试着来实现它。

定义一个脚本ThrowBirds.cs using System.Collections; using System.Collections.Generic; using UnityEngine;

public class ThrowBirds : MonoBehaviour { public Transform pointbird;// public float Power=150; public float g = -10;//重力加速度 // Use this for initialization Vector2 speed;//初速度向量 Vector2 Gravity;//重力向量 void Start() { // transform.position = pointbird.position; //给一个初速度 speed = (new Vector2(1,1))*Power; //重力初始速度为0 Gravity = Vector2.zero; } float dTime = 0; void FixedUpdate() { //v=at Gravity.y = g * (dTime += Time.fixedDeltaTime); //模拟位移 transform.Translate(speed * Time.fixedDeltaTime); transform.Translate(Gravity * Time.fixedDeltaTime); }

} 这样我们能够以抛物线的形式不断发射小鸟。 当给小鸟不同的初速度时,小鸟发射的距离不一样。或者调节初始角度 speed = (new Vector2(2,1))*Power;

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class ThrowBirds : MonoBehaviour { public Transform pointbird;//小鸟的初始位置 public float Power=150; public float g = -10;//重力加速度 // Use this for initialization Vector2 speed;//初速度向量 Vector2 Gravity;//重力向量 void Start() { //将物体置于A点 transform.position = pointbird.position; //通过一个式子计算初速度 speed = (new Vector2(2,1))*Power; //重力初始速度为0 Gravity = Vector2.zero; } float dTime = 0; void FixedUpdate() { //v=at Gravity.y = g * (dTime += Time.fixedDeltaTime); //模拟位移 transform.Translate(speed * Time.fixedDeltaTime); transform.Translate(Gravity * Time.fixedDeltaTime); }

}

当然,我们也可以控制发射小鸟的频次。

现在我们实现了不断发射小鸟。但是,小鸟没有自动发现目标并击中目标,我们可以为小鸟增加识别功能,进行对目标精准打击。后续我们进行实现。

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。