用代码实现WASD控制移动并发射子弹的坦克
时间: 2024-10-14 20:04:00 浏览: 72
在Unity中使用C#实现WASD控制坦克移动和发射子弹的基本步骤如下:
```csharp
using UnityEngine;
public class TankController : MonoBehaviour
{
public float speed = 5f;
public GameObject bulletPrefab; // 子弹预制体
private Rigidbody rb; // 坦克的Rigidbody
private Transform tankTransform; // 坦克变换
private bool isShooting = false;
void Start()
{
rb = GetComponent<Rigidbody>();
tankTransform = transform;
}
void Update()
{
// WASD 控制移动
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontal, 0, vertical) * speed * Time.deltaTime;
rb.AddForce(movement, ForceMode.VelocityChange);
// 发射子弹 (按下空格)
if (Input.GetKeyDown(KeyCode.Space) && !isShooting)
{
ShootBullet();
isShooting = true;
}
}
voidShootBullet()
{
// 创建子弹实例并赋予初始速度
GameObject bullet = Instantiate(bulletPrefab, tankTransform.position, Quaternion.LookRotation(Vector3.forward));
Rigidbody bulletRB = bullet.GetComponent<Rigidbody>();
bulletRB.velocity = tankTransform.forward * 10f; // 调整子弹速度
// 添加碰撞检测和处理
RaycastHit hit;
if (Physics.Raycast(tankTransform.position, tankTransform.forward, out hit))
{
Debug.Log("Hit block at position " + hit.point);
// 检测到方块后,这里可以处理得分或破坏方块
}
else
{
Debug.Log("Missed.");
}
}
void OnCollisionEnter(Collision collision)
{
// 如果坦克碰到障碍物,停止移动
isShooting = false;
}
}
```
在这个例子中,`Start()` 函数初始化坦克的Rigidbody和变换,`Update()` 更新坦克的位置并对空格按键进行监听。`ShootBullet()` 方法负责创建和发射子弹,以及简单的碰撞检测。`OnCollisionEnter(Collision collision)` 会在坦克与其他对象发生碰撞时停止移动并防止连续射击。
别忘了在坦克的组件上挂载这个脚本,并将`bulletPrefab`属性设置为你游戏中子弹的预制体。
阅读全文