Unity3D--枚举+协程控制定点移动

我们做Gear VR只能用触摸板控制移动。要么就写个定位移动,让他在固定地方停留下来。
主要思路是让物体在固定的地方停留,其中用来枚举和协程。枚举来控制点位的个数,协程控制下一步移动的方向。
你也可以在另外脚本中控制枚举状态,让你当前点位完成了你想要的操作,让后在让a->b。或者直接if (cc.position == t1.position){ts = point.c;}让它等于当前位置,直接下步。
你还可以写个协程让它在当前停留多少秒后在进行下布操作。

希望对初学者有帮助,有疑问的可以在下面留言。

在这里插入代码片
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class YDong1 : MonoBehaviour {
	public enum point
	{
		a,
		b,
        c,
        d,
        e,
        f,
        sce,
		third
	}

	public point ts = point.a;
	public Transform t1;
	public Transform t2;
	public Transform t3;
    public Transform t4;
    public Transform t5;
    public Transform t6;
    
    private Vector3 en;

	public Transform cc;

	// Use this for initialization
	void Update() {
		if (ts == point.a)
		{
			en = new Vector3(t1.position.x, t1.position.y, t1.position.z);
			StartCoroutine("YD");
            
        }
		else if (ts == point.b)
		{
			en = new Vector3(t2.position.x, t2.position.y, t2.position.z);
			StartCoroutine("YD");
			if (cc.position == t2.position)
			{
				ts = point.c;
			}
		}
		else if (ts == point.c)
		{
			en = new Vector3(t3.position.x, t3.position.y, t3.position.z);
			StartCoroutine("YD");
            if (cc.position == t3.position)
            {
                ts = point.d;
            }
        }
        else if (ts == point.d)
        {
            en = new Vector3(t4.position.x, t4.position.y, t4.position.z);
            StartCoroutine("YD");
            if (cc.position == t4.position)
            {
                ts = point.e;
            }
        }
        else if (ts == point.e)
        {
            en = new Vector3(t5.position.x, t5.position.y, t5.position.z);
            StartCoroutine("YD");
            if (cc.position == t5.position)
            {
                ts = point.f;
            }
        }
        else if (ts == point.f)
        {
            en = new Vector3(t6.position.x, t6.position.y, t6.position.z);
            StartCoroutine("WO");
        }
        
    }

	// Update is called once per frame
	private IEnumerator YD()
	{
        yield return new WaitForSeconds(3f);
        this.transform.position = Vector3.MoveTowards(this.transform.position, en, Time.deltaTime);
		
	}
	private IEnumerator WO()
	{
		yield return new WaitForSeconds(9f);
		StartCoroutine("YD");
	}
   
}

猜你喜欢

转载自blog.csdn.net/qq_41960265/article/details/86538539