栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity 3D系列 摄像机围绕主角进行旋转、缩放

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity 3D系列 摄像机围绕主角进行旋转、缩放

一、开发环境

Unity版本: 2020.1.0f1

二、建立摄像机结构 1、结构如下图

2、将CameraZoomContainer的Position X坐标设置为12,如图

3、将CameraUpAndDown的Rotation Z坐标设置为30,如图:

三、实现摄像机的跟随、旋转、缩放 1、编写相机控制器脚本CameraCtrl挂载到CameraFollowAndRotate上,脚本内容如下:
using UnityEngine;
using System.Collections;

/// 
/// 
/// 
public class CameraCtrl : MonoBehaviour
{
    public static CameraCtrl Instance;

    /// 
    /// 控制摄像机上下
    /// 
    [SerializeField]
    private Transform m_CameraUpAndDown;

    /// 
    /// 摄像机缩放父物体
    /// 
    [SerializeField]
    private Transform m_CameraZoomContainer;

    /// 
    /// 摄像机容器
    /// 
    [SerializeField]
    private Transform m_CameraContainer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {

    }

    /// 
    /// 初始化
    /// 
    public void Init()
    {
        m_CameraUpAndDown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(m_CameraUpAndDown.transform.localEulerAngles.z, 35f, 80f));
    }

    /// 
    /// 设置摄像机旋转
    /// 
    /// 0=左 1=右
    public void SetCameraRotate(int type)
    {
        transform.Rotate(0, 80 * Time.deltaTime * (type == 0 ? -1 : 1), 0);
    }

    /// 
    /// 设置摄像机上下 0=上 1=下
    /// 
    /// 
    public void SetCameraUpAndDown(int type)
    {
        m_CameraUpAndDown.transform.Rotate(0, 0, 60 * Time.deltaTime * (type == 1 ? -1 : 1));
        m_CameraUpAndDown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(m_CameraUpAndDown.transform.localEulerAngles.z, 5f, 80f));
    }

    /// 
    /// 设置摄像机 缩放
    /// 
    /// 0=拉近 1=拉远
    public void SetCameraZoom(int type)
    {
        m_CameraContainer.Translate(Vector3.forward * 10 * Time.deltaTime * ((type == 1 ? -1 : 1)));
        m_CameraContainer.localPosition = new Vector3(0, 0, Mathf.Clamp(m_CameraContainer.localPosition.z, -10f, 10f));
    }

    /// 
    /// 实时看着主角
    /// 
    /// 
    public void AutoLookAt(Vector3 pos)
    {
        m_CameraZoomContainer.LookAt(pos);
    }

    //void OnDrawGizmos()
    //{
    //    Gizmos.color = Color.red;
    //    Gizmos.DrawWireSphere(transform.position, 15f);

    //    Gizmos.color = Color.blue;
    //    Gizmos.DrawWireSphere(transform.position, 14f);

    //    Gizmos.color = Color.green;
    //    Gizmos.DrawWireSphere(transform.position, 12f);
    //}
}
2、设置变量,如图:

3、编写角色控制器脚本RoleCtrl,将角色脚本挂载到角色上(本脚本未实现角色移动,角色移动请参考其他资料)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoleCtrl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        if (CameraCtrl.Instance != null)
        {
            CameraCtrl.Instance.Init();
        }
    }

    // Update is called once per frame
    void Update()
    {
        // 摄像机自动跟随
        CameraAutoFollow();
    }

    #region CameraAutoFollow 摄像机自动跟随

    /// 
    /// 摄像机自动跟随
    /// 
    private void CameraAutoFollow()
    {
        if (CameraCtrl.Instance == null) return;

        CameraCtrl.Instance.transform.position = gameObject.transform.position;
        CameraCtrl.Instance.AutoLookAt(gameObject.transform.position + new Vector3(0, 1.2f, 0));

        if (Input.GetKey(KeyCode.A))
        {
            CameraCtrl.Instance.SetCameraRotate(0);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            CameraCtrl.Instance.SetCameraRotate(1);
        }
        else if (Input.GetKey(KeyCode.W))
        {
            CameraCtrl.Instance.SetCameraUpAndDown(0);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            CameraCtrl.Instance.SetCameraUpAndDown(1);
        }
        else if (Input.GetKey(KeyCode.I))
        {
            CameraCtrl.Instance.SetCameraZoom(0);
        }
        else if (Input.GetKey(KeyCode.L))
        {
            CameraCtrl.Instance.SetCameraZoom(1);
        }

    }
    #endregion
}

4、测试 运行游戏,按键A与D进行旋转,按键W与S进行调整相机角度,按键I与L进行拉进拉远 5、手势操作-未完待续
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号