unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果
思路是,讀取鼠標滾輪的滾動傾向,改變相機的視角域(fieldOfView)。
但是,僅僅改變視角域是不行的,因為如果物體在視野邊緣,在放大的過程中,也就是視角域縮小的過程中,
物體就可能跑到視野以外去了。因此,還必須將相機對準物體。
因此,首先,將相機對準物體,隨物體運動而運動。然后,驅動相機視角域和滾輪滾動相關聯。
以下代碼是控制相機對準物體的腳本,有一個成員變量 target,它是Transform類型的,也就是變換類型的對象,實際上是變換類型對象的引用(指針)。
using UnityEngine; using System.Collections;public class LookAtControl : MonoBehaviour {public Transform target;// Update is called once per framevoid 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 initializationvoid Start () {}// Update is called once per framevoid Update () {if ( Input.GetAxis ("Mouse ScrollWheel") > 0 ) {GetComponent<Camera> ().fieldOfView--;}if ( Input.GetAxis ("Mouse ScrollWheel") < 0 ) {GetComponent<Camera> ().fieldOfView++;}}}隨著鼠標滾輪滾動趨勢的不同,視角域相應改變,達到放大或縮小效果。我認為Input.GetAxis()函數,就是是讀取鼠標鍵的運動趨勢的,包括左鍵按住后的運動趨勢和滾輪滾動的趨勢。因為已經將相機對準了物體,再也不怕物體會跑到視野以外了。盡情得滾動吧!
總結
以上是生活随笔為你收集整理的unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 再来学习一下RT-Thread的软件架构
- 下一篇: Java不区分大小写模糊查询方法_查询语
