Unity3D中三个零散概念——鼠标样式、单例模式、世界与本地坐标

我们来学习一下Unity3D中对鼠标样式的设置处理、单例模式、还有世界坐标与本地坐标的理解变换

 

 

 


鼠标样式设置:

首先,要设置只要点到场景中鼠标就变成某种样式的话,可以直接在File的Build Settings中,选择Player Settings进行设置

而在场景中要设置鼠标样式改变鼠标样式的话,我们可以这样:

    public Texture2D cursor_normal;  //Texture2D类的鼠标样式图片
    private Vector2 hotspot = Vector2.zero;   //热点,鼠标点击的重点,V2.zero为左上角
    private CursorMode mode = CursorMode.Auto;  //鼠标指针类型,Auto为自动判断硬/软件上设置

    public void SetNormal()
    {
        //设置样式
        Cursor.SetCursor(cursor_normal, hotspot, mode);
    }

 

 


设置单例模式:

单例模式保证应用只有一个全局惟一的实例,并且提供一个访问它的全局访问点。

继承monobehavior的类的单例:

    public static T _instance;
 
    private void Awake()
    {
        _instance = this;
    }   

普通的类的单例:

    private static T   instance;
    public static T    Instance
    {
        get
        {
            if (null == instance)
                instance = new T();
            return instance;
        }
        set { }
    }

 


世界坐标与本地坐标:

世界坐标:

世界坐标是一个在根目录下的物体在Unity世界坐标系所对应出来的位置,唯一。

处于最高层级的物体,其Inspector面板内的position即为世界坐标。

无论哪个层级,其Transform的API中的position属性,均是物体的世界坐标

 

本地坐标:

局部坐标是一个物体以其他物体作为参考系(不再是以世界零点作为参考系)所获得的位置信息。

子物体在Inspector面板内的position信息即为子物体以父物体作为零点所得到的局部坐标。

B若不再是A的子物体,而是和A同层级,那么B的坐标就应该等于之前的局部坐标+A的坐标,如果A是世界坐标内的物体,那么所得结果就是B的世界坐标。

无论哪个层级,其Transform的API中的position属性,均是物体的世界坐标

本地坐标转世界坐标:

  • 子物体的世界坐标=父物体的世界坐标+子物体的本地坐标(一层子物体,多层往下递推,道理一样)
  • 物体的transform下的方法TransformPoint(new Vector3(0,0,0))(可以获取物体世界坐标相对于任意一点的位置)
TransformPoint(new Vector3(0,0,0))

 

世界坐标转本地坐标:

  • Transform的API提供一个方法InverseTransformPoint,可以获得任意物体相对于另一个物体的局部坐标
go1.InverseTransformPoint(go2)

 

 

 


 

 

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

 

 

发表评论