我有一款水果忍者游戏,您的鼠标就像刀片一样,您可以切割水果之类的物品。因此,水果有一个撞机,叶片也有撞机。
问题是当您快速切开时,对撞机可能移动得太快而无法与水果碰撞。
要克服这一点,我需要一种方法来查看对撞机是否在两点之间。
我可以这样做得到2分;
vector 3 lastPos = Vector3.zero;
void Update()
{
/*If collider between Input.mouse.position & lastPos {
collided();
}*/
lastPos = Input.mouse.position;
}
void collided()
{
...
}
这可行吗,什么是最好的方法?
答案 0 :(得分:2)
private Vector3 bladeLastPos;
private void Start(){
bladeLastPos = new Vector3(blade.position.x,blade.position.y,blade.position.z);
}
private void Update()
{
Vector2 v1 = new Vector2(this.transform.position.x, this.transform.position.y);
Vector2 v2 = new Vector2(bladeLastPos.x, bladeLastPos.y);
float maxRange = Vector2.Distance(v1,v2);
RaycastHit2D[] hits = Physics2D.RaycastAll(v1, v2 - v1, maxRange);
for (int i = 0; i < hits.Length; i++)
{
var component = hits[i].transform.GetComponent<ScriptNameInFruitWhereCutIs>();
if (!component.cut)
{
//Cut! use public properties/functions within component
}
}
bladeLastPos = new Vector3(transform.position.x,transform.position.y,transform.position.z);
}
这条线将是中心之间的细直线,而不是整个刀片形状留下的完整轨迹。