unity3d的c#的多线程代码,求参考。

如题所述

第1个回答  2017-08-25
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class uniqueAttackQ
{
public float fireRate;
public float fireGapTime;
public float prepareTime;
public int loopTimes;
public int wavesTimes;

public int numberOfLoopTimes;
public int numberOfWavesTimes;
}
public class Boss : MonoBehaviour {
public uniqueAttackQ UAQ;

public GameObject lockThePlayer;
public float speed;
private string behavior;
private float Direction;

public float moveTime;
public float attackGapTime;
public float uniqueAttackGapTime;

public new Rigidbody rigidbody;
Vector3 movement = new Vector3(1, 0, 0);

private float nextTime = 0;
private int numberOfBolt = 0;

public GameObject weapon;
// Use this for initialization
IEnumerator AttackWaves()
{
behavior = "move";
yield return new WaitForSeconds(moveTime);//核心语句。
while (true)
{
while (true)
{
Instantiate(weapon, transform.position + new Vector3(0.2f, 0, 0), transform.rotation);
Instantiate(weapon, transform.position + new Vector3(-0.2f, 0, 0), transform.rotation);
GetComponent<AudioSource>().Play();
yield return new WaitForSeconds(UAQ.fireRate);
UAQ.numberOfLoopTimes++;
if (UAQ.numberOfLoopTimes > UAQ.loopTimes)
break;
}
UAQ.numberOfLoopTimes = 0;
yield return new WaitForSeconds(UAQ.fireGapTime);

for(int i = 0; i < 144; i++)
{
Instantiate(weapon, transform.position, Quaternion.Euler(new Vector3(0, i*10, 0)));
yield return new WaitForSeconds(0.01f);////
GetComponent<AudioSource>().Play();
}
yield return new WaitForSeconds(UAQ.fireGapTime);

for(int i = 0; i < 144; i++)
{
Instantiate(weapon, transform.position, Quaternion.Euler(new Vector3(0, i * 10, 0)));
GetComponent<AudioSource>().Play();
}
yield return new WaitForSeconds(UAQ.fireGapTime);
for (int i = 0; i <30 ; i++)
{
Instantiate(weapon, transform.position, Quaternion.Euler(new Vector3(0, -15+i, 0)));
yield return new WaitForSeconds(0.01f);////
GetComponent<AudioSource>().Play();
}
for (int i = 0; i < 30; i++)
{
Instantiate(weapon, transform.position, Quaternion.Euler(new Vector3(0, 15-i, 0)));
yield return new WaitForSeconds(0.01f);////
GetComponent<AudioSource>().Play();
}

UAQ.numberOfWavesTimes++;
if (UAQ.numberOfWavesTimes > UAQ.wavesTimes)
break;
}
UAQ.numberOfWavesTimes = 0;
......

这是一个自己编的弹幕游戏的Boss攻击脚本,我复制了前半部分给你,我对协程也不太了解。
大致分为两部分,一部分是IEnumerator AttackWaves()方法,如上文所示。另一部分在start()中,为:{StartCoroutine(SpawnWaves());}

Unity3D如何启用多线程?
unity支持c#语言,用c#写多线程:using System.Threading;...Thread thread1 = new Thread(myThread);\/\/thread1:线程名 \/\/myThread:要运行的函数名 thread1.Start();\/\/启动线程

unity3d的c#的多线程代码,求参考。
unity脚本本身是没有多线程概念的,可以用协程来代替 而对于一些特殊的工具类(比如Socket单例)可以使用多线程,使用方法和.net中一样

在unity3D: c# 怎样调用另外一个c#脚本里面东西?
例:第一个脚本名字为Class_1,第二个脚本名字为Class_2,Class_1调用Class_2 如果Class_2没有绑定在任何GameObject上,那在Class_1里写法:Class_2 c2 = new Class_2();如果Class_2绑定在GameObject上,那在 Class_1里写法:Class_2 c2 = null;void Start(){ c2 = GameObject.Find("绑定的...

unity3d C#脚本多线程为什么只运行一次
如果想不停的运行的话 你可以在ReadP方法利放上死循环 while(true){ ...}

unity3d是否支持写成多线程程序?如果支持的话需要注意什么
仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用 支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

在unity3d中c#代码 List<Color> fill = new List<Color>(); 请问这...
new 了一个list集合,集合里面放的是Color对象

用unity3D 读取并且修改C#脚本中的东西比如数字5,最好有完整代码,谢谢...
public GameObject num;void Start(){ num.GetComponent<UILabel>().text = "5"} num是你unity中拖进来的label控件

unity3d c#脚本小问题
第一行是在建立一个胶囊基本体,而第二行是获取这个基本体上的刚体组件,如果没有其他代码的话,这个刚体组件还没附加上,可以用AddComponent()函数来附加rigidbody组件。c#的话,一般用 GetComponent<Rigidbody>() 这种方式来获取

Unity3D的协程和C#线程之间的区别是什么?
【答案】:多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问Unity3D的对象、组件、方法。Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的...

深入学习Unity3d,要把C#学到什么程度,最好帮忙说详细一点,万分感谢,分...
这里的重点恰恰不是需要C#的特性而是需要熟悉面向对象语言的共性以及Unity3D脚本编程的特点特别是Scripting API(当然您如果重点在插件开发、服务器端开发等方面,那就另说)。重点不是记忆而是应用和理解,实际上常用的场景对象并不多,并且像美工、程序员、构架师等不同的开发角色需要掌握的重点也不一样,...

相似回答