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

这篇具有很好参考价值的文章主要介绍了Unity【角色/摄像机移动控制】【3.摄像机跟随角色】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章代码基于前两章。
1. 我们新建CameraController脚本,将其挂载到Camera上
2. 在角色Player下新建一个空物体,命名为cameraTargetPoint,并将该物体挂载至CameraController脚本中【注意代码中的这行:public Transform cameraTargetPoint;】,将该空物体放在人物头部附近位置
3.将PlayerController脚本绑定至CameraController中【public PlayerController playerController;】
4.本章代码的实现原理是让摄像机对准空物件,并保持一定距离

5. 具体代码如下

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

public class CameraController : MonoBehaviour
{
    private static float lower_upper_bound = 60f;
    public Transform cameraTargetPoint;
    public float cameraDistance = 5.0f;
    public Vector2 verticalRange = new Vector2(-lower_upper_bound, lower_upper_bound);
    public float cameraSensitivity = 120f;

    private Transform verticalObj;
    private Transform horizontalObj;
    private float horizontalValue;
    private float verticalValue;

    public PlayerController playerController;
    // Start is called before the first frame update
    void Start()
    {
        horizontalObj = new GameObject("Camera Horizontal").transform;
        horizontalObj.SetParent(cameraTargetPoint);
        horizontalObj.localPosition = Vector3.zero;
        horizontalObj.localRotation = Quaternion.identity;
        verticalObj = new GameObject("Camera Vertical").transform;
        verticalObj.SetParent(horizontalObj);
        verticalObj.localPosition = Vector3.zero;
        verticalObj.localRotation = Quaternion.identity;
        transform.SetParent(verticalObj);
        transform.localPosition = new Vector3(0,0,-cameraDistance);
        transform.localRotation = Quaternion.identity; 
    }

    // Update is called once per frame
    void Update()
    {
        cameraMoving();
        DoNotTouchTheGround();
    }

    private void cameraMoving()
    {
        horizontalValue += Input.GetAxis("Mouse X") * Time.deltaTime * cameraSensitivity;
        horizontalObj.localRotation = Quaternion.Euler(new Vector3(0, horizontalValue, 0));
        verticalValue += Input.GetAxis("Mouse Y") * Time.deltaTime * cameraSensitivity;
        verticalValue = Mathf.Clamp(verticalValue, verticalRange.x, verticalRange.y);
        verticalObj.localRotation = Quaternion.Euler(new Vector3(-verticalValue, 0, 0));
    }

    private void DoNotTouchTheGround()    // 摄像机与角色点中间有物体时,让摄像机处于物体前,避免遮挡
    {
        Vector3 distanceVec = transform.position - cameraTargetPoint.position;
        float distance = distanceVec.magnitude;
        RaycastHit hit;
        if(Physics.Raycast(cameraTargetPoint.position,distanceVec, out hit,distance))
        {
            if(hit.transform.tag != "Player")
            {
                transform.position = hit.point;
            }
            else
            {
                transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0, 0, -distance), 0.3f);
            }
        }
        else
        {
            transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0, 0, -distance), 0.3f);
        }

    }
}

Tips:以上代码中,DoNotTouchTheGround()方法不是必须的,该方法是用于限制当摄像机与角色之间有障碍物时,把摄像机放在障碍物前方以避免视觉阻碍,可以看情况添加。

至此,我们可以实现摄像机跟随角色移动,并且鼠标能操控摄像机绕着角色转动,但仍有一个问题:当摄像机位于人物前方时,人物前进方向仍是我们的后方,这是由于参考坐标系的缘故,具体修复如下:

1. 在PlayerController脚本中,添加

public Transform cameraTargetPoint;

在Move方法中添加【moveingVec = cameraTargetPoint.TransformDirection(moveingVec);】:

private void Move()
    {
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 moveingVec = new Vector3(horizontalInput, 0f, verticalInput) * Time.deltaTime * speed;
        moveingVec = cameraTargetPoint.TransformDirection(moveingVec);
        transform.Translate(moveingVec);
        
    }

2. 在CameraController脚本中的cameraMoving()方法中添加下句:

playerController.cameraTargetPoint = horizontalObj;

于是即可实现摄像头跟随鼠标,并围绕角色运动,并且角色运动方向【仅仅是方向,如果要人物转向,则还需其他修改,本系列其他章节会有涉及】可以自适应为当前摄像头的前方文章来源地址https://www.toymoban.com/news/detail-835167.html

到了这里,关于Unity【角色/摄像机移动控制】【3.摄像机跟随角色】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Unity】摄像机跟随鼠标移动以物体为中心旋转 物体根据视线方向移动

    描述 实现摄像机根据鼠标移动跟随物体旋转,以摄像机前物体为中心,摄像机围绕物体旋转,并使摄像机时刻指向物体 实现效果 Unity 组件设置 Camera 组件设置 Body 组件设置 实现代码 CameraRotateMove.cs 摄像机跟随和旋转 move_better.cs 物体根据按键移动

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

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

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

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

    2024年02月06日
    浏览(42)
  • 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日
    浏览(36)
  • Unity摄像机跟随

    将摄像机直接拖拽到被跟随的目标下面即可,这样摄像机永远在目标的后面 缺点: 屏幕旋转太平滑了 目标物体在屏幕上的位置永远不变 目标物体被销毁时总不能把摄像机也销毁了吧 先相机坐标和物体坐标做差,求得偏移量,在之后的每一帧里,将偏移量加上物体的坐标。

    2024年02月21日
    浏览(36)
  • unity摄像机跟随鼠标旋转

     float vertical = Input.GetAxis(\\\"Mouse X\\\") float horizontal = Input.GetAxis(\\\"Mouse Y\\\") 第二种 通过 计算坐标时只需要通过 Quaternion.Euler 来取得旋转四元数,以玩家为原点衍生一条(0,0,-1)的向量并乘上四元数以旋转至 Player 指向摄像机的方向,最后乘上 Distance ,即可得到摄像机相对玩家的偏移

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

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

    2024年02月11日
    浏览(43)
  • Unity使用Cinemachine插件实现摄像机跟随和震动

     一、实现跟随 1、在PackageManager添加插件 2、创建Cinemachine的摄像机,我的项目是2D项目所以创建2D摄像机 3、将Player拖拽到Follow和LookAt  4、创建一个空物体,向它添加PolygonCollider2D,调整好可视范围的大小以后在CinemachineVirtuaCamera的Extensions的AddExtensionzhong中选择 把刚才创建的空

    2024年02月15日
    浏览(36)
  • Unity2D设置摄像机跟随和边界范围

            在制作2D游戏时时常会遇到需要设置摄像机跟随玩家的情况,一般情况下有三种处理比较简单的处理方法,第一种也是简单粗暴的方法,把摄像机直接作为玩家的子物体就可以了,当然这样做的后果就是不利于后续扩展更多的功能,比如切换玩家控制的角色时,你

    2024年02月13日
    浏览(49)
  • unity-第三人称摄像机简单脚本(包括跟随、视角旋转、滚轮缩放)

    本菜鸟为了实现第三人称视角摄像机的主要功能,踩了很多意料之外的坑,终于搞出一份自觉完美的脚本,分享一下。 功能:摄像机跟随、鼠标滚轮缩放视野、长按鼠标右键左右旋转视野、长按鼠标中键上下旋转视野。 此脚本挂接在摄像机上,有详细注释,可直接运行。

    2024年02月08日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包