Unity3D開發之自製座標軸(二)

2021-08-21 16:47:02 字數 1802 閱讀 1435

我在上篇部落格寫出了如何用**建立乙個我們可以任意控制頂點得圓柱體。本片部落格著重記錄如何在空間建立類似unity可以控制物體的座標軸。由於我們要控制圓柱體的長度,所以我們設計的座標軸是兩個方塊在圓柱體的兩端。效果圖如下:

首先我們要繪製兩個方塊,我們知道空間顯示在我們眼前的物體都是通過由多個三角面組成的mesh顯示在我們面前的。所以我們首先建立乙個屬於我們的boxmesh。**如下:

public static mesh createboxmesh(float width, float height, float depth)

;// create the mesh and return it to the client code

var boxmesh = new mesh();

boxmesh.vertices = boxvertexpositions;

boxmesh.normals = boxvertexnormals;

boxmesh.setindices(vertexindices, meshtopology.********s, 0);

return boxmesh;

}

建立後的靜態函式供我們需要繪製的時候呼叫。下面我們要設定boxmesh 的位置,尤拉角以及縮放比。unity中繪製mesh或者gl線段一般都在onrenderobject函式中進行。

protected void onrenderobject()

首先我們要設定boxmesh的transform資訊給儲存到4*4矩陣中,

private matrix4x4 getlengthworldtransform()

return worldtransforms;

}

首先來獲取boxmesh的位置。我們知道這個自製的座標軸要在圓柱的兩端。而且在上篇部落格我們看到我們的圓柱體的左右兩側就是圓柱的forward和-forward,所以獲取區域性座標**如下(lastselectedgameobject就是我們的圓柱體,templeftgizmopos就是我們在上節所說的leftpos,我們可以在座標軸顯示的初始化函式中獲取圓柱體的長度length,即templeftgizmopos=leftpos=length/2。gizmoscale就是我們根據攝像機和boxmesh的距離來自動調節boxmesh大小的比例係數):

private vector3 getboxesgizmolocalpositions(float gizmoscale);}

calculategizmoscale函式**如下:

float _gizmobasescale =0.77f;

protected float calculategizmoscale()

else

}

private quaternion getboxesgizmolocalrotations();}

以上方法我們就可以獲取到座標軸的transform資訊。接下來就將boxmesh的資訊給賦值上。

private void drawcontrollinelengthaxis(matrix4x4 worldtransforms)

}

以上就是對自己設計的座標軸chua建立,當然我們可以仿照unity的xyz建立屬於我們的平移座標軸。原理類似。

Unity3D 座標學習

1 常用的必然事件 在 unity 的指令碼中,可以定義一些特定的函式,這些函式會在滿足某些條件時由 unity 自動呼叫,它們被稱為必然事件 certain events 而start 和update 正是最常用的兩個事件,因此 unity 預設為新建的指令碼新增了這兩個事件。a awake 喚醒...

Unity3D 參考座標系

參考座標系 reference coordinate system 列表是讓你指定用於變換 移動move 旋轉rotate和縮放scale 的座標系。選項包括檢視座標view,螢幕座標screen,世界座標world,父座標parent,區域性座標local,網格座標grid和拾取座標pick。在螢...

unity3d 參考座標系

參考座標系 reference coordinate system 列表是讓你指定用於變換 移動move 旋轉rotate和縮放scale 的座標系。選項包括檢視座標view,螢幕座標screen,世界座標world,父座標parent,區域性座標local,網格座標grid和拾取座標pick。在螢...