unity 3d 场景中如何随着摄像机的移动在摄像机周围一定范围内是精模超过范围就切换成简模呢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 3d 场景中如何随着摄像机的移动在摄像机周围一定范围内是精模超过范围就切换成简模呢相关的知识,希望对你有一定的参考价值。
不知道你说的范围是指在视野内还是指在离摄像机一定距离内,在视野范围内你可以查看OnWillRenderObject这个函数,在百度也有教程判断视野范围内,距离的话,用Vector3.Distance计算就可以了.模型的切换也有几种方法:1.先Destroy掉之前的模型,再Resource.Load新的模型,这种方法不占内存,占线程,需要处理,或许会卡一下.2把两个模型都摆在一起,切换模型时,改active(或者renderer.enabled)来隐藏和显示,这种方法占内存,但不占线程,不会卡,具体的看你的需求 参考技术A 利用LOD,将Rendering->LODGroup添加到模型上,这个时候你就可以调整范围,将相应的精模和简模设置一下就行Unity游戏开发第三人称摄像机跟随
在第三人称游戏开发中,因为我们的人物是会不断移动的,所以我们的相机需要保持合适的角度跟随我们的人物进行移动,最简单的一种实现方法是先在unity场景中将摄像机调整到合适的位置,然后将它放到我们的人物下面,让他成为人物的子物体,这样做也可以达到摄像机跟随的目的。如果对摄像机跟随的要求不高的话可以临时采用这种方法
为了实现第三人称摄像机跟随的功能,大部分情况先我们都是采用编写代码的方法来实现的。下面是本人实现的一种摄像机跟随的方法,仅供参考,实现的功能是按住键盘AD键可以让摄像机视野围绕人物左右移动,按住键盘ws键可以让摄像机视野围绕人物上下移动,滑动鼠标滚轮能够实现视野的拉近远离功能。如图我创建了几层空物体空物体leftandright-->Upanddown-->zoomconter-->conter,摄像机放在conter下面,我们知道在Unity中如果存在父子级关系,子物体会跟随父物体进行运动的,所以我用代码分别对leftandright-->Upanddown-->zoomconter进行旋转控制,也就实现了对其子物体摄像机的控制(操作时要首先摆好层级的相对位置leftandright始终与人物坐标保持一致),脚本如下是挂在leftangright上的,采用的是单例模式
using System.Collections; using System.Collections.Generic; using UnityEngine; //1,知道自己要做什么 //2,用什么API可以实现功能 //3,写出来,验证,改错 public class CamerControl : MonoBehaviour { public static CamerControl instance; void Awake() { instance = this; } [SerializeField] private Transform Upanddown; [SerializeField] private Transform Zoomconter; [SerializeField] private Transform conter; //控制视野左右移动的方法 public void SetRotate(int type) { transform.Rotate(0,Time.deltaTime*(type==1?1:-1)*30,0); } //控制视野上下移动的方法 public void SetUp(int type) { Upanddown.Rotate(0,0,Time.deltaTime*(type==1?1:-1)*30); //Upanddown.transform.localEulerAngles = new Vector3(0, 0, Mathf.Clamp(Upanddown.transform.localEulerAngles.z,-90f,0f)); } //控制视野远近的方法 public void SetScale(int type) { conter.Translate(Vector3.forward*(type==1?1:-1)); } }
之后在人物控制脚本的Update函数中调用CameraFllow函数
//控制摄像机移动的方法 void CameraFllow() { if (CamerControl.instance == null) return; CamerControl.instance.transform.position = transform.position; if (Input.GetKey(KeyCode.A)) { CamerControl.instance.SetRotate(1); } else if (Input.GetKey(KeyCode.D)) { CamerControl.instance.SetRotate(-1); } if (Input.GetKey(KeyCode.W)) { CamerControl.instance.SetUp(-1); } else if (Input.GetKey(KeyCode.S)) { CamerControl.instance.SetUp(1); } if (Input.GetAxis("Mouse ScrollWheel")>0) { CamerControl.instance.SetScale(1); } else if (Input.GetAxis("Mouse ScrollWheel")<0) { CamerControl.instance.SetScale(-1); } }
以上是关于unity 3d 场景中如何随着摄像机的移动在摄像机周围一定范围内是精模超过范围就切换成简模呢的主要内容,如果未能解决你的问题,请参考以下文章
unity3d摄像机角度怎么调整啊?u3d如何调整摄像机的位置?求解
unity3d中,怎样让鼠标点击一个物体后,摄像机就去拍摄这个物体?
Unity 3D 游戏开发Unity3D 入门 - 工作区域介绍 与 入门示例