第一视角射击游戏

本文详细介绍了如何使用Unity3D开发一款第一视角射击游戏,包括新建关卡、创建玩家、僵尸、UI系统、射击机制以及地图设置等步骤,通过一系列脚本和物理设置实现游戏的基本功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。新建关卡

File,Save Scene,
FileNew Scene
FileSave Scene as... Level02.unity

1.建立场景

从Assets中拖放场景模型到Hierarchy中,

2.为游戏体添加多边形碰撞体

在Hierarchy中选择3个构造游戏空间的游戏体,
ComponentPhysicsMesh Collider
操作后,游戏空间游戏体可以用于物理碰撞检测。

3.创建灯光

现在游戏空间内光线不好,调整一下,

1)创建电光源

根据需求,创建若干。可使用Ctrl + D 快速复制,

2)调整亮度

二。创建玩家

1.创建空对象

GameObject,Create Empty,
Hierarchy中将之命名为FPSPlayer

2.设置标签

选择FPSPlayer,Inspector,Tag,修改为“Player”,

3.添加角色控制器

FPSPlayer仍旧被选中,
ComponentPhysicsCharacter Controller
执行这一步后,玩家在场景中移动时,会和其它游戏体发生物理交互。

4.添加刚体属性

仍旧选中玩家,
ComponentPhysicsRigidbody

5.控制脚本

首先,创建FPSPlayer.cs脚本,

using UnityEngine;
using System.Collections;

[AddComponentMenu("MyGame/FPSPlayer")]
public class FPSPlayer : MonoBehaviour {

    private CharacterController m_ch;   // 玩家角色控制器
    public Transform m_transform;       // 玩家实例
    private float m_movSpeed = 3.0f;    // 玩家移动基速
    public int m_life = 5;              // 生命值

    private float m_gravity = 2.0f;     // 重力

    private Transform m_camTransform;   // 摄像机
    private Vector3 m_camRot;           // 摄像机姿势-旋转角度
    private float m_camHeight = 4.5f;   // 摄像机高度-玩家的眼睛

    void Start() {

        m_transform = this.transform;                       // 本角色实例
        m_ch = this.GetComponent<CharacterController>();    // 本角色的控制器

        m_camTransform = Camera.main.transform;// 获取摄像机

        /** 设置摄像机初始位置 **/
        Vector3 pos = m_transform.position; // 玩家位置
        pos.y += m_camHeight;               // 镜头高度
        m_camTransform.position = pos;                  // 初始化初始摄像机位置
        m_camTransform.rotation = m_transform.rotation; // 初始化摄像机姿势

        /**
         * eulerAngles的三个变量 z,x,y 表示三个绕坐标轴旋转的角度(世界坐标轴)
         * 顺序是z,x,y。如果角度超过360的话,要用Rotate来代替,用四元数来旋转
         * 这三个x,y,z的值对应Inspector上的transform/Rotation的三个值
         * 所绕角度是顺着坐标轴看,按逆时针旋转的角度
         **/
        m_camRot = m_camTransform.eulerAngles;      // 存储摄像机姿势

        Screen.lockCursor = true;       // 锁定鼠标

    }

    void Update() {

        if (m_life <= 0) return;                // 如果生命为0,什么也不做

        /**
         * Input.GetAxis(string name);
         * 根据坐标轴名称返回虚拟坐标系中的值。返回值类型:float
         * 参数:Horizontal, Vertial, Mouse X, Mouse Y
         * 其中Horizontal, Vertical 默认对应小键盘上的左右、上下键,返回值为-1或1
         * Mouse X, Mouse Y 对应鼠标位置,返回值不定
         * 以上都是在unity3d中预定义好的映射,可以通过 Edit->Project Settings->Input 来重新定义映射
         **/
        float rv = Input.GetAxis("Mouse Y");    // 鼠标 Y 轴移动距离,抬头角度
        float rh = Input.GetAxis("Mouse X");    // 鼠标 X 轴移动距离,转身角度

        m_camRot.x -= rv;                       // X轴 摄像机仰角-抬头
        m_camRot.y += rh;                       // Y轴 摄像机旋转
        m_camTransform.eulerAngles = m_camRot;  // 摄像机姿势修正

        // 使主角的面向方向与摄像机一致
        Vector3 camrot = m_camTransform.eulerAngles;    // 提取摄像机姿势
        camrot.x = 0; camrot.z = 0;                     // 防止后退
        m_transform.eulerAngles = camrot;               // 玩家姿势修正
         
        float xm = 0, ym = 0, zm = 0;

        // 重力运动
        ym -= m_gravity * Time.deltaTime * 10;

        // 前进/后退
        if (Input.GetKey(KeyCode.W))
            zm += m_movSpeed * Time.deltaTime * 3;
        else if (Input.GetKey(KeyCode.S))
            zm -= m_movSpeed * Time.deltaTime * 3;
        // 左移/右移
        if (Input.GetKey(KeyCode.A))
            xm -= m_movSpeed * Time.deltaTime * 3;
        else if (Input.GetKey(KeyCode.D))
            xm += m_movSpeed * Time.deltaTime * 3;
        
        // 移动
        m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));

        // 使摄像机的位置与主角一致
        Vector3 pos = m_transform.position;
        pos.y += m_camHeight;
        m_camTransform.position = pos;

    }
    void OnDrawGizmos() {
        Gizmos.DrawIcon(transform.position, "pfsPlayer.png", true);
    }
}
然后,关联到玩家游戏体,


6.创建武器

1)设置主相机

可选操作,

2)创建武器游戏体

将已经做好的武器prefab文件加入场景,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值