unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果

思路是,读取鼠标滚轮的滚动倾向,改变相机的视角域(fieldOfView)。

但是,仅仅改变视角域是不行的,因为如果物体在视野边缘,在放大的过程中,也就是视角域缩小的过程中,

物体就可能跑到视野以外去了。因此,还必须将相机对准物体。

因此,首先,将相机对准物体,随物体运动而运动。然后,驱动相机视角域和滚轮滚动相关联。

以下代码是控制相机对准物体的脚本,有一个成员变量 target,它是Transform类型的,也就是变换类型的对象,实际上是变换类型对象的引用(指针)。

using UnityEngine;
using System.Collections;

public class LookAtControl : MonoBehaviour {
	public Transform target;

	// Update is called once per frame
	void Update () 
		{
		transform.LookAt(target);
		}
											}

将这个脚本给了相机之后,点击相机,在inspector面板的脚本部分,会看见一个Target域。


将要对准的物体,即Cube拖到这个Target域里。


这时候在Target域里就出现了Cube(Transform),如下图所示


这很好理解。声明了一个Transform对象(引用)——target,那它具体是什么,是不明的。在unity editor中,将Cube拖到Target域中,就给了它一个Cube的Transform对象。相当于是将一个具体的对象给了对象的指针。因为target是函数tansform.LookAt()的参数,这个参数明确了,函数就可以执行了。也就是,相机对准了物体。

相机对准物体之后,我们就可以放心大胆地改变视角域来放大或缩小物体。

创建一个ZoomDrive脚本,用来关联鼠标滚轮滚动和视角域的改变,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZoomDrive : MonoBehaviour {

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {


		if ( Input.GetAxis ("Mouse ScrollWheel") > 0 ) 
			{
			GetComponent<Camera> ().fieldOfView--;
			}

		if ( Input.GetAxis ("Mouse ScrollWheel") < 0 ) 
			{
			GetComponent<Camera> ().fieldOfView++;
			}

					}
										}

随着鼠标滚轮滚动趋势的不同,视角域相应改变,达到放大或缩小效果。我认为Input.GetAxis()函数,就是是读取鼠标键的运动趋势的,包括左键按住后的运动趋势和滚轮滚动的趋势。因为已经将相机对准了物体,再也不怕物体会跑到视野以外了。尽情得滚动吧!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值