Unity学习小练习-发射球体破坏墙面
首先创建一个Plane(平面),点击GameObject → 3D Object → Plane
属性设置如图所示:

再创建一个Cube(立方体),点击GameObject → 3D Object → Cube
复制立方体搭建出一面墙,并添加上Rigidbody属性,将其质量修改为4以免太容易被破坏
.png)
调整摄像机位置与角度如图所示:
.png)
创建一个名为Move的C#脚本文件编辑如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 移动控制器类
/// 负责处理物体的三维移动
/// 通过WASD键控制移动:W升高,S下降,A后退,D前进
/// </summary>
public class move : MonoBehaviour
{
/// <summary>
/// 物体的Transform组件引用
/// </summary>
private Transform transform;
/// <summary>
/// 移动速度
/// 可以在Inspector面板中调整
/// </summary>
public float moveSpeed = 5f;
/// <summary>
/// 初始化方法
/// 在游戏开始时调用一次
/// 获取物体的Transform组件
/// </summary>
void Start()
{
transform = GetComponent<Transform>();
}
/// <summary>
/// 更新方法
/// 每一帧调用一次
/// 处理玩家输入并控制物体移动
/// </summary>
void Update()
{
// 获取水平轴输入(A/D键或左右方向键)- 控制Z轴移动(前进后退)
float adValue = Input.GetAxis("Horizontal");
// 获取垂直轴输入(W/S键或上下方向键)- 控制Y轴移动(升降)
float wsValue = Input.GetAxis("Vertical");
// 控制物体移动方向
// adValue控制Z轴移动(A后退,D前进),wsValue控制Y轴移动(W升高,S下降)
var moveDirection = new Vector3(0, wsValue, adValue);
// 归一化方向向量,确保斜向移动时速度一致
// 使用Time.deltaTime使移动平滑,不受帧率影响
// Space.World使移动基于世界坐标系
transform.Translate(moveDirection.normalized * moveSpeed * Time.deltaTime, Space.World);
}
}
将脚本挂载到Main Camera(摄像机)上,在Inspector栏中点击Add Component 搜索栏中输入脚本名称即可挂在上去
创建一个Sphere(球体),点击GameObject → 3D Object → Sphere
随后将Hierarchy栏中的球体拖动至Project中的Assets目录下,随后删除球体模型
为其球体模型添加Rigidbody属性,并将其质量设置为20,勾选Use Gravity(重力)如图所示:
.png)
创建一个Create Empty空物体,右击Hierarchy栏中的Main Camera(摄像机)点击Create Empty
重命名为fsq(发射器)
.png)
创建一个名为GunShoot的C#脚本文件编辑如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GunShoot : MonoBehaviour {
public GameObject bulletPrefab; //子弹预制体
void Update () {
Shoot();
}
void Shoot()
{
if (Input.GetMouseButtonDown(0)) //如果按下鼠标左键,生成预制体
{
Instantiate(bulletPrefab, transform.position, transform.rotation); //生成预制体
}
}
}将脚本挂载到fsq(发射器)上,在Inspector栏中点击Add Component 搜索栏中输入脚本名称即可挂在上去
随后将之前创建的Bullet(球体预制体)拖动至fsq中的Inspector栏中的脚本属性中的Bullet Prefab中
.png)
接下来再给球体创建一个名为Bullet的C#脚本文件编辑如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour {
public float speed = 8f; //子弹速度
public float gravity = 0.2f; //重力加速度(进一步减小以减轻下坠效果)
private float verticalVelocity = 1f; //初始垂直速度,帮助子弹射得更远
void Start () {
Destroy(gameObject, 7f); //7s后销毁自身
}
void Update () {
// 计算重力引起的垂直速度变化
verticalVelocity -= gravity * Time.deltaTime;
// 子弹沿Z轴方向移动(向前),同时受重力影响在Y轴上下降
transform.Translate(0, verticalVelocity * Time.deltaTime, speed * Time.deltaTime, Space.Self);
}
}将脚本挂载到Bullet预制体上,在Inspector栏中点击Add Component 搜索栏中输入脚本名称即可挂在上去
最后运行即可使用WASD进行平面移动,左键进行射击。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Vincent Cassano