unity3d游戏开发之发射子弹的源代码

2015年02月08日 14:50 0 点赞 0 评论 更新于 2017-05-09 17:30

今天我们将探讨如何在Unity3D中实现发射子弹的功能,并且让子弹能够打坏墙,同时使发射出去的子弹在两秒后消失。

发射子弹基础代码实现

以下是详细的代码:

using UnityEngine;
using System.Collections;

public class Fire : MonoBehaviour {
// 定义移动速度
float speed = 5.0f;
// 用于存储要实例化的子弹对象
public GameObject newObject;
// 发射间隔时间
float firetima = 0.2f;
// 下一次可以发射的时间
float nexttime = 0.0f;

void Update() {
// 计算旋转角度
float a = -25 * Time.deltaTime;
// 获取水平方向输入并计算移动距离
float x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
// 获取垂直方向输入并计算移动距离
float z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
// 移动当前对象
transform.Translate(x, 0, z);

// 当按下Z键时,对象绕自身Y轴旋转
if (Input.GetKey(KeyCode.Z)) {
transform.Rotate(Vector3.up * a, Space.Self);
}

// 当按下X键时,对象绕自身Y轴反向旋转
if (Input.GetKey(KeyCode.X)) {
transform.Rotate(Vector3.down * a, Space.Self);
}

// 当按下Fire1按钮(通常为鼠标左键)且达到发射间隔时间时
if (Input.GetButton("Fire1") && nexttime < Time.time) {
// 更新下一次可以发射的时间
nexttime = firetima + Time.time;
// 实例化子弹对象
GameObject go = Instantiate(newObject, transform.position, transform.rotation) as GameObject;
// 给子弹添加向前的力
go.GetComponent<Rigidbody>().AddForce(0, 0, 1231);
// 两秒后销毁子弹对象
Destroy(go, 2.0f);
}
}
}

代码解释

  1. 变量定义
    • speed:控制对象的移动速度。
    • newObject:存储要实例化的子弹对象。
    • firetima:定义子弹的发射间隔时间。
    • nexttime:记录下一次可以发射子弹的时间。
  2. Update方法
    • 每帧都会调用该方法,处理对象的移动、旋转和子弹发射逻辑。
    • 通过Input.GetAxis获取用户的输入,计算移动距离并使用transform.Translate进行移动。
    • 根据用户按下的ZX键,使用transform.Rotate进行旋转。
    • 当按下Fire1按钮且达到发射间隔时间时,实例化子弹对象,添加力并在两秒后销毁。

太空大战小游戏实现思路及代码

接下来,我们要实现一个太空大战的小游戏,具体实现效果如下:

  1. 我方点击鼠标左键或按空格键发射子弹,我方子弹连续发射。
  2. 敌方飞机和子弹自动运行,子弹每隔0.5秒向我方发射一颗。
  3. 我方飞机移动时,敌方子弹跟随我方飞机移动。

目前实现第一步的代码部分

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {
// 定义移动速度
float speed = -50.0f;
// 用于存储要实例化的我方子弹对象
public GameObject Myplayer;

void Update() {
// 获取时间增量
float a = Time.deltaTime;
// 获取水平方向输入并计算移动距离
float x = Input.GetAxis("Horizontal") * Time.deltaTime * -speed;
// 获取垂直方向输入并计算移动距离
float z = Input.GetAxis("Vertical") * Time.deltaTime * -speed;
// 移动当前对象
transform.Translate(x, 0, z);

// 当按下Fire1按钮(通常为鼠标左键)时
if (Input.GetButton("Fire1")) {
// 实例化我方子弹对象
GameObject go = Instantiate(Myplayer, transform.position, transform.rotation) as GameObject;
// 给子弹添加向前的力
go.GetComponent<Rigidbody>().AddForce(0, 0, 1231);
// 两秒后销毁子弹对象
Destroy(go, 2.0f);
}
}
}

代码解释

  1. 变量定义
    • speed:控制我方飞机的移动速度。
    • Myplayer:存储要实例化的我方子弹对象。
  2. Update方法
    • 每帧都会调用该方法,处理我方飞机的移动和子弹发射逻辑。
    • 通过Input.GetAxis获取用户的输入,计算移动距离并使用transform.Translate进行移动。
    • 当按下Fire1按钮时,实例化我方子弹对象,添加力并在两秒后销毁。

使用说明

要使用上述代码,需要将Player脚本挂载到Player对象上,同时记得给子弹对象添加刚体组件,并将预设体拖到相应的变量位置。这样就可以实现我方飞机的移动和子弹发射功能了。后续我们将继续完善太空大战小游戏的其他功能。

作者信息

boke

boke

共发布了 3994 篇文章