unity 相机跟随物体(角色)

unity 相机平滑跟随游戏角色

把这个脚本赋给你的摄像机,再把游戏角色赋给character变量,之后就能实现摄像机平滑的跟随player在地球的任一角落了。

using UnityEngine;

using System.Collections;

public class SmoothFollowerObj {

private Vector3 targetPosition;

private Vector3 position;

private Vector3 velocity;

private float smoothingTime;

private float prediction;

public SmoothFollowerObj(float smoothingTime) {

targetPosition = Vector3.zero;

position = Vector3.zero;

velocity = Vector3.zero;

this.smoothingTime = smoothingTime;

prediction = 1;

}

public SmoothFollowerObj(float smoothingTime, float prediction) {

targetPosition = Vector3.zero;

position = Vector3.zero;

velocity = Vector3.zero;

this.smoothingTime = smoothingTime;

this.prediction = prediction;

}

// Update should be called once per frame

public Vector3 Update(Vector3 targetPositionNew, float deltaTime) {

Vector3 targetVelocity = (targetPositionNew-targetPosition)/deltaTime;

targetPosition = targetPositionNew;

float d = Mathf.Min(1,deltaTime/smoothingTime);

velocity = velocity*(1-d) + (targetPosition+targetVelocity*prediction-position)*d;

position += velocity*Time.deltaTime;

return position;

}

public Vector3 Update(Vector3 targetPositionNew, float deltaTime, bool reset) {

if (reset) {

targetPosition = targetPositionNew;

position = targetPositionNew;

velocity = Vector3.zero;

return position;

}

return Update(targetPositionNew, deltaTime);

}

public Vector3 GetPosition() { return position; }

public Vector3 GetVelocity() { return velocity; }

}

public class NoGravityCamera : MonoBehaviour {    // 这里的NoGravityCamera修改成你的脚本名

public GameObject character;

public Vector3 positionVector;

public Vector3 lookVector;

private SmoothFollowerObj posFollow;

private SmoothFollowerObj lookFollow;

private Vector3 lastVelocityDir;

private Vector3 lastPos;

// Use this for initialization

void Start () {

positionVector=new Vector3(0,2,4);

lookVector=new Vector3(0,0,1.5f);

posFollow = new SmoothFollowerObj(0.5f,0.5f);

lookFollow = new SmoothFollowerObj(0.1f,0.0f);

posFollow.Update(transform.position,0,true);

lookFollow.Update(character.transform.position,0,true);

lastVelocityDir = character.transform.forward;

lastPos = character.transform.position;

}

// Update is called once per frame

void LateUpdate () {

lastVelocityDir += (character.transform.position-lastPos)*8;

lastPos = character.transform.position;

lastVelocityDir += character.transform.forward*Time.deltaTime;

lastVelocityDir = lastVelocityDir.normalized;

Vector3 horizontal = transform.position-character.transform.position;

Vector3 horizontal2 = horizontal;

Vector3 vertical = character.transform.up;

Vector3.OrthoNormalize(ref vertical,ref horizontal2);

if (horizontal.sqrMagnitude > horizontal2.sqrMagnitude) horizontal = horizontal2;

transform.position = posFollow.Update(

character.transform.position + horizontal*Mathf.Abs(positionVector.z) + vertical*positionVector.y,

Time.deltaTime

);

horizontal = lastVelocityDir;

Vector3 look = lookFollow.Update(character.transform.position + horizontal*lookVector.z - vertical*lookVector.y, Time.deltaTime);

transform.rotation = Quaternion.FromToRotation(transform.forward, look-transform.position) * transform.rotation;

}

}

  这是原文章地址:http://game.ceeger.com/forum/read.php?tid=1171&fid=2&page=1

时间: 2024-10-20 22:29:59

unity 相机跟随物体(角色)的相关文章

Unity相机围绕物体

using DG.Tweening;using UnityEngine; public class FollowTrackingCamera : MonoBehaviour{ public static FollowTrackingCamera _Instance; // Camera target to look at. //相机跟随目标 public Transform target; //相机旋转角度 public Vector3 CameraRotation; // Exposed va

Unity 相机围绕物体指定观察角度和位置

问题:相机始终围绕着O观察,现在从A坐标和视角 运动旋转 到B坐标和视角.. 条件:abcd这个矩形盒差不多是物体O的顶视图尺寸,A点箭头是相机所在的起点和角度,B点为目标点需要观察的角度. 直接直线移动相机并按照AB夹角的差去移动和扭转相机的话 镜头很容易翻转!相机不可能总是在关注O对象!难受死了! 我能想到的最优解决办法: 水平围绕+position插值.angle插值!插值时使用Lerp函数,而非直接递增角度.递增位置! 我之所以最后这么"愉快"的决定实在是由于数学捉急,除非会构

unity相机跟随Player常用方式

固定跟随,无效果(意义不大) 1 public class FollowPlayer : MonoBehaviour 2 { 3 public Transform Player; 4 private Vector3 Offset; 5 6 void Start() 7 { 8 //设置差值 9 Offset= Player.position - transform.position; 10 } 11 12 void Update() 13 { 14 transform.position = Pl

Unity相机跟随-----根据速度设置偏移量

这里假设在水中的船,船有惯性,在不添加前进动力的情况下会继续移动,但是船身是可以360度自由旋转,当船的运动速度在船的前方的时候,相机会根据向前的速度的大小,设置相机的偏移量,从而提高游戏的动态带感. 但是由于惯性船的速度不一定在船的,因此可以获得当前船的速度方向在船的前方的投影分量,当分量与船的前方同向,那么设置偏移量为:速度分量的长度与船的最大比值t,乘以相机设定的最大偏移量 代码1 如下 using System.Collections; using System.Collections.

Unity3D——相机跟随物体移动

public Transform target; public float moveSmooth=5f; Vector3 offset; void Start () { offset = transform.position - target.position;//获取相对位置 } void Update () { Vector3 targetPostion= offset + target.position; transform.position = Vector3.Lerp(transfor

unity3D:游戏分解之角色移动和相机跟随

游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. 看似很简单的操作,那么到底是怎么实现的呢? 我们把上述操作分解为以下几个步骤 角色的移动 1. 移动到下一个路点,线性插值.曲线插值 2. 角色朝向,一直面朝下一个路点 相机跟随角色 1. 相机俯视角度,决定相机的高度 2. 相机跟随距离,前向距离或者直线距离(就是三角形的水平边长或者斜边长) 3. 相机一直看

实现相机平滑跟随物体移动

有时候我们在做第三人称游戏的时候,想让相机平滑的跟随物体移动,下面这些代码就能很快达到这个效果 using UnityEngine; using System.Collections; public class CameraMover : MonoBehaviour { public Transform follow;//目标的tansform public float distanceAway = 5.0f;//表示距离目标后方的距离 public float distanceUp=2.0f;

unity 常用的几种相机跟随

固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 1 using UnityEngine; 2 using System.Collections; 3 4 public class CameraFlow : MonoBehaviour 5 { 6 public Transform target; 7 private Vector3 offset; 8 // Use this for initialization 9 void Start() 10 {

Unity3D 利用FSM设计相机跟随实现

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 FSM有限状态机前面已经跟读者介绍过,使用Unity3D引擎实现了动作状态以及技能切换,FSM使用的条件是有限个状态切换,我们可以将FSM应用到相机中,很多人会问在相机中如何使用FS