Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Creating FPS player

A topic by Ronak Sharma created Apr 30, 2021 Views: 216
Viewing posts 1 to 1
(+1)

1. Create a new Game Object (GameObject -> Create Empty) and name it "FPSPlayer"

2. Create new Capsule (GameObject -> 3D Object -> Capsule) and move it inside "FPSPlayer" Object.

3. Remove Capsule Collider component from Capsule and change its position to (0, 1, 0)

4. Move the Main Camera inside the "FPSPlayer" Object and change its position to (0, 1.64, 0)

5. Create a new script, name it "FPS_Script" and paste the code below inside it:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

[RequireComponent(typeof(CharacterController))]

public class FPS_Script : MonoBehaviour

{

    public float walkingSpeed = 7.5f;

    public float runningSpeed = 11.5f;

    public float jumpSpeed = 8.0f;

    public float gravity = 20.0f;

    public Camera playerCamera;

    public float lookSpeed = 2.0f;

    public float lookXLimit = 45.0f;

    CharacterController characterController;

    Vector3 moveDirection = Vector3.zero;

    float rotationX = 0;

    [HideInInspector]

    public bool canMove = true;

    void Start()

    {

        characterController = GetComponent<CharacterController>();

        // Lock cursor

        Cursor.lockState = CursorLockMode.Locked;

        Cursor.visible = false;

    }

    void Update()

    {

        // We are grounded, so recalculate move direction based on axes

        Vector3 forward = transform.TransformDirection(Vector3.forward);

        Vector3 right = transform.TransformDirection(Vector3.right);

        // Press Left Shift to run

        bool isRunning = Input.GetKey(KeyCode.LeftShift);

        float curSpeedX = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Vertical") : 0;

        float curSpeedY = canMove ? (isRunning ? runningSpeed : walkingSpeed) * Input.GetAxis("Horizontal") : 0;

        float movementDirectionY = moveDirection.y;

        moveDirection = (forward * curSpeedX) + (right * curSpeedY);

        if (Input.GetButton("Jump") && canMove && characterController.isGrounded)

        {

            moveDirection.y = jumpSpeed;

        }

        else

        {

            moveDirection.y = movementDirectionY;

        }

        // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below

        // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied

        // as an acceleration (ms^-2)

        if (!characterController.isGrounded)

        {

            moveDirection.y -= gravity * Time.deltaTime;

        }

        // Move the controller

        characterController.Move(moveDirection * Time.deltaTime);

        // Player and Camera rotation

        if (canMove)

        {

            rotationX += -Input.GetAxis("Mouse Y") * lookSpeed;

            rotationX = Mathf.Clamp(rotationX, -lookXLimit, lookXLimit);

            playerCamera.transform.localRotation = Quaternion.Euler(rotationX, 0, 0);

            transform.rotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * lookSpeed, 0);

        }

    }

}

6. Attach "FPS_Script" script to "FPSPlayer" Object

7. Assign the Main Camera to the Player Camera variable in FPS_Script



-Ronak Sharma

-VIT Bhopal

-Game programming