Unity3D第三人称视角摄像机、跟随与球面旋转

更新时间:2023-06-04 13:32:59 阅读: 评论:0

Unity3D第三⼈称视⾓摄像机、跟随与球⾯旋转Unity3D第三⼈称视⾓摄像机、跟随与球⾯旋转
逻辑释义
【关键transform】 1[玩家] 2[注视⽬标点] 3[摄像机]
[摄像机]跟随[注视⽬标点],[注视⽬标点]跟随[玩家]
【看向注视⽬标点】 摄像机 ⽤transform.LookAt()⽅法. 始终看向 注视⽬标点
【视⾓垂直旋转】 摄像机始终根据 注视⽬标点的后⽅向量与上⽅向量或下⽅向量 插值获得 偏移向量.
调整插值 以获得 垂直旋转的效果
【视⾓⽔平旋转】 注视⽬标点⽔平旋转, 带动 摄像机⽔平旋转
【视⾓远近缩放】 获得偏移向量后 修改偏移向量长度
【Unity使⽤】 脚本组件挂到[摄像机]上 [玩家]物体 需添加Tag“Player” (或public Transform player ;⼿动挂载)图解分析
Unity C#代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SphereCamera : MonoBehaviour
{
private Transform player;//玩家
private Transform player;//玩家
private Transform watchPoint;//注视⽬标点
private float watchPointHeight =1.7f;//注视⽬标点⾼度
private float distance =2.8f;//当前摄像机到⽬标点距离
private float distanceMax =5.0f;//到⽬标点最⼤距离
菠菜虾仁private float distanceMin =1.0f;//到⽬标点最⼩距离
private float distanceSpeed =0.3f;//距离增减速度
private float rotationY;//⽔平旋转
private float rotationYSpeed =1.5f;//⽔平旋转速度
private float AngleLerp;//当前垂直⾓度插值系数
private float AngleMax =80.0f;//最⼤垂直⾓度
private float AngleMin =-40.0f;//最⼩垂直⾓度
private float AngleSpeed =0.02f;//垂直旋转速度
private Vector3 finalVec =new Vector3();//最终偏移向量
private void Start()
{
/
/寻找标签获得玩家Transform
player = GameObject.FindGameObjectWithTag("Player").transform;
//实例化注视⽬标点物体
watchPoint =new GameObject().transform;
}
private void FixedUpdate()
{
ChangeDistance();//滚轮增减摄像机到⽬标点距离
ChangeRotationY();//⽔平旋转
ChangeAngle();//垂直旋转
FinalCameraPos();//摄像机最终位置
}
private void ChangeDistance()//滚轮增减摄像机到⽬标点距离
{
//接收⿏标滚轮输⼊
if(Input.GetAxis("Mou ScrollWheel")<0)
{
//改变当前到⽬标点距离
distance += distanceSpeed;
//限制到⽬标点距离最⼤值
if(distance > distanceMax)
{
distance = distanceMax;
}
}
el if(Input.GetAxis("Mou ScrollWheel")>0)
{
//改变当前到⽬标点距离
distance -= distanceSpeed;
//限制到⽬标点距离最⼩值
if(distance < distanceMin)
{
distance = distanceMin;
}
}
}
private void ChangeRotationY()//⽔平旋转
{
//获得⿏标X轴移动值修改⽔平旋转值
rotationY = Input.GetAxis("Mou X")* rotationYSpeed;
//注视⽬标点⽔平旋转
//注视⽬标点⽔平旋转
watchPoint.Rotate(0, rotationY,0);
法治副校长}
private void ChangeAngle()//垂直旋转
{
//⿏标Y轴移动修改垂直⾓度插值系数
AngleLerp -= Input.GetAxis("Mou Y")* AngleSpeed;
我又想起你了//限制垂直⾓度插值系数最⼤最⼩值
if(AngleLerp > AngleMax /90.0f)//除90度获得最⼤垂直⾓度插值系数
{
一美元纸币图片AngleLerp = AngleMax /90.0f;
}
el if(AngleLerp < AngleMin /90.0f)
{
AngleLerp = AngleMin /90.0f;
小金丸}
红楼梦高考作文//判断当前垂直⾓度插值系数正负
//根据注视⽬标点的后⽅向量上⽅或下⽅向量与当前垂直⾓度插值系数120急救
//获得偏移向量的⽅向
if(AngleLerp >0)
finalVec = Vector3.Lerp(-watchPoint.forward, watchPoint.up, AngleLerp);
el
finalVec = Vector3.Lerp(-watchPoint.forward,-watchPoint.up,-AngleLerp);//垂直⾓度插值系数取正        finalVec.Normalize();//单位化偏移向量长度为1
finalVec *= distance;//设定偏移向量的长度
粽子的制作
}
private void FinalCameraPos()//摄像机最终位置
{
//注视⽬标点位置跟随玩家位置
Vector3 PointPos = player.position;
PointPos.y += watchPointHeight;//修改注视⽬标点⾼度
//弹簧移动效果插值实现
watchPoint.position = Vector3.Lerp(watchPoint.position, PointPos,0.9f);
//摄像机位置根据注视⽬标点位置进⾏偏移
Vector3 cameraPos = watchPoint.position + finalVec;
//弹簧移动效果插值实现
transform.position = Vector3.Lerp(transform.position, cameraPos,0.2f);
/
/摄像机始终看向注视⽬标点
transform.LookAt(watchPoint.position);
}
}

本文发布于:2023-06-04 13:32:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/985766.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:标点   插值   摄像机   注视   垂直
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图