前边步骤一样。需要写一个脚本,关联要移动的模型。
跟上一篇相比,知识把对象从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>