检测游戏对象的角落

本文关键字:角落 对象 游戏 检测 | 更新日期: 2023-09-27 18:13:52

我有一个脚本,可以通过触摸或鼠标旋转对象,但我想旋转对象时,鼠标越过对象的角落。我该怎么做呢?

我使用的代码是
private float baseAngle = 0.0f;
void OnMouseDown(){
    Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    baseAngle = Mathf.Atan2(pos.y, pos.x) * Mathf.Rad2Deg;
    baseAngle -= Mathf.Atan2(transform.right.y, transform.right.x) *Mathf.Rad2Deg;
}
void OnMouseDrag(){
    Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
    pos = Input.mousePosition - pos;
    float ang = Mathf.Atan2(pos.y, pos.x) *Mathf.Rad2Deg - baseAngle;
    transform.rotation = Quaternion.AngleAxis(ang, Vector3.forward);

}

检测游戏对象的角落

将不可见的GameObjectsRectTransforms放置在要旋转的对象的角上,并使用它们作为父对象的控件

这样做的一种方法是将碰撞器添加到对象的角落。

使用OnCollisionStay(),您可以在按下鼠标按钮时触发适当的函数。我自己也做过类似的事情,这种方法确实有效。

另一个疯狂的方法:

你可以在你点击的地方进行光线投射,如果你的光线投射在一个适当的距离内的角落(你可以根据它的尺寸计算),然后允许旋转点击