unity控制摄像机几种视角实现方式

这篇具有很好参考价值的文章主要介绍了unity控制摄像机几种视角实现方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、按下鼠标右键可以实现摄像机上下左右旋转

2、自由视角

3、摄像头跟随视角

4、跟随自由视角

5、第一人称跟随视角

python学习汇总连接:



unity相机视角转换脚本,c#,unity

1、按下鼠标右键可以实现摄像机上下左右旋转

这段代码定义了一个名为CameraRotate的脚本,用于控制摄像机根据鼠标右键(中键)的移动进行旋转。摄像机将以一定的旋转速度(rotationSpeed)跟随鼠标输入,并且其垂直旋转角度将被限制在最小垂直角度(minVerticalAngle)和最大垂直角度(maxVerticalAngle)之间,以防止过度倾斜。通过使用Quaternion.Lerp函数,摄像机的旋转过程更加平滑自然。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraRotate : MonoBehaviour
{
    //旋转速度
    public float rotationSpeed = 5f;
    //上下旋转角度限制
    public float maxVerticalAngle = 90f;
    public float minVerticalAngle = -90f;
    //旋转缓冲速度
    public float lerpSpeed = 10f;
    private float targetRotationX = 0f;
    private float targetRotationY = 0f;
    void Update()
    {
        if (Input.GetMouseButton(1))
        {
            // 获取鼠标输入的旋转增量
            float rotationXInput = -Input.GetAxis("Mouse Y");
            float rotationYInput = Input.GetAxis("Mouse X");
            // 根据旋转速度进行摄像机的旋转
            targetRotationX += rotationXInput * rotationSpeed;
            targetRotationY += rotationYInput * rotationSpeed;
            // 对上下旋转角度进行限制
            targetRotationX = Mathf.Clamp(targetRotationX, minVerticalAngle, maxVerticalAngle);
            // 根据旋转角度更新摄像机的欧拉角,Quaternion.Lerp可以使摄像机旋转更加平滑
            Quaternion targetRotation = Quaternion.Euler(targetRotationX, targetRotationY, 0f);
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, lerpSpeed * Time.deltaTime);
        }
    }
}

2、自由视角

CameraRotate脚本同样实现摄像机围绕某个物体(target)旋转的功能,当按下鼠标右键时,摄像机会随着鼠标Y轴的移动而上下旋转、X轴的移动而左右旋转,同时确保旋转角度保持在设定范围内。此外,无论摄像机如何旋转,都会始终保持与目标物体之间的特定距离(distance),使摄像机始终围绕物体进行轨道式运动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraRotate : MonoBehaviour
{
    public Transform target;
    public float rotationSpeed = 5f;
    public float maxVerticalAngle = 90f;
    public float minVerticalAngle = -90f;
    public float lerpSpeed = 200f;
    public float distance = 10;
 
    private float targetRotationX = 0f;
    private float targetRotationY = 0f;
 
    void Start()
    {
        if (target == null)
            Debug.LogError("Please assign a target to the orbit camera!");
    }
    void Update()
    {
        if (Input.GetMouseButton(1))
        {
            float rotationXInput = -Input.GetAxis("Mouse Y");
            float rotationYInput = Input.GetAxis("Mouse X");
 
            targetRotationX += rotationXInput * rotationSpeed;
            targetRotationY += rotationYInput * rotationSpeed;
 
            targetRotationX = Mathf.Clamp(targetRotationX, minVerticalAngle, maxVerticalAngle);
 
            Quaternion targetRotation = Quaternion.Euler(targetRotationX, targetRotationY, 0f);
            transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, lerpSpeed * Time.deltaTime);
        }
        transform.position = target.position - transform.forward * distance;
    }
}

3、摄像头跟随视角

CameraRotate脚本使得摄像机始终跟随在一个指定的目标物体后面,并保持在其正上方一定高度的位置(followHeight)。摄像机位置会以平滑的方式逐渐调整至理想状态,即目标物体正后方特定距离处,通过SmoothDamp函数实现了摄像机跟随过程的平滑过渡。最后,摄像机的方向始终面向目标物体,保证了稳定的跟随视角。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraRotate : MonoBehaviour
{
    public Transform target;
    public float followSpeed = 2f;
    public float followHeight = 4f;
    public float distance = 8f;
 
    private Vector3 velocity = Vector3.zero;
    void Start()
    {
        if (target == null)
            Debug.LogError("Please assign a target to the orbit camera!");
    }
    void LateUpdate()
    {
        Vector3 targetPosition = target.position - (target.forward * distance)+new Vector3(0,followHeight,0);
        transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, 1f / followSpeed);
        transform.LookAt(target);
    }
}

4、跟随自由视角

在Unity中,实现一个跟随角色的摄像头,并且允许玩家自由旋转视角,通常分为两部分:

  1. 摄像机跟随角色移动
  2. 鼠标控制摄像机自由旋转

下面是一个简单的示例脚本,该脚本将实现这两个功能:

using UnityEngine;

public class CameraFollowAndRotate : MonoBehaviour
{
    public Transform target; // 要跟随的目标对象(例如:角色)
    public float followDistance = 5f; // 跟随距离
    public float heightOffset = 2f; // 高度偏移
    public float rotationSpeed = 100f; // 视角旋转速度
    public float xRotationLimit = 90f; // 水平旋转角度限制

    private Vector3 offset;
    private Quaternion originalRotation;

    void Start()
    {
        // 初始化时记录下摄像机相对于目标初始的位置和旋转
        offset = transform.position - target.position;
        originalRotation = Quaternion.Euler(transform.eulerAngles.x, target.eulerAngles.y, 0);
        
        // 如果需要锁定鼠标光标
        Cursor.lockState = CursorLockMode.Locked;
    }

    void LateUpdate()
    {
        // 跟随目标移动
        Vector3 desiredPosition = target.position + offset;
        desiredPosition.y += heightOffset;
        transform.position = desiredPosition;

        // 自由旋转视角
        float mouseX = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime;

        // 限制X轴旋转
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -xRotationLimit, xRotationLimit);

        // 更新摄像机旋转
        Quaternion yRotation = Quaternion.AngleAxis(mouseY, transform.right);
        Quaternion xRotationQuat = Quaternion.AngleAxis(xRotation, Vector3.up);
        transform.rotation = originalRotation * xRotationQuat * yRotation;
    }
}

在这个脚本中,摄像机会保持一定的距离和高度跟随目标对象。同时,通过监听鼠标的水平和垂直输入,允许玩家自由旋转摄像机视角。注意这个例子是第三人称跟随并自由旋转,如果是第一人称视角,处理方式会有所不同。

记得将此脚本挂载到摄像机上,并将target变量设置为你希望摄像机跟随的游戏对象

5、第一人称跟随视角

对于Unity中的第一人称跟随视角,摄像机通常与角色头部绑定,并通过鼠标控制视口的左右旋转。以下是一个简单的实现:

using UnityEngine;

public class FirstPersonCameraFollow : MonoBehaviour
{
    public Transform target; // 角色的头部或相机挂载点
    public float mouseSensitivity = 100f;
    public float yRotationLimit = 90f; // 可选:限制上下的旋转角度

    private float xRotation = 0f;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked; // 锁定鼠标光标以获得更好的第一人称体验
    }

    void LateUpdate()
    {
        // 获取鼠标输入
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // 更新X轴(左右)旋转
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -yRotationLimit, yRotationLimit);

        // 更新Y轴(上下)旋转,直接应用到目标对象上
        target.Rotate(Vector3.left * mouseY);

        // 设置摄像机的局部旋转
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // 摄像机保持在角色头部位置
        transform.position = target.position;
    }
}

在这个脚本中,摄像机将始终位于角色头部的位置,并且可以通过鼠标移动来改变视角的左右旋转。垂直旋转(抬头和低头)直接作用于角色头部,而不是摄像机自身,这是第一人称视角常见的处理方式。

注意,根据项目需求,可能需要调整摄像机的父级关系以及旋转限制等参数。同时,为了确保平滑的旋转效果,可以考虑使用Mathf.SmoothDampAngle函数进行插值处理。

python学习汇总连接:

50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)文章来源地址https://www.toymoban.com/news/detail-838994.html

到了这里,关于unity控制摄像机几种视角实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity【角色/摄像机移动控制】【3.摄像机跟随角色】

    本章代码基于前两章。 1. 我们新建CameraController脚本,将其挂载到Camera上 2. 在角色Player下新建一个空物体,命名为cameraTargetPoint,并将该物体挂载至CameraController脚本中【注意代码中的这行:public Transform cameraTargetPoint;】,将该空物体放在人物头部附近位置 3.将PlayerController脚本

    2024年02月22日
    浏览(37)
  • Unity三种摄像机旋转方式

    1.按下鼠标右键可以实现摄像机上下左右旋转 2.按下鼠标右键可以实现摄像机围绕某个物体上下左右旋转 3.摄像头始终跟随在某个物体的正后方

    2024年02月13日
    浏览(29)
  • unity控制摄像机跟随玩家三种办法

    将相机拖到人物的游戏对象上,也就是让相机成为角色的子物体,这样相机就会跟随角色移动 但是这样会存在问题 1.相机会随着人物的翻转而翻转 2.相机跟随人物没有缓冲效果,移动比较僵硬 代码方式控制相机跟随人物移动,利用Lerp函数控制相机 1.在Unity中创建一个脚本F

    2024年02月16日
    浏览(48)
  • Unity 控制摄像机镜头的上下左右移动

            private float FollowPosx,FollowPosy;     private float moveAmount=5;   //控制镜头的移动速度     // Update is called once per frame     void Update()     {         if (Input.mousePosition.y Screen.height * 0.9)//如果鼠标位置在顶部,就向上移动         {             FollowPosy += moveAmount * Time.delta

    2024年02月11日
    浏览(35)
  • Unity角色或摄像机移动和旋转的控制脚本

    该脚本挂载到需要被移动、旋转控制的物体身上,也可以之间挂在到摄像机上! 挂载到摄像机上可以实现第一人称视角控制! 挂载到物体身上,配合摄像机跟踪脚本可以实现,第三人称视角控制!  将角色控制脚本挂给摄像机即可! 以下是角色控制脚本: 将上面, 角色控

    2024年02月06日
    浏览(38)
  • Unity【角色/摄像机移动控制】【2.角色跟随鼠标转向】

    本章代码实现基于本系列的【1.角色移动】 在前面的基础上,我们在PlayerController脚本中添加如下函数,随后在update方法中调用即可: 其中mouseSensitivity是前面自定义的一个float变量,用来调节对鼠标转向速度,至此,当我们转动鼠标,角色也会跟着转动

    2024年02月22日
    浏览(40)
  • UE-摄像机视角的切换

    可参考:第四篇:UE4视角切换节点,Possess和Set View Target With Blend的区别_是灿灿呀1的博客-CSDN博客_possess ue4 UE4 使用蓝图或C++切换摄像机视角 - Lymind - 爱码网  UE4场景中多个固定摄像机间切换视角_冬眠兔116的博客-CSDN博客_ue4 视角过渡  先添加摄像机组件,并将摄像机放置在场

    2024年02月11日
    浏览(31)
  • unity实现简单的摄像机震动效果(包括普通摄像机和虚拟摄像机)

    用代码实现摄像机简单的震动效果

    2024年02月12日
    浏览(27)
  • Unity制作射击游戏案例01(控制角色+发射子弹+摄像机跟踪)

    //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、   2.发射子弹(空格键) //【程序逻辑2】 首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数    3.克隆子弹 4.让克隆的子弹往前跑 为子弹模板添加刚体,并且限制旋转 这个脚本需要挂在到摄像机,里面谈

    2024年02月06日
    浏览(42)
  • Unity3D摄像机,键盘控制前后左右上下移动,鼠标控制旋转、放缩

    Unity3D中运行场景时,实现摄像机的前、后、左、右、上、下,以及鼠标滚轮的放缩,鼠标右键的旋转操作。亲测有效,可供参考。 按键功能介绍:W——前;S——后;A——左;D——右;Q——下降;E——上升;鼠标右键——旋转;鼠标滚轮——放缩。 Tourcamera脚本需要挂在摄

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包