检测游戏对象的角落

时间:2015-09-21 16:32:16

标签: c# unity3d

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

我正在使用的代码是

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);


}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

使用OnCollisionStay(),您可以在按下鼠标按钮时触发相应的功能。我自己也做过类似的事,这种方式确实有用。

疯狂的另一种方法:

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