html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

unity3d如果你不需要就不要调用函数_编程语言综合

[ ] 已经帮助:人解决问题

   最简单的和所有优化最好的是少工作量的执行。例如,当一个敌人很远最完美的时间就是敌人入睡时可以接受。直到玩家靠近时什么都没有做。这是种缓慢的处理方式的情况:8WvHTML5中文学习网 - HTML5先行者学习网

  function Update ()8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  // 早期进行如果玩家实在是太遥远。8WvHTML5中文学习网 - HTML5先行者学习网

  if (Vector3.Distance(transform.position, target.position) > 100)8WvHTML5中文学习网 - HTML5先行者学习网

  return;8WvHTML5中文学习网 - HTML5先行者学习网

  perform real work work…8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  这不是一个好主意,因为Unity必须调用更新功能,而你正在执行工作的每一个帧。一个比较好的解决办法是禁用行为直到玩家靠近。有3种方法来做到这一点:8WvHTML5中文学习网 - HTML5先行者学习网

  1. 使用OnBecameVisible和OnBecameInvisible。这些回调都是绑到渲染系统的。只要任何相机可以看到物体,OnBecameVisible将被调用,当没有相机看到任何一个,OnBecameInvisible将被调用。这种方法在很多情况下非常有用,但通常在AI中并不是特别有用,因为只要你把相机离开他们敌人将不8WvHTML5中文学习网 - HTML5先行者学习网

  可用。8WvHTML5中文学习网 - HTML5先行者学习网

  function OnBecameVisible () {8WvHTML5中文学习网 - HTML5先行者学习网

  enabled = true;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  function OnBecameInvisible ()8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  enabled = false;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  2.使用触发器。一个简单的球形触发器会工作的非常好。一旦你离开这个影响球你将得到OnTriggerEnter/Exit调用。8WvHTML5中文学习网 - HTML5先行者学习网

  function OnTriggerEnter (c : Collider)8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  if (c.CompareTag(“Player”))8WvHTML5中文学习网 - HTML5先行者学习网

  enabled = true;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  function OnTriggerExit (c : Collider)8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  if (c.CompareTag(“Player”))8WvHTML5中文学习网 - HTML5先行者学习网

  enabled = false;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  3.使用协同程序。Update调用的问题是它们每帧中都发生。很可能会只需要每5秒检检查一次到玩家的距离。这应该会节省大量的处理周期。8WvHTML5中文学习网 - HTML5先行者学习网

  协同程序:特殊类型的函数编程意义,允许阻止它的执行,直到自己的某些条件得到满足。8WvHTML5中文学习网 - HTML5先行者学习网

  function MyCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomething();8WvHTML5中文学习网 - HTML5先行者学习网

  yield; //停留一帧8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomethingElse();8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  当你调用这个函数(启动协程)会否行为就像任何其他的正常功能直到达到产量的指示。该产量指令解释:如指令的产量在这个意义上它停止的功能和返回控制执行的代码,调用该函数返回声明的作品。主要的区别是,产量指令让你拖延执行的代码,后(在最后一个例子中,DoSomethingElse()语句)。8WvHTML5中文学习网 - HTML5先行者学习网

  function MyCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomething(); //立即执行此8WvHTML5中文学习网 - HTML5先行者学习网

  yield; //向调用者返回控制8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomethingElse(); //这将是一帧后执行8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  void Start(){8WvHTML5中文学习网 - HTML5先行者学习网

  MyCoroution();8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  如果您有什么发生后MyCoroutine呼吁更多的代码?让我们看到了一些打印的例子:8WvHTML5中文学习网 - HTML5先行者学习网

  function MyCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  print(“This is printed second”);8WvHTML5中文学习网 - HTML5先行者学习网

  yield; //控制返回到开始功能8WvHTML5中文学习网 - HTML5先行者学习网

  print(“This is printed one fourth, exactly one frame after the third”);8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  void Start(){8WvHTML5中文学习网 - HTML5先行者学习网

  print(“This is printed first”);8WvHTML5中文学习网 - HTML5先行者学习网

  MyCoroutine();8WvHTML5中文学习网 - HTML5先行者学习网

  print(“This is printed third”);8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  你什么时候可以控制指令后,产量代码将被执行。这取决于产量指令参数,根据下表 没有什么:它会等待一帧另一个协程调用:它会等到调用的协程完成执行 阿WaitForSeconds对象:它会等待一段时间 困惑?下面是例子:8WvHTML5中文学习网 - HTML5先行者学习网

  function MyCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomething():   //立即执行8WvHTML5中文学习网 - HTML5先行者学习网

  yield WaitForSeconds(2); //控制权返回给调用者8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomethingElse(); //这将是2秒后执行8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  void Start(){8WvHTML5中文学习网 - HTML5先行者学习网

  MyCoroutine();8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  function MyCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomething():      //立即执行8WvHTML5中文学习网 - HTML5先行者学习网

  yield MyOtherCoroutine();    //去执行MyOtherCoroutine!8WvHTML5中文学习网 - HTML5先行者学习网

  DoSomethingElse();    //这将是执行完毕后执行MyOtherCoroutine8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  function MyOtherCoroutine(){8WvHTML5中文学习网 - HTML5先行者学习网

  DoStuff():     //立即执行8WvHTML5中文学习网 - HTML5先行者学习网

  yield WaitForSeconds(2);   //控制返回到在这种情况下,启动函数的调用者()8WvHTML5中文学习网 - HTML5先行者学习网

  DoMoreStuff(); //这将是2秒后执行8WvHTML5中文学习网 - HTML5先行者学习网

  //MyOtherCoroutine执行完这里8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  void Start(){8WvHTML5中文学习网 - HTML5先行者学习网

  MyCoroutine();8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  Coroutines & Yield8WvHTML5中文学习网 - HTML5先行者学习网

  在编写游戏代码的时候,常常需要处理一系列事件。这可能导致像下面的代码。8WvHTML5中文学习网 - HTML5先行者学习网

  private var state = 0;8WvHTML5中文学习网 - HTML5先行者学习网

  function Update()8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  if (state == 0) {8WvHTML5中文学习网 - HTML5先行者学习网

  // 做步骤08WvHTML5中文学习网 - HTML5先行者学习网

  state = 1;8WvHTML5中文学习网 - HTML5先行者学习网

  return;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  if (state == 1) {8WvHTML5中文学习网 - HTML5先行者学习网

  // 做步骤18WvHTML5中文学习网 - HTML5先行者学习网

  state = 2;8WvHTML5中文学习网 - HTML5先行者学习网

  return;8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  // …8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  更方便的是使用yield语句。yield语句是一个特殊类型的返回,这个确保在下次调用时该函数继续从该yield语句之后执行。8WvHTML5中文学习网 - HTML5先行者学习网

  while(true) {8WvHTML5中文学习网 - HTML5先行者学习网

  // 做步骤08WvHTML5中文学习网 - HTML5先行者学习网

  yield; //等待一帧8WvHTML5中文学习网 - HTML5先行者学习网

  // 做步骤18WvHTML5中文学习网 - HTML5先行者学习网

  yield; //等待一帧8WvHTML5中文学习网 - HTML5先行者学习网

  // …8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  你也可以传递特定值给yield语句来延迟Update函数的执行,直到一个特定的事件发生。8WvHTML5中文学习网 - HTML5先行者学习网

  // 做一些事情8WvHTML5中文学习网 - HTML5先行者学习网

  yield WaitForSeconds(5.0); //等待5秒8WvHTML5中文学习网 - HTML5先行者学习网

  //做更多事情…8WvHTML5中文学习网 - HTML5先行者学习网

  可以叠加和连接coroutines。8WvHTML5中文学习网 - HTML5先行者学习网

  这个例子执行Do,在调用之后立即继续。8WvHTML5中文学习网 - HTML5先行者学习网

  Do ();8WvHTML5中文学习网 - HTML5先行者学习网

  print (“This is printed immediately”);8WvHTML5中文学习网 - HTML5先行者学习网

  function Do ()8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  print(“Do now”);8WvHTML5中文学习网 - HTML5先行者学习网

  yield WaitForSeconds (2);8WvHTML5中文学习网 - HTML5先行者学习网

  print(“Do 2 seconds later”);8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  这个例子将执行Do并等待直到它完成,才继续执行自己。8WvHTML5中文学习网 - HTML5先行者学习网

  //链接coroutine8WvHTML5中文学习网 - HTML5先行者学习网

  yield StartCoroutine(“Do”);8WvHTML5中文学习网 - HTML5先行者学习网

  print(“Also after 2 seconds”);8WvHTML5中文学习网 - HTML5先行者学习网

  print (“This is after the Do coroutine has finished execution”);8WvHTML5中文学习网 - HTML5先行者学习网

  function Do ()8WvHTML5中文学习网 - HTML5先行者学习网

  {8WvHTML5中文学习网 - HTML5先行者学习网

  print(“Do now”);8WvHTML5中文学习网 - HTML5先行者学习网

  yield WaitForSeconds (2);8WvHTML5中文学习网 - HTML5先行者学习网

  print(“Do 2 seconds later”);8WvHTML5中文学习网 - HTML5先行者学习网

  }8WvHTML5中文学习网 - HTML5先行者学习网

  任何事件处理句柄都可以是一个coroutine8WvHTML5中文学习网 - HTML5先行者学习网

  注意你不能在Update或FixedUpdate内使用yield,但是你可以使用StartCoroutine来开始一个函数。8WvHTML5中文学习网 - HTML5先行者学习网

  参考YieldInstruction, WaitForSeconds, WaitForFixedUpdate, Coroutine and MonoBehaviour.StartCoroutine获取更多使用yield的信息。8WvHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助