ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity3d相机跟随角色

2021-09-14 15:32:38  阅读:183  来源: 互联网

标签:Unity3d angle 角色 distance float 相机 using Input public


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

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);
    }
}

标签:Unity3d,angle,角色,distance,float,相机,using,Input,public
来源: https://www.cnblogs.com/skyvip/p/15267755.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有