我制造了一个将向玩家射击的敌人。我在泳池出现期间将其打开并尝试将其启动,但是由于某种原因它没有移动
我有两个用于子弹脚本的脚本和一个用于发射子弹的敌人的脚本
起初,我尝试在AddForce(transform.up * Speed);
的帮助下采取快速行动
对于子弹
public class BulletScript : MonoBehaviour
{
public GameObject bullet;
void Start()
{
bullet.transform.Translate(bullet.transform.forward * Time.deltaTime);
}
}
对于敌人
public class TurelScript : MonoBehaviour
{
public Transform Player;
public Transform Turell;
public GameObject PrefabOfbullet;
public Transform BUlletPosition;
public float Rotation;
void Start()
{
var turnOfBullet = Quaternion.Lerp(BUlletPosition.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - BUlletPosition.position), Time.deltaTime * 40f);
var rigidbodyBullet = GetComponent<Rigidbody2D>();
StartCoroutine(BulletSpawn());
}
// Update is called once per frame
void Update()
{
var turn = Quaternion.Lerp(Turell.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - Turell.position), Time.deltaTime * 4f);
var rigidbody = GetComponent<Rigidbody2D>();
rigidbody.MoveRotation(turn.eulerAngles.z);
}
IEnumerator BulletSpawn()
{
while (true)
{
Instantiate(PrefabOfbullet, BUlletPosition.position, Turell.rotation);
yield return new WaitForSeconds(0.3f);
}
}
}
答案 0 :(得分:1)
由于项目符号似乎是Rigidbody2D
,因此您完全不应该使用Transform.Translate
,而只能通过Rigidbody2D
组件和{{ 1}},因为它不破坏物理。 (请参见Rigidbody2D.MovePosition
)
然后对于子弹,您几乎永远不会使用AddForce
,这将需要知道子弹的质量并相应地计算所需的力。
您的信使会立即更改其velocity
,所以要做类似的事情
FixedUpdate