當前位置:
首頁 >
增强现实的解密游戏
發布時間:2024/3/24
36
豆豆
有興趣的朋友可以試試,不過好像不很穩定。
游戲過程的視頻:http://www.bilibili.com/video/av3375068/
游戲的APK下載地址: http://www.nshworkshop.cn/demo/12/arpuzzlegame.apk游戲用到的圖片下載:http://www.nshworkshop.cn/demo/12/pic.zip
?游戲源碼:https://code.csdn.net/wuyt2008/arpuzzlegame
最近在弄增強現實,主要是基于Unity3D和vuforia AR SDK。有個想做真人密室逃脫游戲的朋友看到了,就說這個可以用在真人密室逃脫游戲里,于是就有了這個demo。
這個演示其實很簡單,就是在識別率特定圖片以后,會載入新的場景來推動游戲進程。
Unity3D制作AR圖片識別請看以前的文章:http://blog.csdn.net/wuyt2008/article/details/48326767
Vuforia給的例子中的視頻播放腳本稍微修改下
/*============================================================================== * Copyright (c) 2012-2014 Qualcomm Connected Experiences, Inc. All Rights Reserved. * ==============================================================================*/using UnityEngine; using Vuforia;/// <summary> /// A custom handler that implements the ITrackableEventHandler interface. /// </summary> public class TrackableEventHandler : MonoBehaviour,ITrackableEventHandler {#region PRIVATE_MEMBER_VARIABLESprivate TrackableBehaviour mTrackableBehaviour;private bool mHasBeenFound = false;private bool mLostTracking;private float mSecondsSinceLost;#endregion // PRIVATE_MEMBER_VARIABLESprivate bool track=false;#region UNITY_MONOBEHAVIOUR_METHODSvoid Start(){mTrackableBehaviour = GetComponent<TrackableBehaviour>();if (mTrackableBehaviour){mTrackableBehaviour.RegisterTrackableEventHandler(this);}OnTrackingLost();}void Update(){// Pause the video if tracking is lost for more than two secondsif (mHasBeenFound && mLostTracking){if (mSecondsSinceLost > 0.5f){VideoPlaybackBehaviour video = GetComponentInChildren<VideoPlaybackBehaviour>();if (video != null &&video.CurrentState == VideoPlayerHelper.MediaState.PLAYING){video.VideoPlayer.Pause();}mLostTracking = false;}mSecondsSinceLost += Time.deltaTime;}}#endregion // UNITY_MONOBEHAVIOUR_METHODS#region PUBLIC_METHODS/// <summary>/// Implementation of the ITrackableEventHandler function called when the/// tracking state changes./// </summary>public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus,TrackableBehaviour.Status newStatus){if (newStatus == TrackableBehaviour.Status.DETECTED ||newStatus == TrackableBehaviour.Status.TRACKED ||newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED){OnTrackingFound();}else{OnTrackingLost();}}#endregion // PUBLIC_METHODS#region PRIVATE_METHODSprivate void OnTrackingFound(){Renderer[] rendererComponents = GetComponentsInChildren<Renderer>();Collider[] colliderComponents = GetComponentsInChildren<Collider>();// Enable rendering:foreach (Renderer component in rendererComponents){component.enabled = true;}// Enable colliders:foreach (Collider component in colliderComponents){component.enabled = true;}Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");// Optionally play the video automatically when the target is foundVideoPlaybackBehaviour video = GetComponentInChildren<VideoPlaybackBehaviour>();if (video != null && video.AutoPlay){if (video.VideoPlayer.IsPlayableOnTexture()){VideoPlayerHelper.MediaState state = video.VideoPlayer.GetStatus();if (state == VideoPlayerHelper.MediaState.PAUSED ||state == VideoPlayerHelper.MediaState.READY ||state == VideoPlayerHelper.MediaState.STOPPED){// Pause other videos before playing this onePauseOtherVideos(video);// Play this video on texture where it left offvideo.VideoPlayer.Play(false, video.VideoPlayer.GetCurrentPosition());}else if (state == VideoPlayerHelper.MediaState.REACHED_END){// Pause other videos before playing this onePauseOtherVideos(video);// Play this video from the beginningvideo.VideoPlayer.Play(false, 0);}}}mHasBeenFound = true;mLostTracking = false;track = true;}private void OnTrackingLost(){Renderer[] rendererComponents = GetComponentsInChildren<Renderer>();Collider[] colliderComponents = GetComponentsInChildren<Collider>();// Disable rendering:foreach (Renderer component in rendererComponents){component.enabled = false;}// Disable colliders:foreach (Collider component in colliderComponents){component.enabled = false;}Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");mLostTracking = true;mSecondsSinceLost = 0;if (track) {GameManager.TrackLost(gameObject.name);} track = false;}// Pause all videos except this oneprivate void PauseOtherVideos(VideoPlaybackBehaviour currentVideo){VideoPlaybackBehaviour[] videos = (VideoPlaybackBehaviour[])FindObjectsOfType(typeof(VideoPlaybackBehaviour));foreach (VideoPlaybackBehaviour video in videos){if (video != currentVideo){if (video.CurrentState == VideoPlayerHelper.MediaState.PLAYING){video.VideoPlayer.Pause();}}}}#endregion // PRIVATE_METHODS }這個是控制游戲的類 using UnityEngine; using System.Collections;public static class GameManager {public static int currentScene=0;public static string[] tips = {"努力加載中","開始游戲吧","你找到一個鎖著的箱子","再問問宮森葵,她知道的更多","快去找宮森葵,你找到資料了","恭喜你,游戲已經通關","請把手機放到Cardboard里,請小心周圍情況。"};public static string[] scene = {"Open","SceneOne","SceneTow","SceneSAO","SceneFour","SceneEnd","BoxAR"};private static string[] rnd = {"SceneAB","SceneSAO","SceneKoto","SceneSuzumiya"};public static void TrackLost(string information){switch (currentScene) {case 0:break;case 1:if(information=="Box"){currentScene=2;Application.LoadLevel("LoadScene");}break;case 2:if(information=="Miyamori"){currentScene=3;scene[3]=RandomScene();Application.LoadLevel("LoadScene");}break;case 3:if(information=="SAO"||information=="AB"||information=="Koto"||information=="Suzumiya"){currentScene=4;Application.LoadLevel("LoadScene");}break;case 4:if(information=="Box"){currentScene=5;Application.LoadLevel("LoadScene");}break;default:break;}}private static string RandomScene(){string strReturn = PlayerPrefs.GetString("scene","SceneAB");int temp = Random.Range (0, 4);if(strReturn==rnd[temp]){temp=temp+1;}if(temp>=rnd.Length){temp=0;}strReturn = rnd [temp];PlayerPrefs.SetString ("scene",strReturn);return strReturn;} }
總結
- 上一篇: 怎么调整图片分辨率?如何修改图片分辨率d
- 下一篇: 【android】音乐播放器之数据存储总