unity3d游戏开发之发射子弹的源代码
今天我们将探讨如何在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);
}
}
}
代码解释
- 变量定义:
speed:控制对象的移动速度。newObject:存储要实例化的子弹对象。firetima:定义子弹的发射间隔时间。nexttime:记录下一次可以发射子弹的时间。
Update方法:- 每帧都会调用该方法,处理对象的移动、旋转和子弹发射逻辑。
- 通过
Input.GetAxis获取用户的输入,计算移动距离并使用transform.Translate进行移动。 - 根据用户按下的
Z或X键,使用transform.Rotate进行旋转。 - 当按下
Fire1按钮且达到发射间隔时间时,实例化子弹对象,添加力并在两秒后销毁。
太空大战小游戏实现思路及代码
接下来,我们要实现一个太空大战的小游戏,具体实现效果如下:
- 我方点击鼠标左键或按空格键发射子弹,我方子弹连续发射。
- 敌方飞机和子弹自动运行,子弹每隔0.5秒向我方发射一颗。
- 我方飞机移动时,敌方子弹跟随我方飞机移动。
目前实现第一步的代码部分
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);
}
}
}
代码解释
- 变量定义:
speed:控制我方飞机的移动速度。Myplayer:存储要实例化的我方子弹对象。
Update方法:- 每帧都会调用该方法,处理我方飞机的移动和子弹发射逻辑。
- 通过
Input.GetAxis获取用户的输入,计算移动距离并使用transform.Translate进行移动。 - 当按下
Fire1按钮时,实例化我方子弹对象,添加力并在两秒后销毁。
使用说明
要使用上述代码,需要将Player脚本挂载到Player对象上,同时记得给子弹对象添加刚体组件,并将预设体拖到相应的变量位置。这样就可以实现我方飞机的移动和子弹发射功能了。后续我们将继续完善太空大战小游戏的其他功能。