• 周三. 4 月 22nd, 2026

物嫩软件资讯网

软件资讯来物嫩

第一视角射击游戏

admin@wunen

6 月 12, 2025

一。新建关卡

File,Save Scene,



File





New Scene







File





Save Scene as…





Level02.unity




1.建立场景

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

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

在Hierarchy中选择3个构造游戏空间的游戏体,



Component





Physics





Mesh Collider







操作后,游戏空间游戏体可以用于物理碰撞检测。


3.创建灯光

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

1)创建电光源

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

2)调整亮度

二。创建玩家

1.创建空对象

GameObject,Create Empty,






Hierarchy


中将之命名为


FPSPlayer







2.设置标签

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

3.添加角色控制器

FPSPlayer仍旧被选中,



Component





Physics





Character Controller







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


4.添加刚体属性

仍旧选中玩家,



Component





Physics





Rigidbody





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文件加入场景,

3)建立父子关系

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注