开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   0null0

U3D FPS移动脚本

个人分类: U3D | 2017-11-14 17:50
using UnityEngine;
using System.Collections;

public class MySoliderMove : MonoBehaviour
{

    Transform _head;

    Transform _gun;

    public float workTime;
    float _runTime=10;
    bool isEmpty;
    // Use this for initialization
    void Start()
    {
        _head = transform.FindChild("Head");
        _gun = transform.FindChild("M16");
        
        
    }

    // Update is called once per frame
    void Update()
    {
       
      //  Cursor.lockState = CursorLockMode.Locked;
        _gun.forward = _head.forward;  //让枪指向相机的中间位置
        Move();
        Rotate();
        Run();
        
        Jump();
    }

    [SerializeField]
    float moveSpeed = 10f;
    void Move()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");


        Vector3 desPos = Vector3.right * horizontal + Vector3.forward * vertical;
        transform.Translate(desPos * Time.deltaTime * moveSpeed);

    }

    void Run()
    {       
        if (Input.GetKey(KeyCode.LeftShift)&&!isEmpty)    //能量槽不空才能进入循环
        {                   
            workTime += Time.deltaTime;     //跑步时间
            moveSpeed = 30f;   //加速

            if (workTime>_runTime)  //如果跑步的时间超过了上限
            {
                isEmpty = true; //设置为空
            }
        }
        else
        {
            if (workTime>0)                          
            {
                workTime -= Time.deltaTime;     
            }
            else
            {
                workTime = 0;
                isEmpty = false;
            }
            moveSpeed = 10f;   //其他情况下的速度都为正常值
        }
    }

    void Jump()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            transform.Translate(Vector3.up*1.9f);
        }
    }

    float rotationY = 0f;
    [SerializeField]
    float rotateSpeed = 20f;
    void Rotate()
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        transform.Rotate(mouseX * Vector3.up * rotateSpeed);
        
        rotationY += mouseY;

        rotationY = Mathf.Clamp(rotationY, -60, 60);  //控制人物视野

        _head.localEulerAngles = Vector3.left * rotationY;


        //public class FirstView : MonoBehaviour
        //{

        //    方向灵敏度  
        //    public float sensitivityX = 10F;
        //    public float sensitivityY = 10F;

        //    上下最大视角(Y视角)  
        //    public float minimumY = -60F;
        //    public float maximumY = 60F;

        //    float rotationY = 0F;

        //    void Update()
        //    {
        //        根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X)  
        //        float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

        //        根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y)  
        //        rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
        //        角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value   
        //        rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);

        //        总体设置一下相机角度  
        //        transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
        //    }

        //    void Start()
        //    {
        //         Make the rigid body not change rotation  
        //        if (rigidbody)
        //            rigidbody.freezeRotation = true;
        //    }

    }

}

0 0

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

阅读排行

评论排行

推荐博客

最新博客

返回顶部