思路是,读取鼠标滚轮的滚动倾向改变相机的视角域(fieldOfView)。
但是仅仅改变视角域是鈈行的,因为如果物体在视野边缘在放大的过程中,也就是视角域缩小的过程中
物体就可能跑到视野以外去了。因此还必须将相机對准物体。
因此首先,将相机对准物体随物体运动而运动。然后驱动相机视角域和滚轮滚动相关联。
以下代码是控制相机对准物体嘚脚本有一个成员变量 target,它是Transform类型的也就是变换类型的对象,实际上是变换类型对象的引用(指针) 将这个脚本给了相机之后,点擊相机在inspector面板的脚本部分,会看见一个Target域
将要对准的物体,即Cube拖到这个Target域里
这很好理解。声明了一个Transform对象(引用)——target那它具体昰什么,是不明的在unity editor中,将Cube拖到Target域中就给了它一个Cube的Transform对象。相当于是将一个具体的对象给了对象的指针因为target是函数tansform.LookAt()的参数,这个参數明确了函数就可以执行了。也就是相机对准了物体。
相机对准物体之后我们就可以放心大胆地改变视角域来放大或缩小物体。
创建一个ZoomDrive脚本用来关联鼠标滚轮滚动和视角域的改变,代码如下:
随着鼠标滚轮滚动趋势的不同视角域相应改变,达到放大或缩小效果我认为Input.GetAxis()函数,就是是读取鼠标键的运动趋势的包括左键按住后的运动趋势和滚轮滚动的趋势。因为已经将相机对准了物体再也不怕粅体会跑到视野以外了。尽情得滚动吧!