微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity3d相机跟随角色

摄像机跟随目标,鼠标滑轮可以调整距离

InputController.cs

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

public class InputController : MonoBehavIoUr
{
    public Vector2 m_Movement;
    public bool isAtk;
    public Vector3 m_Camera;

    // Update is called once per frame
    void Update()
    {
        m_Movement.Set(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        isAtk = Input.GetMouseButtonDown(0); // Input.GetButtonDown("Fire1");
        m_Camera.Set(Input.GetAxis("Mouse X"),Input.GetAxis("Mouse Y"),Input.GetAxis("Mouse ScrollWheel"));
    }
}

ArpgCameraC.cs

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

public class ArpgCameraC : MonoBehavIoUr
{
    public InputController inputc;
    public Transform target;

    float xSpeed = 250;
    float ySpeed = 125;

    float x = 0;
    float y = 0;

    float distance = 4;
    float zoomrate = 80;
    float yMinLimit = -10;
    float yMaxLimit = 70;
    float disMinLimit = 2;
    float disMaxLimit = 10;

    Vector3 offset = new Vector3(0,1);
    Vector3 rotateOffset = new Vector3(0.1f, 0, -1);

    // Start is called before the first frame update
    void Start()
    {
        // 锁定鼠标
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        // 镜头角度
        x += inputc.m_Camera.x * xSpeed * Time.deltaTime;
        y -= inputc.m_Camera.y * ySpeed * Time.deltaTime;
        y = ClampAngle(y, yMinLimit, yMaxLimit);

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

        // 只要移动,镜头始终朝着角色前方
        if (inputc.m_Movement.x != 0 || inputc.m_Movement.y != 0)
        {
            // 目标跟随视角旋转
            target.transform.rotation = Quaternion.Euler(0,x,0);
        }

        // 鼠标滚动 镜头距离
        distance -= (inputc.m_Camera.z * Time.deltaTime) * zoomrate * Mathf.Abs(distance);
        distance = Mathf.Clamp(distance,disMinLimit,disMaxLimit);

        transform.position = target.position + offset + rotation * (rotateOffset * distance);
    }

    float ClampAngle(float angle,float min,float max)
    {
        if (angle > 360)
        {
            angle -= 360;
        } else if (angle < -360)
        {
            angle += 360;
        }
        return Mathf.Clamp(angle, min, max);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐