unity3d 三维FPS游戏角色控制

要先把摄像机镜头放在player里

这里写图片描述

public class PlayerController : MonoBehaviour {

    Vector3 movement;
    Rigidbody playerRigidbody;

    // player移动速度
    public float speed = 6f;

    private float x;
    private float y;
    private float xSpeed = 2;
    private float ySpeed = 2;
    private Quaternion direct; // player direct

    void Awake()
    {
        playerRigidbody = GetComponent<Rigidbody>();
    }

    void Update() {
        // keyboard move
        float h = Input.GetAxisRaw("Horizontal"); // A D
        float v = Input.GetAxisRaw("Vertical");   // W S

        transform.Translate(Vector3.forward * v * speed * Time.deltaTime); // W S 上 下
        transform.Translate(Vector3.right * h * speed * Time.deltaTime); // A D 左右

        // Jump
        if (Input.GetButtonDown("Jump")) {
            playerRigidbody.velocity += new Vector3(0, 5, 0); //添加加速度
            playerRigidbody.AddForce(Vector3.up * 50); //给刚体一个向上的力,力的大小为Vector3.up*mJumpSpeed
        }


        // mouse move
        x += Input.GetAxis("Mouse X") * xSpeed;
        y -= Input.GetAxis("Mouse Y") * ySpeed;

        direct = Quaternion.Euler(y, x, 0);
        transform.rotation = direct;
    }
}

第二版

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private CharacterController m_Controller;
    private Animator m_Animator;
    public float Speed = 10;
    public float JumpSpeed = 10;
    private float m_Gravity = 9.8f;
    private Vector3 m_MoveDirection;


    private void Start()
    {
        m_Controller = GetComponent<CharacterController>();
        m_Animator = GetComponentInChildren<Animator>();
    }

    void Update()
    {
        if (m_Controller.isGrounded)
        {
            var forward = Vector3.ProjectOnPlane(Camera.main.transform.forward, Vector3.up);
            var right = Vector3.ProjectOnPlane(Camera.main.transform.right, Vector3.up);

            float v = Input.GetAxis("Vertical");
            float h = Input.GetAxis("Horizontal");

            m_MoveDirection = forward * v + right * h;

            if (Input.GetKey(KeyCode.A) || 
                Input.GetKey(KeyCode.S) || 
                Input.GetKey(KeyCode.W) || 
                Input.GetKey(KeyCode.D))
            {
                m_Animator.SetBool("walk", true);
                m_Animator.SetBool("idle", false);
            }
            else
            {
                m_Animator.SetBool("idle", true);
                m_Animator.SetBool("walk", false);


            }


            transform.forward = Vector3.Slerp(transform.forward, m_MoveDirection, Time.deltaTime * 10);


            m_MoveDirection *= Speed;
            if (Input.GetButton("Jump"))
                m_MoveDirection.y = JumpSpeed;
        }

        m_MoveDirection.y -= m_Gravity * Time.deltaTime;
        m_Controller.Move(m_MoveDirection * Time.deltaTime);
    }


}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值