首页 / UNITY / Unity相机跟随小结
Unity相机跟随小结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Unity相机跟随小结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2293字,纯文字阅读大概需要4分钟。
内容图文
![Unity相机跟随小结](/upload/InfoBanner/zyjiaocheng/1320/9618cb8e4780452ea4b3665cf7c69072.jpg)
做游戏的时候相机是我们的直接感官,相机的跟随方式严重关系到游戏的体验。我们最常用的跟随方式是
transform.position = Vector3.Lerp(transform.position, GetTargetPos(player), deltaTime * speed);
transform.rotation = Quaternion.Lerp(transform.rotation, GetTargetRotation(player), deltaTime * rSpeed);
需要注意的是上面deltaTtime,需要根据目标物体的运动更新方式设置相应的值。如果目标物体的运动是物理速度或者物理更新,那么应该使用Time.FixedDeltaTIme,并且此段代码应该放在FixedUpate中。对于update下运动的物体,就应该使用Time.DeltaTIme。
如果不这么做会常常发生抖动情况,甚至有时搞不清除到底是相机的问题还是目标自身的问题。
下面是一个赛车游戏的相机跟随方式
public class FollowCamera : MonoBehaviour { internal enum UpdateMode { Update, FixedUpdate } [SerializeField] UpdateMode updateMode=UpdateMode.Update; [SerializeField]Transform cam; [SerializeField]Transform player; [SerializeField]Vector3 offsetPos; [SerializeField] float speed; [SerializeField] float rSpeed; Vector3 pos; [SerializeField] Vector3 angel;//对目标的局部旋转 Quaternion rotation; privatevoid Awake() { player = GameObject.FindGameObjectWithTag("Player").transform; } // Update is called once per framevoid Update() { if (updateMode != UpdateMode.Update) return; SetCameraPosLerp(UpdateMode.Update); } privatevoid FixedUpdate() { if (updateMode != UpdateMode.FixedUpdate) return; SetCameraPosLerp(UpdateMode.FixedUpdate); } //获取目标位置 Vector3 GetTargetPos(Transform target) { Vector3 p = target.TransformPoint(offsetPos); return p; } //获取目标旋转 Quaternion GetTargetRotation(Transform target) { Quaternion r= Quaternion.Euler(angel); r = target.rotation * r;//跟随目标旋转的方式就是让目标旋转和局部旋转相乘return r; } //更新相机的旋转和位置void SetCameraPosLerp(UpdateMode mode) { if (!player) return; float deltaTime = 0; switch (mode) { case UpdateMode.Update: deltaTime = Time.deltaTime; break; case UpdateMode.FixedUpdate: deltaTime = Time.fixedDeltaTime; break; } transform.position = Vector3.Lerp(transform.position, GetTargetPos(player), deltaTime * speed); transform.rotation = Quaternion.Lerp(transform.rotation, GetTargetRotation(player), deltaTime * rSpeed); } //In Editorpublicvoid SetCameraPos() { if (!player) return; transform.position= GetTargetPos(player); transform.rotation = GetTargetRotation(player); } privatevoid OnDrawGizmos() { if (!player) return; Gizmos.color = Color.red; Vector3 p = GetTargetPos(player); Gizmos.DrawWireSphere(p, 0.5f); Gizmos.DrawLine(p, player.position); } }
原文:https://www.cnblogs.com/xiaoahui/p/12355158.html
内容总结
以上是互联网集市为您收集整理的Unity相机跟随小结全部内容,希望文章能够帮你解决Unity相机跟随小结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。