当前位置:   article > 正文

Unity间隔或延迟固定的时间让物体移动一下,绘制线条_unity间隔一段时间

unity间隔一段时间

1, 新建工程做相关设置。

2  run.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class run : MonoBehaviour {
  5. [Header("Time Variables")]
  6. [Tooltip("设置间隔时间的两个变量")]
  7. public float proTime = 0.0f;
  8. public float NextTime = 0.0f;
  9. [Header("Speed")]
  10. [Tooltip("控制物体移动的快慢")]
  11. [Range(1, 100)]
  12. public float scaleSpeed = 5.0f;
  13. // Use this for initialization
  14. void Start () {
  15. }
  16. // Update is called once per frame
  17. void Update () {
  18. proTime = Time.fixedTime;
  19. if (proTime - NextTime == 3)
  20. //if (proTime - NextTime > 3)
  21. {
  22. print ("FixedTime Here" + (proTime - NextTime));
  23. transform.Translate (Vector3.up*scaleSpeed);
  24. //transform.Translate (Vector3.up*scaleSpeed*Time.deltaTime);
  25. NextTime = proTime;
  26. }
  27. }
  28. }

2 第二种思路是使用 InvokeRepeating()函数

InvokeRepeating("clearAnn", 1, 3); 放在Start里面,延迟1秒运行,之后没有间隔3秒钟调用一次 clearAnn函数

这样程序运行后,函数 clearAnn函数就可以和Update()函数配合实现多线程。

如果要延迟一段时间可以 clearAnn函数中设置

		System.Threading.Thread.Sleep (3);

3 第三种思路是使用多线来实现

  1.  private Thread clearThread;
  2. Void Start()
  3. {
  4. clearThread = new Thread (clearAnnotations);
  5. }
  6. void Update ()
  7. {
  8. //do something
  9. }
  10. void clearAnnotations()
  11. {
  12. //do another something
  13. }

如果在clearAnnotations中实现延时则如下,当然也可在里面根据需要控制bool变量的值,从而和update()里面的功能相配合,实现多线程。

  1. void clearAnnotations()
  2. {
  3. Thread.Sleep (3);
  4. this.GetComponent<LineRenderer> ().positionCount = 0;
  5. isNUll = true;
  6. i = 0;
  7. }

4  我想到的每四种方案是使用协程

但发现不行,也许是我程序写的不对。我要实现的功能是在Update里面绘制线条,在绘制完后大概3秒钟左右把绘制的清除,以便有利于我继续绘制,并继续3秒钟左右清除,一直循环。

但协程的效果是根本就绘不出线条,全部清除了。

我仔细一想,这应该和协同的原理有关,它就是一个主线程,然后把cpu分成小的单元,一会给yield之前的部分,一会给yield之后的部分。但也好像是不对呀。

不知道 为什么?

 

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.Threading;
  5. public class Annotations : MonoBehaviour {
  6. //to find HTC vive controller(Right or Left)
  7. //public SteamVR_TrackedObject trackedObj;
  8. private Thread clearThread;
  9. public float proTime = 0.0f;
  10. public float nextTime = 0.0f;
  11. private LineRenderer line;
  12. private int i = 0;
  13. Vector3 RunStart = Vector3.zero;
  14. Vector3 RunNext = Vector3.zero;
  15. bool isNUll = true;
  16. // Use this for initialization
  17. void Start ()
  18. {
  19. clearThread = new Thread (clearAnnotations);
  20. line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件
  21. //line.SetColors(Color.blue, Color.red);//设置颜色
  22. //line.SetWidth(0.2f, 0.1f);//设置宽度
  23. //InvokeRepeating("clearAnn", 1, 3);
  24. }
  25. // Update is called once per frame
  26. void Update ()
  27. {
  28. var point = this.transform.position;
  29. //print ("point"+point);
  30. //To have lines using LineRenderer
  31. if(isNUll)
  32. {
  33. RunStart = point;
  34. isNUll = false;
  35. }
  36. RunNext = point;
  37. //print ("RunNext"+RunNext);
  38. if (RunStart != RunNext) {
  39. i++;
  40. line.SetVertexCount(i);//设置顶点数
  41. line.SetPosition(i-1, point);
  42. }
  43. RunStart = RunNext;
  44. // clear annotations
  45. // proTime = Time.fixedTime;
  46. // if (proTime - nextTime == 5) {
  47. //
  48. // this.GetComponent<LineRenderer> ().positionCount = 0;
  49. // isNUll = true;
  50. // i = 0;
  51. // nextTime = proTime;
  52. // }
  53. // StartCoroutine (clearA());
  54. if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.Q)) {
  55. this.GetComponent<LineRenderer> ().positionCount = 0;
  56. isNUll = true;
  57. i = 0;
  58. }
  59. }
  60. void clearAnnotations()
  61. {
  62. Thread.Sleep (3);
  63. this.GetComponent<LineRenderer> ().positionCount = 0;
  64. isNUll = true;
  65. i = 0;
  66. }
  67. IEnumerator clearA()
  68. {
  69. print ("222222");
  70. Thread.Sleep (3);
  71. yield return null;
  72. this.GetComponent<LineRenderer> ().positionCount = 0;
  73. isNUll = true;
  74. i = 0;
  75. }
  76. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/108206?site
推荐阅读
相关标签
  

闽ICP备14008679号