我知道这是一个有点愚蠢的问题,但是我将如何通过脚本(脚本附加到游戏对象)引用游戏对象的子项(立方体)。(相当于 GetComponent 之类的东西)
在Unity3D中,这是我的代码:
void ActivateBuff1(){
gun.equippedGun.msPerShot /= 2;
gun.equippedGun.shotsLeftInMag += 10;
StartCoroutine (WaitRage ());
}
void ActivateBuff2(){
player.speedModifier *= 1.5f;
StartCoroutine (WaitSpeed ());
}
IEnumerator WaitRage(){
yield return new WaitForSeconds(powerUpDuration);
gun.equippedGun.msPerShot *= 2;
}
IEnumerator WaitSpeed(){
yield return new WaitForSeconds(powerUpDuration);
player.speedModifier /= 1.5f;
}
Run Code Online (Sandbox Code Playgroud)
每次玩家进入加电状态时,都会调用其中一个ActivateBuff方法.显然,powerUps效果并不会永远持续下去,所以我常常IEnumerators在等待一定秒数后反转原始方法的效果.但是出于某种原因,IEnumerators永远不会调用代码.请帮助...(并请建议另一种编码方式,因为我知道它不是很干净)
我试图调用一个设置一些变量的协同程序,等待几秒钟,然后将它们设置回来.
不幸的是,整个协程都在同时开始,无需等待.在这种情况下,它几乎就像从未调用过该函数一样.
public void Dash(){
lastDashTime = Time.time + dashWaitDuration;
motionBlur (); //this call is not working as expected
animator.SetFloat ("Speed", 0);
playerRigidBody.MovePosition (playerRigidBody.position + transform.forward * 1.75f);
}
//this is the coroutine
IEnumerator motionBlur(){
print ("Hello");
camMotionBlur.jitter = 10;
camMotionBlur.enabled = true;
yield return new WaitForSeconds (2);
camMotionBlur.enabled = false;
camMotionBlur.jitter = 0.125f;
}
Run Code Online (Sandbox Code Playgroud)