實驗2:仿真系統功能實現
1.實驗目的
(1)熟悉在Unity中設置仿真場景;
(2)熟悉在Unity中C#語言的使用;
(3)熟悉仿真功能的實現。
2.實驗內容
新建一個仿真場景,完成下列功能:
(1)使用Unity的基本建模功能設置一些三維場景(自行發揮想象,進行建模設計)
(2)實現漫游功能,可以在場景中鍵盤控制前后左右移動,鼠標控制旋轉,完成基本的場景漫游功能。(自行設計)
(3)使用射線,實現獲取鼠標的點擊功能。(自行設計)
(4)制作內部動畫,配合鼠標點擊,實現播放動畫。(自行設計)
(5)設置觸發器,當漫游相機進到入觸發器中時,執行動畫的播放。(自行設計)
(6)添加背景音樂和鼠標點擊的音效(自行設計)
(7)添加UI按鈕設計,要求可以返回主控界面。(自行設計)
(8)打包,生成可執行文件,要求可執行文件脫離Unity環境后,能夠自行運行。
3.實驗步驟
第一步:構建三維向量
創建一個新的場景用來構建三維場景
接著添加地面
接著,可以通過對象中自帶的組件去改變地形
通過組件中自帶的功能 可以調整地形,構建出自己需要的地勢
接著,通過增加樹木花草等,構建出基本的三維場景
這里我使用的是另一種方法,可以去素材商城中添加一下免費的素材,可以方便搭建場景。
第二步:實現漫游功能
將該代碼附加加需要控制的物體上,即可實現控制物體移動。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Component1 : MonoBehaviour
{GameObject obj;public float floSpeed = 10;public float floRotate = 100;void Start(){//第三人稱視角跟隨Camera.main.transform.SetParent(this.transform);Camera.main.transform.localPosition = new Vector3(0, 3, -4);Camera.main.transform.localEulerAngles = new Vector3(6, 0, 0);} }void Update(){move();look();}private void look(){float y = Input.GetAxis("Mouse X") * floRotate * Time.deltaTime;transform.Rotate(transform.up, y);}private void move(){ float x =Input.GetAxis("Horizontal") *floSpeed* Time.deltaTime;float z =Input.GetAxis("Vertical") *floSpeed* Time.deltaTime;transform.Translate(x, 0, z);}
}
第三步:使用射線,獲得鼠標點擊功能
當點擊地面時候,返回地面的坐標。
第四步:制作內部動畫,配合鼠標點擊,實現播放動畫
可以通過右鍵--->Create創建一個Animation
為了方便后面的動畫設計,我們這里導入一個素材
?通過設置動畫執行順序 和條件,完成撿東西動畫的制作
第五步:添加背景音樂
右鍵--->Audio ?添加一個音樂組件
導入音樂素材,拖入Audio組件中
通過按B去設置背景音樂的播放private void playMusic(){if (Input.GetKey(KeyCode.B)){if(ads.isPlaying){ads.Pause();}else{ads.Play();}}}
通過ZX去調節音量大小private void changeVolume(){if (Input.GetKey(KeyCode.Z)){ads.volume--;}else if (Input.GetKey(KeyCode.X)){ads.volume++;}}
第六步:添加UI按鈕設計,要求可以返回主控界面。
添加UI button按鈕,設計一個返回按鈕
編輯代碼,當點擊按鈕時候 跳轉到登錄的場景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro; //新版
using UnityEngine.UI; //舊版GUI命名空間
using System;
using UnityEngine.SceneManagement;public class Component11 : MonoBehaviour
{public Button button;// Start is called before the first frame updatevoid Start(){button.onClick.AddListener(ClickButton);}// Update is called once per framevoid ClickButton(){SceneManager.LoadScene(0);}
}