unity fps 相机

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

//旋转轴
public enum RotationAxes
{
    MouseXAndY = 0, MouseX = 1, MouseY = 2
}

public class CabeMove : MonoBehaviour {

    CameraOnMove cameraOnMove;

    Transform transform_Image;

    Vector3 last_Camera_Po;
    Vector3 now_Camera_Po;
    Vector3 difference_Value;

    float x;
    float y;

    // Start is called before the first frame update
    void Start()
    {
        if(cameraOnMove == null)
        {
            cameraOnMove = new CameraOnMove();
        }
        if(transform_Image == null)
        {
            transform_Image = GetComponentsInChildren<Transform>()[2];
        }
        last_Camera_Po = Vector3.zero;
        now_Camera_Po = Vector3.zero;
        difference_Value = Vector3.zero;
        x = 0;
        y = 0;
    }

    // Update is called once per frame
    void Update()
    {
        OnMove();
        CameraMove();
        BulBul();
    }

    private void BulBul()
    {
        if (Input.GetKeyDown(KeyCode.J))
        {
            GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            bullet.transform.position = transform.position;
            bullet.transform.LookAt(transform_Image);
            bullet.AddComponent<BulletsFly>();
        }
    }

    private void OnMove()
    {
        x = Input.GetAxis("Horizontal");
        y = Input.GetAxis("Vertical");

        transform.Translate(Vector3.forward * y * Time.deltaTime);
        transform.Translate(Vector3.left * -x * Time.deltaTime);
    }

    public void CameraMove()
    {
        if (Input.GetMouseButton(0))
        {
            now_Camera_Po = Input.mousePosition;
            if (!Input.GetMouseButtonDown(0))
            {
                difference_Value = now_Camera_Po - last_Camera_Po;
                if(difference_Value != Vector3.zero)
                cameraOnMove.CameraMove(transform, difference_Value.x/30, difference_Value.y/30);
            }
            last_Camera_Po = now_Camera_Po;
        }
    }
}

public class CameraOnMove
{
    //x轴(水平)速度
    public float sensitivityX = 15F;
    //y轴(垂直)速度
    public float sensitivityY = 15F;
    //x轴(水平)最小旋转值
    public float minimumX = -360F;
    //x轴(水平)最大旋转值
    public float maximumX = 360F;
    //y轴(垂直)最小旋转值
    public float minimumY = -60F;
    //y轴(垂直)最大旋转值
    public float maximumY = 60F;
    //旋转轴
    public RotationAxes axes = RotationAxes.MouseXAndY;
    private float rotationY = 0F;

    public void CameraMove(Transform transform, float x, float y)
    {
        if (axes == RotationAxes.MouseXAndY)
        {
            float rotationX = transform.localEulerAngles.y + x * sensitivityX;

            rotationY += y * sensitivityY;
            rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);

            transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
        }
        else if (axes == RotationAxes.MouseX)
        {
            transform.Rotate(0, x * sensitivityX, 0);
        }
        else if (axes == RotationAxes.MouseY)
        {
            rotationY += y * sensitivityY;
            rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);

            transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
        }
    }
}

public class BulletsFly : MonoBehaviour
{
    private void Update()
    {
        transform.Translate(Vector3.forward * 3 * Time.deltaTime);
    }
}

  

 

posted @ 2019-07-04 09:34  OldWu  阅读(345)  评论(0编辑  收藏  举报