我的游戏对象奇怪地移动。
关于敌人,我有这个剧本:
public float speed = 1.0f;
private Transform target;
public void Start()
{
var player = GameObject.FindWithTag("Player");
target = player.transform;
}
void Update()
{
// Move our position a step closer to the target.
float step = speed * Time.deltaTime; // calculate distance to move
transform.position = Vector3.MoveTowards(transform.position, target.position, step);
// Check if the position of the cube and sphere are approximately equal.
if (Vector3.Distance(transform.position, target.position) < 0.001f)
{
// Swap the position of the cylinder.
target.position *= -1.0f;
}
}
我用弹丸击中敌人后,它开始移动得更慢。弹丸背后的脚本是这样的:
if (coll.gameObject.tag != "Player")
{
Destroy(gameObject);
if ((coll.collider.GetComponent("Damageable") as Damageable) != null)
{
var d = coll.collider.GetComponent<Damageable>();
d.Damage(1);
}
}
我将此脚本作为“可损坏的组件”添加到其中,但是,即使此脚本处于活动状态,该行为仍然存在,所以我认为它与之无关:
public void Damage(int damageAmount)
{
print("Damage : " + Health + ":" + damageAmount);
Health -= damageAmount;
if (Health <= 0)
{
Destroy(gameObject);
}
}
关于哪里出了什么问题的任何建议?
答案 0 :(得分:1)
coll
我猜这是碰撞的简称,碰撞发生在2个刚体(或另一个静态对撞机,但与问题无关)上,所以当子弹击中敌人时,即使您立即将其摧毁,它也会阻挡敌人的行进敌人仍然会停止移动1帧。
因此,将子弹上的对撞机作为触发点,触发点不会阻止其他刚体。
使用OnTriggerEnter2D
(对于3D游戏,则使用OnTriggerEnter(Collider)
)来接收触摸事件。
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag != "Player")
{
Destroy(gameObject);
var d = other.GetComponent<Damageable>();
if(d != null)
d.Damage(1);
}
}