Unity3D 学习笔记 自由变换摄像头视角

学习内容:b站傅老师的U3D黑魂复刻课程
在这里插入图片描述

在角色下创建CameraHandle,将摄像机拖入

PlayerHandle控制水平旋转,CameraHandle控制竖直旋转

定义

public PlayerController pi;

private GameObject playerHandle;

private GameObject cameraHandle;

获取object

void Awake()

{

    cameraHandle = transform.parent.gameObject;

    playerHandle = cameraHandle.transform.parent.gameObject;

}

使用rotate方法旋转

playerHandle.transform.Rotate(Vector3.up,pi.Jright * 10.0f *Time.deltaTime);

添加速度系数

public float horizontalSpeed = 50.0f;

两个方向的旋转方法调用

void Update()

{

    playerHandle.transform.Rotate(Vector3.up,pi.Jright * horizontalSpeed *Time.deltaTime);

    cameraHandle.transform.Rotate(Vector3.right,pi.Jup * -verticalSpeed *Time.deltaTime);

}

找到俯角仰角的临界值,设定边界

    cameraHandle.transform.eulerAngles = new Vector3(

        Mathf.Clamp(cameraHandle.transform.eulerAngles.x,-40,30),0,0);

但是这样俯视可以,仰视会不断鬼畜,注释掉rotate,换一种方法

创建临时变量

    tempEulerX -= pi.Jup * verticalSpeed *Time.deltaTime;

    tempEulerX = Mathf.Clamp(tempEulerX,-40,30);

    cameraHandle.transform.localEulerAngles = new Vector3(

       tempEulerX,0,0);

即可实现有边界的视角范围

鼠标控制

如果想要使用鼠标控制的话,可以加入鼠标控制

    Jright = Input.GetAxis("Mouse X");

    Jup = Input.GetAxis("Mouse Y");

在这里插入图片描述

延迟镜头

使镜头出现迟滞跟随,当人物静止时候停下来。
在这里插入图片描述

新建空物体camerapos

    camera = Camera.main.gameObject;

获取camera

camera = Camera.main.gameObject;

使camera追随cameraPos

camera.transform.position = Vector3.SmoothDamp(camera.transform.position,transform.position,ref cameraDampVelocity,cameraDampValue);

    camera.transform.eulerAngles = transform.eulerAngles;
 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraController : MonoBehaviour
{
    public PlayerController pi;
    public float horizontalSpeed = 50.0f;
    public float verticalSpeed = 50.0f;
    public float cameraDampValue = 1.5f;
    private GameObject playerHandle;
    private GameObject cameraHandle;
    private float tempEulerX;
    private GameObject model;
    private GameObject camera;
    private Vector3 cameraDampVelocity;
    // Start is called before the first frame update
    void Awake()
    {
        cameraHandle = transform.parent.gameObject;
        playerHandle = cameraHandle.transform.parent.gameObject;
        tempEulerX = 20;
        model = playerHandle.GetComponent<ActorController>().model;
        camera = Camera.main.gameObject;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 tempModeEuler = model.transform.eulerAngles;


        playerHandle.transform.Rotate(Vector3.up,pi.Jright * horizontalSpeed *Time.deltaTime);
        //cameraHandle.transform.Rotate(Vector3.right,pi.Jup * -verticalSpeed *Time.deltaTime);
        //tempEulerX = cameraHandle.transform.eulerAngles.x;
        tempEulerX -= pi.Jup * verticalSpeed *Time.deltaTime;
        tempEulerX = Mathf.Clamp(tempEulerX,-40,30);
        cameraHandle.transform.localEulerAngles = new Vector3(
           tempEulerX,0,0);

        model.transform.eulerAngles = tempModeEuler;

        //camera.transform.position = Vector3.Lerp(camera.transform.position,transform.position,0.2f);
        camera.transform.position = Vector3.SmoothDamp(camera.transform.position,transform.position,ref cameraDampVelocity,cameraDampValue);
        camera.transform.eulerAngles = transform.eulerAngles;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆沙粽子好吃嘛!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值