最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

unity 放大鏡

2023-03-05 20:57 作者:小森游戲制作  | 我要投稿

?

完整教程請(qǐng)移步公眾號(hào)? 小森游戲制作? 查看!!


???同學(xué)們好,我是小森老師!本次給大家?guī)?lái)一個(gè)?放大鏡?工具的制作教程

首先我們下載需要的圖片,模型素材?導(dǎo)入unity?這里老師使用的是2021版本

原理介紹:

我們知道?當(dāng)我們用透視相機(jī)來(lái)看物體的時(shí)候?會(huì)有近大遠(yuǎn)小的效果,可以調(diào)整相機(jī)和目標(biāo)的距離?或者調(diào)整相機(jī)的fieldofview來(lái)控制遠(yuǎn)近?;诖?我們想要獲取放大效果就要拉近相機(jī),而我們主相機(jī)如果拉近了就會(huì)導(dǎo)致整個(gè)畫(huà)面都拉近,所以這里需要一個(gè)單獨(dú)的相機(jī)來(lái)渲染放大的效果

實(shí)現(xiàn):

????按照原理??我們先創(chuàng)建一個(gè)相機(jī),并作為主相機(jī)的子物體(保證位置),調(diào)整fieldofview或者拉遠(yuǎn)一點(diǎn):

這個(gè)時(shí)候我們game還是顯示的其中一個(gè)相機(jī),那么作為放大鏡的相機(jī)(后邊稱(chēng)之為放大相機(jī))渲染(看到)的內(nèi)容就需要顯示到一個(gè)媒介上,也就是rendertexture然后把該內(nèi)容通過(guò)rawimage或者面片顯示出來(lái),asssets文件夾里右鍵創(chuàng)建rendertexture?并調(diào)整size(越大越清楚)

然后創(chuàng)建Rawiamge?并調(diào)整大小放置屏幕正中間,texture指定為剛才的rendertexture

并調(diào)整相機(jī)?渲染texture為剛才的rendertexture,并調(diào)整渲染的layer(只渲染需要的?背景去掉)

吧模型設(shè)置為目標(biāo)layer?這時(shí)效果如下

這里為了效果和方便區(qū)分我們加一個(gè)邊框和遮罩

創(chuàng)建一個(gè)iamge?并指定一個(gè)實(shí)心圓?添加一個(gè)mask組件?,然后調(diào)整大小后吧rawiamge拖到下邊作為它的子物體(只有mask的子物體才能遮罩)

拖動(dòng)放大相機(jī)已經(jīng)可以簡(jiǎn)單看到效果,下一步我們需要寫(xiě)腳本獲取鼠標(biāo)點(diǎn)擊位置?放大指定位置:

?public Transform magnifierCam; ? ?public Camera main; ? ?// Update is called once per frame ? ?void Update() ? ?{ ? ? ? ?if(Input .GetMouseButton(0))//鼠標(biāo)左鍵按壓 ? ? ? ?{ ? ? ? ? ? ?Vector3 pos = Input.mousePosition; ? ? ? ? ? ?pos.z = magnifierCam.position.z;//只同步鼠標(biāo)的xy z使用相機(jī)自己的 ? ? ? ? ? ?Vector3 worldpos = main.ScreenToWorldPoint(pos);//鼠標(biāo)點(diǎn)擊位置映射到場(chǎng)景里 ? ? ? ? ? ? ? ? ? ? ?magnifierCam.position = worldpos;//移動(dòng)相機(jī) ? ? ? ?} ? ?} ? ?

指定主相機(jī)和放大相機(jī)?運(yùn)行拖動(dòng)鼠標(biāo)后效果如下;

到目前已經(jīng)有簡(jiǎn)單的放大效果,但是還有一些問(wèn)題,接下來(lái)進(jìn)行優(yōu)化:

1,添加邊框?去除背景:取消mask的showmask

??創(chuàng)建iamge?使用一個(gè)放大鏡的圖來(lái)作為背景:

2,修改放大相機(jī)為正交模式(應(yīng)該是讓他再模型的前方?正視圖正交的形式)

3,相機(jī)位置更新改為點(diǎn)擊鼠標(biāo)位置發(fā)射射線?檢測(cè)模型?對(duì)應(yīng)的點(diǎn)?來(lái)計(jì)算相機(jī)應(yīng)該在的位置?完整代碼如下:

using System.Collections;using System.Collections.Generic;using UnityEngine;
/// <summary>/// 放大鏡/// </summary>public class Magnifier : MonoBehaviour{
? ?// Start is called before the first frame update ? ?void Start() ? ?{ ? ? ? ?ui.gameObject.SetActive(false);//默認(rèn)隱藏 ? ?} ? ?public Camera magnifierCam; ? ?public Transform ui; ? ?public float dis;//跟模型的距離 ? ?public LayerMask modelLayer; ? ?// Update is called once per frame ? ?void Update() ? ?{ ? ? ? ?if(Input .GetMouseButton(0))//鼠標(biāo)左鍵按壓 ? ? ? ?{ ? ? ? ? ? ?Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); ? ? ? ? ? ?RaycastHit hit; ? ? ? ? ? ?if(Physics .Raycast (ray, out hit, 100,modelLayer)) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?Vector3 dir = Camera.main.transform.position - hit.transform.position; ? ? ? ? ? ? ? ?dir.y = 0;//取消高度 ? ? ? ? ? ? ? ?magnifierCam.transform.position = hit.point + dir * dis; ? ? ? ? ? ? ? ?ui.position = Input.mousePosition; ? ? ? ? ? ? ? ?ui.gameObject.SetActive(true); ? ? ? ? ? ?}else ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?ui.gameObject.SetActive(false);//如果沒(méi)有點(diǎn)到模型 就是不放大 就隱藏放大鏡 ? ? ? ? ? ?} ? ? ? ?}else if(Input .GetMouseButtonUp(0)) ? ? ? ?{ ? ? ? ? ? ?ui.gameObject.SetActive(false);//松開(kāi)鼠標(biāo)就隱藏放大鏡 ? ? ? ?}
? ?}}

整體對(duì)象調(diào)整如下:

最后?給模型添加碰撞器,不添加沒(méi)法點(diǎn)擊交互??!

這個(gè)時(shí)候效果已經(jīng)達(dá)到?。?



制作不易,期待您的點(diǎn)贊關(guān)注和轉(zhuǎn)發(fā)!!!

?????????



需要源碼可以加入會(huì)員,源碼以更新至?xí)T庫(kù)??!


某寶搜索?小森會(huì)員:注意店鋪名?謹(jǐn)防選錯(cuò)??!




unity 放大鏡的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
康马县| 红桥区| 黑河市| 江永县| 阳西县| 永德县| 牙克石市| 霍林郭勒市| 赤水市| 从江县| 嵩明县| 三台县| 周口市| 荆州市| 麻城市| 平邑县| 苏州市| 阿尔山市| 泽州县| 镇沅| 兴仁县| 蕉岭县| 安庆市| 南涧| 比如县| 扶沟县| 文昌市| 望奎县| 长武县| 汤阴县| 阳原县| 西林县| 新沂市| 洛浦县| 隆安县| 朝阳区| 江门市| 清河县| 巩义市| 广宗县| 宁蒗|