您的位置:首页 > 其它

【Vuforia】基于Vuforia增强现实开发(二)之模型移动

2016-04-03 10:44 309 查看
前边步骤一样。需要写一个脚本,关联要移动的模型。

跟上一篇相比,知识把对象从AudioSource换成了model,把脚本改了改接着用。

多三个新知识:

1、yield return

2、C#中的IEnumerator类

3、u3D中的开线程——StartCoroutine (move ());穿进去的是一个枚举类。

新建一个plane,以及它的材质球。当作地面。







代码如下:

<span style="font-size:18px;">using UnityEngine;
using System.Collections;
using Vuforia;
public class TestMy : MonoBehaviour,ITrackableEventHandler {
#region PRIVATE_MEMBER_VARIABLES
//public GameObject UI;
private TrackableBehaviour mTrackableBehaviour;
public Transform Car;

#endregion // PRIVATE_MEMBER_VARIABLES

#region UNTIY_MONOBEHAVIOUR_METHODS

void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}

#endregion // UNTIY_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();
//UI.SetActive (true);
StopAllCoroutines();
StartCoroutine (move ());
}
else
{
//UI.SetActive (false);
OnTrackingLost();
}
}

#endregion // PUBLIC_METHODS

IEnumerator move(){
Car.transform.localPosition = new Vector3 (0,-2,0);
while(Car.transform.localPosition!=Vector3.zero){
yield return new WaitForEndOfFrame ();
//相对父级的位置
Car.transform.localPosition = Vector3.MoveTowards (Car.transform.localPosition, Vector3.zero, 0.5f * Time.deltaTime);
}
}

#region PRIVATE_METHODS

private void OnTrackingFound()
{

Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

// 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");
}

private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

// 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");
}

#endregion // PRIVATE_METHODS
}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: