Unity中实现愤怒的小鸟蓝鸟分裂功能时如何为克隆体赋予同向速度
实现方案
你的思路是正确的,只需要提前缓存本体的飞行速度,实例化克隆体后直接给克隆体的刚体组件赋值相同速度,最后销毁本体即可。修改后的完整代码如下:
_spawnpoint1edit.Set(0,+2,0); _spawnpoint2edit.Set(0,0,0); _spawnpoint3edit.Set(0,-2,0); if (Input.GetKeyDown(KeyCode.Space) && GetComponent<Rigidbody2D>().velocity.magnitude > 2 && _activated == false) { _activated = true; Debug.Log("Ability Activated"); // 缓存本体的速度,避免重复读取组件 Rigidbody2D mainRb = GetComponent<Rigidbody2D>(); Vector2 flyVelocity = mainRb.velocity; _spawnpoint1 = transform.position + _spawnpoint1edit; _spawnpoint2 = transform.position + _spawnpoint2edit; _spawnpoint3 = transform.position + _spawnpoint3edit; var clone1 = Instantiate (_prefab1, _spawnpoint1 , Quaternion.identity); var clone2 = Instantiate (_prefab2, _spawnpoint2 , Quaternion.identity); var clone3 = Instantiate (_prefab3, _spawnpoint3 , Quaternion.identity); // 给克隆体赋值和本体完全一致的速度 clone1.GetComponent<Rigidbody2D>().velocity = flyVelocity; clone2.GetComponent<Rigidbody2D>().velocity = flyVelocity; clone3.GetComponent<Rigidbody2D>().velocity = flyVelocity; // 可选:防止克隆体重复触发分裂技能,尖括号内替换为你挂载在鸟上的脚本类名 // clone1.GetComponent<BirdController>()._activated = true; // clone2.GetComponent<BirdController>()._activated = true; // clone3.GetComponent<BirdController>()._activated = true; // 销毁本体对象 Destroy(gameObject); }
注意事项
- 请确保
_prefab1、_prefab2、_prefab3三个预制体都已挂载Rigidbody2D组件,否则会出现空引用报错 - 如果三个克隆体参数完全一致,可复用同一个预制体变量,无需定义三个不同的prefab
- 如果你需要克隆体和本体的旋转角度保持一致,可将
Instantiate的第三个参数从Quaternion.identity替换为transform.rotation
内容的提问来源于stack exchange,提问作者Mohamad Moheb
相关产品推荐
相关产品推荐

