前言
這個學(xué)期馬上就要結(jié)束,unity要求做個項目,每到考試周,就喜歡上了黑夜。。。。。。。。。。。。。。。。
我是做了一個汽車模擬,emmmm…勉強算吧
總共有六個場景
3.1 登錄注冊場景
3.2 加載場景
3.3 選擇場景
3.4 迷宮地圖場景
3.5 夜晚道路場景
3.6 科目二模擬場景汽車模型和和晚上的場景是store免費找的,迷宮和科目二模擬是搭的,很簡陋,沒眼看.
一些功能都是網(wǎng)上零零碎碎學(xué)的然后自己去摸索的.
總的來說開始很想die,到后面慢慢就熟悉了,依然想die
最后做出來還是挺…不錯的.
錄屏
Automobile simulation
一登陸注冊場景
有密碼登錄面板,注冊賬號面板,設(shè)置面板
代碼:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class LoginTest : MonoBehaviour{ public InputField user; public InputField pass; public InputField r_User; public InputField r_Pass; public InputField r_CPass; public Text text; public GameObject registerPanel; public GameObject settingPanel; public Toggle toggle; public Slider slider; string rUser = ""; string rPass = ""; string rCPass = ""; AudioSource au; // Start is called before the first frame update void Start() { user = user.GetComponent<InputField>(); pass = pass.GetComponent<InputField>(); text = text.GetComponent<Text>(); r_User = r_User.GetComponent<InputField>(); r_CPass = r_CPass.GetComponent<InputField>(); r_Pass = r_Pass.GetComponent<InputField>(); toggle = toggle.GetComponent<Toggle>(); slider = slider.GetComponent<Slider>(); au = GetComponent<AudioSource>(); //user:123456 //pass:888888 } public void ActiveSettingPanel() { settingPanel.SetActive(true); } public void CloseSettingPanel() { settingPanel.SetActive(false); } public void ActiveRegisterPanel() { registerPanel.SetActive(true); r_User.text = ""; r_Pass.text = ""; r_CPass.text = ""; } public void DisActiveRegisterPanel() { rUser = r_User.text; rPass = r_Pass.text; rCPass = r_CPass.text; if (rUser!=""&&rPass==rCPass&&rPass!=null) { registerPanel.SetActive(false); } else { r_User.text = ""; r_Pass.text = ""; r_CPass.text = ""; } } public void CloseRegisterPanel() { registerPanel.SetActive(false); } public void OnLogin() { if (user.text ==rUser&&pass.text==rPass&&pass.text==rCPass&&rPass!="") { print("登錄成功"); text.text = "賬號密碼正確,登錄成功"; Invoke("ClearFailText", 1); text.color = Color.green; Invoke("GotoLoadingScene",1); } else { print("登錄失敗"); user.text = ""; pass.text = ""; text.text = "賬號或密碼錯誤,登錄失敗"; Invoke("ClearFailText",1); text.color = Color.red; } } public void ClearFailText() { text.text = ""; } public void GotoLoadingScene() { UnityEngine.SceneManagement.SceneManager.LoadScene(1);//跳轉(zhuǎn)場景 } // Update is called once per frame void Update() { au.mute = toggle.isOn; au.volume = slider.value; }}
二加載場景
代碼:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class EnterLoading : MonoBehaviour{ float t = 0; Slider slider; public Text text; // Start is called before the first frame update void Start() { slider = GetComponent<Slider>(); text = text.GetComponent<Text>(); text.text = ""; slider.value = 0; } // Update is called once per frame void Update() { t += Time.deltaTime; slider.value = t * 10; text.text = (int)slider.value + "%"; if (t >= 10) { slider.value = 100; text.text = 100 + "%"; UnityEngine.SceneManagement.SceneManager.LoadScene(2); } }}
三選擇場景
場景轉(zhuǎn)換和轉(zhuǎn)換效果代碼:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;public class SceneLoad : MonoBehaviour{ public Image image_Effect; public float speed = 1; void Start() { StartCoroutine(SceneLoadIn()); } public void OnClick_Btn_LoadScene_02(string SceneName) { StartCoroutine(SceneLoadOut(SceneName)); } //淡出 IEnumerator SceneLoadOut(string SceneName) { Color tempColor = image_Effect.color; tempColor.a = 0; image_Effect.color = tempColor; while (image_Effect.color.a < 1) { //Time.deltaTime 指的是當(dāng)前這一幀。 image_Effect.color += new Color(0, 0, 0, speed * Time.deltaTime); yield return null; } SceneManager.LoadScene(SceneName); } //淡入 IEnumerator SceneLoadIn() { Color temColor = image_Effect.color; temColor.a = 0; image_Effect.color = temColor; while (image_Effect.color.a > 0) { image_Effect.color += new Color(0, 0, 0, -speed * Time.deltaTime); yield return null; } }}
環(huán)島場景
攝像機跟著汽車代碼
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class CameraFollow : MonoBehaviour{ [SerializeField] private Vector3 offset; [SerializeField] private Transform target; [SerializeField] private float translateSpeed; [SerializeField] private float rotationSpeed; private void FixedUpdate() { HandleTranslation(); HandleRotation(); } private void HandleTranslation() { var targetPosition = target.TransformPoint(offset); transform.position = Vector3.Lerp(transform.position, targetPosition, translateSpeed * Time.deltaTime); } private void HandleRotation() { var direction = target.position - transform.position; var rotation = Quaternion.LookRotation(direction, Vector3.up); transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotationSpeed * Time.deltaTime); }}
汽車加速剎車等聲音代碼:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class AudioManage : MonoBehaviour{ AudioSource au; public AudioClip[] clip = new AudioClip[4]; // Start is called before the first frame update void Start() { au = GetComponent<AudioSource>(); } public void PlayAudio(int num) { au.clip = clip[num]; au.Play(); } // Update is called once per frame void Update() { }}
汽車移動控制,車燈效果,加速特效等代碼
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class CarController1 : MonoBehaviour{ AudioManage audioManage; [SerializeField] public GameObject text; public GameObject lig; int li=0; [SerializeField] public GameObject effect1; [SerializeField] public GameObject effect2; private const string HORIZONTAL = "Horizontal"; private const string VERTICAL = "Vertical"; private float HorizontalInput; private float verticalInput; private float currentSteerAngle; private float currentbreakForce; private bool isBreaking; [SerializeField] private float motorForce; [SerializeField] private float breakForce; [SerializeField] private float maxSteerAngle; [SerializeField] private WheelCollider frontLeftWheelCollider; [SerializeField] private WheelCollider frontRightWheelCollider; [SerializeField] private WheelCollider rearLeftWheelCollider; [SerializeField] private WheelCollider rearRightWheelCollider; [SerializeField] private Transform frontLeftWheelTransform; [SerializeField] private Transform frontRightWheelTransform; [SerializeField] private Transform rearLeftWheelTransform; [SerializeField] private Transform rearRightWheelTransform; void Start() { audioManage = GameObject.Find("AudioManage").GetComponent<AudioManage>(); } private void FixedUpdate() { //Time.timeScale = 1.0f; //text.SetActive(false); GetInput(); HandleMotor(); HandleSteering(); UpdateWheels(); } private void GetInput() { HorizontalInput = Input.GetAxis(HORIZONTAL); verticalInput = Input.GetAxis(VERTICAL); isBreaking = Input.GetKey(KeyCode.Space); //isShift = Input.GetKey(KeyCode.LeftShift); } private void HandleMotor() { frontLeftWheelCollider.motorTorque = verticalInput * motorForce; frontRightWheelCollider.motorTorque = verticalInput * motorForce; if (Input.GetKeyDown(KeyCode.LeftShift)) { audioManage.PlayAudio(0); effect1.SetActive(true); effect2.SetActive(true); frontLeftWheelCollider.motorTorque = 20000000.0f; frontRightWheelCollider.motorTorque = 20000000.0f; } if (Input.GetKey(KeyCode.L)) { if (li == 0) { lig.SetActive(true); li = 1; } else { lig.SetActive(false); li = 0; } } if (Input.GetKeyDown(KeyCode.X)) { audioManage.PlayAudio(1); frontLeftWheelCollider.motorTorque = -20000000.0f; frontRightWheelCollider.motorTorque = -20000000.0f; } if (Input.GetKeyDown(KeyCode.W)) audioManage.PlayAudio(3); if (Input.GetKeyDown(KeyCode.S)) { audioManage.PlayAudio(2); effect1.SetActive(false); effect2.SetActive(false); } currentbreakForce = isBreaking ? breakForce : 0f; if (isBreaking) { ApplyBreaking(); } } private void ApplyBreaking() { frontRightWheelCollider.brakeTorque = currentbreakForce; frontLeftWheelCollider.brakeTorque = currentbreakForce; rearRightWheelCollider.brakeTorque = currentbreakForce; rearRightWheelCollider.brakeTorque = currentbreakForce; } private void HandleSteering() { currentSteerAngle = maxSteerAngle * HorizontalInput; frontLeftWheelCollider.steerAngle = currentSteerAngle; frontRightWheelCollider.steerAngle = currentSteerAngle; } private void UpdateWheels() { UpdateSinglewheel(frontLeftWheelCollider, frontLeftWheelTransform); UpdateSinglewheel(frontRightWheelCollider, frontRightWheelTransform); UpdateSinglewheel(rearRightWheelCollider, rearRightWheelTransform); UpdateSinglewheel(rearLeftWheelCollider, rearLeftWheelTransform ); } private void UpdateSinglewheel(WheelCollider wheelCollider, Transform wheelTransform) { Vector3 pos; Quaternion rot; wheelCollider.GetWorldPose(out pos, out rot); wheelTransform.rotation = rot; wheelTransform.position = pos; }}
時間代碼和計時代碼
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using System;public class GetTime1 : MonoBehaviour{ public Text TxtCurrentTime; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { DateTime NowTime = DateTime.Now.ToLocalTime(); TxtCurrentTime.text = NowTime.ToString("時間:yyyy-MM-dd HH:mm:ss"); }}
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class time : MonoBehaviour{ private int hour; private int minute; private int second; private int millisecond; //已經(jīng)花費的時間 float timeSpeed = 0.0f; //顯示時間區(qū)域的文本 Text text_timeSpeed; // Start is called before the first frame update void Start() { text_timeSpeed = GetComponent<Text>(); } // Update is called once per frame void Update() { timeSpeed += Time.deltaTime; hour = (int)timeSpeed / 3600; minute = ((int)timeSpeed - hour * 3600) / 60; second = (int)timeSpeed - hour * 3600 - minute * 60; //text_timeSpeed.text = string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second); millisecond = (int)((timeSpeed - (int)timeSpeed) * 1000); text_timeSpeed.text = string.Format("計時:{0:D2}:{1:D2}:{2:D2}.{3:D3}", hour, minute, second, millisecond); }}
科目二場景
碰撞檢測觸碰白線代碼
using System.Collections;using System.Collections.Generic;using UnityEngine;public class delay : MonoBehaviour{ [SerializeField] public GameObject text; private void OnCollisionEnter(Collision collision) { //Time.timeScale = 0; text.SetActive(true); }}
進(jìn)入模擬測試前的白線和結(jié)束后的白線代碼
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Tanchuan : MonoBehaviour{ int i = 0; public GameObject text; private void OnCollisionEnter(Collision collision) { if (i==0) { i = 1; Time.timeScale = 0; text.SetActive(true); } }}
總結(jié)
三個場景里有相同的代碼腳本,直接復(fù)制就行
這是個團(tuán)隊干的活!!一個人干會累死!文章來源:http://www.zghlxwxcb.cn/news/detail-401000.html
https://download.csdn.net/download/weixin_44954896/85583972?spm=1001.2014.3001.5503
工程文件已上傳,自取
包括所有素材源代碼。打開即可運行。文章來源地址http://www.zghlxwxcb.cn/news/detail-401000.html
到了這里,關(guān)于Unity 3D汽車模擬駕駛期末大作業(yè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!