类继承不要忘记继承弹簧长度
punlic float maxDis = 2;改为protected float maxDis = 2;//鸟距离树最大距离
类继承时识别不到鼠标按下Input.GetMouseButtonDown(0)
Input.GetMouseButtonDown(0)应该放到 base.ShowSkill();前面,
因为类继承小鸟里的Update()函数会刷新按下鼠标返回的true,使得无法检测到
类继承OnCollisionEnter碰撞检测不到
小细节
改private void OnCollisionEnter(Collision collision)为private void OnCollisionEnter2D(Collision2D collision)
因为很多情况我们在工程里用的是Rigidbody2D
Rigidbody2D调用刚体时同理可试
另外触发检测和碰撞检测同时用可能会出错,这个我还没解决
刚体2D和刚体一点都不一样!!!
我抄了一个冲击波的代码:
https://blog.csdn.net/qq_37254525/article/details/105565245
但是他调用的刚体是这个Rigidbody rigidbody = blocks[i].gameObject.GetComponent();
我在工程里挂的是Rigidbody2D,我用了好多种办法和爆炸方案都绕不开Rigidbody,最后才受上面第二点启发,觉得这两可能不是一个东西!
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Enemy")
{
blocks.Add(collision.gameObject.GetComponent<pig>());
}
}
//触发检测
public override void ShowSkill()//类继承
{
if (Input.GetMouseButtonDown(0))
{
base.ShowSkill();
if (blocks.Count > 0 && blocks != null)
{
for (int i = 0; i < blocks.Count; i++)
{
GameObject tObject;
tObject = blocks[i].gameObject;
print(blocks[i].gameObject.name);
Rigidbody2D rigidbody = blocks[i].gameObject.GetComponent<Rigidbody2D>();
if (rigidbody != null)
{
print("yyy");
Vector3 offset = Vector3.up * 7f;
//得到一个方向向量,用于力的施加
Vector3 direction = (tObject.transform.position - (gameObject.transform.position - offset)).normalized;
//自定义数值multiplier 根据物体质量rigidbody.mass,伤害大小damageStrength,表示质量越大施加的力相应要大些
int damageStrength = 300;
float multiplier = rigidbody.mass * damageStrength;
//方向力
Vector3 force = direction * multiplier;
rigidbody.AddForce(force);
}
}
}
}
}