Unity2d游戏拍摄和动画同步问题
Unity2d game shooting and animation sync issue
我是 Unity 新手,正在制作我的第一款 2D 游戏。这一期看到论坛上好几个主题,都没有找到解决方法。
所以我有一个可爱的射击动画和子弹生成。我的问题是,我必须在动画中间的某处生成子弹,但角色同时发射子弹和动画,这会破坏用户体验:)
我附上了一张图片,关于这个问题,这是子弹应该初始化的时刻,但正如你所看到的,它已经在路上了。
请找到我的代码:
GameManager 更新方法调用 attackEnemy 函数:
public void Awake(){
animator = GetComponent ();
animator.SetTrigger ("enemyIdle");
}
//if the enemy pass this point, they stop shooting, and just go off the scren
private float shootingStopLimit = -6f;
public override void attackPlayer(){
//animator.SetTrigger ("enemyIdle");
if (!isAttacking && gameObject.transform.position.y > shootingStopLimit) {
isAttacking = true;
animator.SetTrigger("enemyShoot");
StartCoroutine(doWait());
gameObject.GetComponentInChildren ().fireBullet ();
StartCoroutine (Reload ());
}
}
private IEnumerator doWait(){
yield return new WaitForSeconds(5);
}
private IEnumerator Reload(){
animator.SetTrigger ("enemyIdle");
int reloadTime = Random.Range (4,7);
yield return new WaitForSeconds(reloadTime);
isAttacking = false;
}......
我的问题:
- 如何同步动画和子弹生成?
为什么 doWait() 不起作用? :)
可以从 GameManager 更新中调用 attackPlayer 方法吗?
敌人从屏幕右侧飞向左侧,当他们到达屏幕最右侧时,用户就可以看到他们。我不知道为什么,但是他们首先播放了一个射击动画(没有子弹生成),只有在它之后他们才进行空闲。知道为什么吗?
谢谢,
K
我建议查看动画事件。使用动画事件,您可以调用一个方法来实例化您的子弹。
要使用 Mecanim 动画事件,您需要在 "Edit Animation Event" window 的 "Function" 区域的选定帧中写入要调用的函数的名称。
其他框用于您想要传递给该函数以触发您想到的任何变量。
Triggering/blending 不同动画之间可以用很多不同的方式来完成。事件区更多的是你想触发的其他与动画无关的东西(例如音频、粒子特效等)。
我是 Unity 新手,正在制作我的第一款 2D 游戏。这一期看到论坛上好几个主题,都没有找到解决方法。
所以我有一个可爱的射击动画和子弹生成。我的问题是,我必须在动画中间的某处生成子弹,但角色同时发射子弹和动画,这会破坏用户体验:)
我附上了一张图片,关于这个问题,这是子弹应该初始化的时刻,但正如你所看到的,它已经在路上了。
请找到我的代码: GameManager 更新方法调用 attackEnemy 函数:
public void Awake(){
animator = GetComponent ();
animator.SetTrigger ("enemyIdle");
}
//if the enemy pass this point, they stop shooting, and just go off the scren
private float shootingStopLimit = -6f;
public override void attackPlayer(){
//animator.SetTrigger ("enemyIdle");
if (!isAttacking && gameObject.transform.position.y > shootingStopLimit) {
isAttacking = true;
animator.SetTrigger("enemyShoot");
StartCoroutine(doWait());
gameObject.GetComponentInChildren ().fireBullet ();
StartCoroutine (Reload ());
}
}
private IEnumerator doWait(){
yield return new WaitForSeconds(5);
}
private IEnumerator Reload(){
animator.SetTrigger ("enemyIdle");
int reloadTime = Random.Range (4,7);
yield return new WaitForSeconds(reloadTime);
isAttacking = false;
}......
我的问题: - 如何同步动画和子弹生成?
为什么 doWait() 不起作用? :)
可以从 GameManager 更新中调用 attackPlayer 方法吗?
敌人从屏幕右侧飞向左侧,当他们到达屏幕最右侧时,用户就可以看到他们。我不知道为什么,但是他们首先播放了一个射击动画(没有子弹生成),只有在它之后他们才进行空闲。知道为什么吗?
谢谢, K
我建议查看动画事件。使用动画事件,您可以调用一个方法来实例化您的子弹。
要使用 Mecanim 动画事件,您需要在 "Edit Animation Event" window 的 "Function" 区域的选定帧中写入要调用的函数的名称。
其他框用于您想要传递给该函数以触发您想到的任何变量。
Triggering/blending 不同动画之间可以用很多不同的方式来完成。事件区更多的是你想触发的其他与动画无关的东西(例如音频、粒子特效等)。