【Unity3D应用案例系列】Unity3D中实现《3D照片墙》
推薦閱讀
- CSDN主頁
- GitHub開源地址
- Unity3D插件分享
- 簡書地址
- 我的個(gè)人博客
- QQ群:1040082875
大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時(shí)更新Unity開發(fā)技巧,覺得有用記得一鍵三連哦。
一、前言
首先,介紹一波我這個(gè)專欄:Unity3D之Unity應(yīng)用案例
Unity3D不僅僅可以開發(fā)游戲,還有非常多的開發(fā)方向,秉承著興趣為先,將可以使用Unity制作的各種應(yīng)用案例,分享如何進(jìn)行開發(fā),如何實(shí)現(xiàn),希望大家可以在感興趣的地方,學(xué)習(xí)到自己想要學(xué)習(xí)的東西。
今天就來實(shí)現(xiàn)一個(gè)3D照片墻的效果。
我對于這個(gè)項(xiàng)目的構(gòu)思就是照片是3D的,可以滑動(dòng),然后使用DoTween插件去做動(dòng)畫平滑移動(dòng)。
OK,那就正式開始。
先看一下效果圖:
二、正式開發(fā)
新建項(xiàng)目,我使用的版本是Unity3D 2019.4.7f1,模板選用3D:
(1)導(dǎo)入DoTween插件。
(2)新建Canvas,設(shè)置參數(shù):
設(shè)置Canvas的坐標(biāo)到0,0,0:
(3)在Canvas新建N個(gè)Image:
(4)設(shè)置Main Camera的屬性:
設(shè)置完的樣子:
反正就是讓Image在屏幕中間就可以了。
(5)新建腳本UIRotate.cs,雙擊打開腳本,編輯代碼:
using DG.Tweening; using UnityEngine; using UnityEngine.EventSystems;public class UIRotate : MonoBehaviour {private int halfSize;private GameObject[] gameObjects;/// <summary>/// 圓半徑/// </summary>private int r = 300;/// <summary>/// 相間角度/// </summary>private int angle;private void Start(){//初始化數(shù)組var childCount = transform.childCount;//計(jì)算出中點(diǎn)halfSize = (childCount - 1) / 2;//求出圓內(nèi)角度angle = 360 / childCount;//初始gameObjects = new GameObject[childCount];for (var i = 0; i < childCount; i++){gameObjects[i] = transform.GetChild(i).gameObject;SetPosition(i);SetDeepin(i);}}/// <summary>/// 設(shè)置物體位置/// </summary>private void SetPosition(int index){float x = 0;float z = 0;if (index < halfSize){int id = halfSize - index;x = r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else if (index > halfSize){int id = index - halfSize;x = -r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else{x = 0;z = -r;}Tweener tweener = gameObjects[index].GetComponent<RectTransform>().DOLocalMove(new Vector3(x, 0, z), 1);}private void SetDeepin(int index){//計(jì)算圖片深度也就是z軸的距離,離攝像機(jī)的遠(yuǎn)近int deepin = 0;if (index < halfSize){deepin = index;}else if (index > halfSize){deepin = gameObjects.Length - (1 + index);}else{deepin = halfSize;}gameObjects[index].GetComponent<RectTransform>().SetSiblingIndex(deepin);} }(6)將UIRotate.cs腳本附到Canvas對象上,運(yùn)行程序:
(7)添加左右拖動(dòng)代碼,繼續(xù)修改UIRotate.cs代碼:
運(yùn)行程序:
(8)導(dǎo)入照片最后試一下:
三、總結(jié)
在Unity3D中實(shí)現(xiàn)了3D照片墻,雖然效果出來了,但是想要實(shí)現(xiàn)更加美觀的效果還需要一些努力。
源代碼就放在CSDN吧:
https://download.csdn.net/download/q764424567/84045547
你的點(diǎn)贊就是對博主的支持,有問題記得留言:
博主還有跟多寶藏文章等待你的發(fā)掘哦:
| Unity3D開發(fā)小游戲 | 小游戲開發(fā)教程 | 分享一些使用Unity3D引擎開發(fā)的小游戲,分享一些制作小游戲的教程。 |
| Unity3D從入門到進(jìn)階 | 入門 | 從自學(xué)Unity中獲取靈感,總結(jié)從零開始學(xué)習(xí)Unity的路線,有C#和Unity的知識。 |
| Unity3D之UGUI | UGUI | Unity的UI系統(tǒng)UGUI全解析,從UGUI的基礎(chǔ)控件開始講起,然后將UGUI的原理,UGUI的使用全面教學(xué)。 |
| Unity3D之讀取數(shù)據(jù) | 文件讀取 | 使用Unity3D讀取txt文檔、json文檔、xml文檔、csv文檔、Excel文檔。 |
| Unity3D之?dāng)?shù)據(jù)集合 | 數(shù)據(jù)集合 | 數(shù)組集合:數(shù)組、List、字典、堆棧、鏈表等數(shù)據(jù)集合知識分享。 |
| Unity3D之VR/AR(虛擬仿真)開發(fā) | 虛擬仿真 | 總結(jié)博主工作常見的虛擬仿真需求進(jìn)行案例講解。 |
| Unity3D之插件 | 插件 | 主要分享在Unity開發(fā)中用到的一些插件使用方法,插件介紹等 |
| Unity3D之日常開發(fā) | 日常記錄 | 主要是博主日常開發(fā)中用到的,用到的方法技巧,開發(fā)思路,代碼分享等 |
| Unity3D之日常BUG | 日常記錄 | 記錄在使用Unity3D編輯器開發(fā)項(xiàng)目過程中,遇到的BUG和坑,讓后來人可以有些參考。 |
總結(jié)
以上是生活随笔為你收集整理的【Unity3D应用案例系列】Unity3D中实现《3D照片墙》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 字符设备驱动结构(四)——
- 下一篇: 2021-07-13