功能:坦克可以前后移动、左右旋转、打炮
动态演示效果
静态展示图片
核心代码
1、Bullet.cs挂载在Bullet预设体上
using UnityEngine;
public class Bullet : MonoBehaviour
{
// 移动方向
private Vector3 moveDir;
// 移动速度
private float moveSpeed = 2;
/// <summary>
/// 设置子弹移动方向
/// </summary>
/// <param name="bulletMoveDir">子弹移动方向</param>
public void setMoveDir(Vector3 bulletMoveDir)
{
moveDir = bulletMoveDir;
}
private void Awake()
{
// 设置子弹生成后3秒销毁
Destroy(this.gameObject, 3);
}
// Update is called once per frame
void Update()
{
// 更新子弹位置
transform.position += moveDir * Time.deltaTime * moveSpeed;
}
}
2、Tank.cs挂载在Tank空对象上
using UnityEngine;
public class Tank : MonoBehaviour
{
[Header("炮弹的预设体")]
public GameObject bulletPrefab;
// 移动速度
private float moveSpeed = 1;
// 旋转速度
private float rotateSpeed = 30;
// 开火点
Transform firePoint;
private void Awake()
{
// FirePos为空对象,提供子弹的发射位置信息
firePoint = transform.Find("FirePos");
}
// Update is called once per frame
void Update()
{
// 左右旋转
float hValue = Input.GetAxis("Horizontal");
transform.eulerAngles += transform.up * hValue * Time.deltaTime * rotateSpeed;
// 前后移动
float vValue = Input.GetAxis("Vertical");
transform.position += transform.forward * vValue * Time.deltaTime * moveSpeed;
// 开火
if (Input.GetKeyDown(KeyCode.J))
{
// 在开火点生成子弹
GameObject bullet = Instantiate(bulletPrefab, firePoint.position, Quaternion.identity);
// 设置子弹的移动方向为坦克的前方(在Unity场景中调整FirePos的transform与坦克的transform一致)
bullet.GetComponent<Bullet>().setMoveDir(transform.forward);
}
}
}