unity开发记录-----Space Warrior(1)

简介:space warrior是一款第一人称射击游戏,开发难度中等,涉及第一人称角色控制,枪械操作与射击,玩家信息系统,敌人ai,装备交互等。

1,导入资源,创建地图

导入游戏所需要的各种资产(模型、音效、材质、地图等)

将地图拖入场景中(我使用的是已经创建好的地图)

地板和墙壁都太亮了,更换材质,开启护眼模式。

2,开发玩家可以控制的角色

添加一个胶囊体作为玩家本体,将主相机放置在本体的眼睛上,为玩家添加Character Controller。

之后新建脚本,用来接收输入并控制玩家做出相应行为。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float mouseSensitivity = 50f; // 鼠标灵敏度

    public float acceleration = 40f; // 加速度

    public float maxSpeed = 15f; // 最大速度

    public float jumpSpeed = 10f; // 跳跃速度

    public float gravity = 9.81f; // 重力

    public Transform cameraTransform; // 摄像机位置


    bool isGrounded; // 是否在地面上

    bool isSecondJump; // 是否可以二段跳

    float ySpeed; // 垂直速度

    float moveSpeed; // 移动速度

    float eyeLimit = 0; // 视角限制

    Vector3 input; // 输入

    Vector3 move; // 移动

    CharacterController cont; // 角色控制器

    void Start()
    {
        cont = GetComponent<CharacterController>(); // 获取角色控制器

    }

    // Update is called once per frame
    void Update()
    {
        isGrounded = cont.isGrounded; // 判断是否在地面上

        Move(); // 移动

        Turn(); // 转向

        Drop(); // 下落

        Jump(); // 跳跃

    }

    void Move()
    {
        input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); // 获取输入

        moveSpeed = Mathf.MoveTowards(moveSpeed, input.normalized.magnitude * maxSpeed, acceleration * Time.deltaTime); // 计算移动速度

        move = transform.TransformDirection(input)*Time.deltaTime*moveSpeed; // 计算移动向量

        move += new Vector3(0, ySpeed, 0); // 加上垂直速度

        cont.Move(move); // 移动

    }

    void Drop()
    {
        if (!isGrounded) // 如果不在地面上

        {
            ySpeed-= gravity * Time.deltaTime; // 垂直速度减小

        }

        else // 如果在地面上

        {
            if (ySpeed < -1) // 如果垂直速度小于-1

            {
                ySpeed += gravity* Time.deltaTime; // 垂直速度增加

            }

            if (isSecondJump) // 如果可以二段跳

            {
                isSecondJump = false; // 重置二段跳

            }
        }
    }

    void Jump()
    {
        if (isGrounded) // 如果在地面上

        {
            if (Input.GetButtonDown("Jump")) // 如果按下跳跃键

            {
                ySpeed = jumpSpeed; // 垂直速度设为跳跃速度

            }
        }
        else // 如果不在地面上

        {
            if (!isSecondJump) // 如果可以二段跳

            {
                if (Input.GetButtonDown("Jump")) // 如果按下跳跃键

                {
                    ySpeed+= jumpSpeed; // 垂直速度增加

                    isSecondJump = true; // 二段跳设为不可用

                }
            }
        }
    }

    void Turn()
    {
       float MouseX = Input.GetAxis("Mouse X"); // 获取鼠标X轴移动

       float MouseY = Input.GetAxis("Mouse Y"); // 获取鼠标Y轴移动


       transform.Rotate(Vector3.up,MouseX*mouseSensitivity*Time.deltaTime); // 绕Y轴旋转

       eyeLimit -= MouseY * mouseSensitivity * Time.deltaTime;  // 视角限制

       eyeLimit = Mathf.Clamp(eyeLimit, -80, 80); // 视角限制

       cameraTransform.localEulerAngles = Vector3.right * eyeLimit; // 摄像机旋转

    }
}

在这其中,jump和drop用于处理玩家的跳起以及下落,move和turn用于处理玩家的移动以及视角的旋转。

在这其中,玩家可以进行二段跳,并且进行运动操作时符合直觉且运动流畅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值