怎么把自己电脑建设网站,网站建设相关问题,电商平台运营方案,如何修改网站icoUnity3D使用的是笛卡尔三维坐标系#xff0c;并且是以左手坐标系进行展示的。 1.全局坐标系#xff08;global#xff09;
全局坐标系描述的是游戏对象在整个世界#xff08;场景#xff09;中的相对于坐标原点#xff08;0#xff0c;0#xff0c;0#xff09;的位置…Unity3D使用的是笛卡尔三维坐标系并且是以左手坐标系进行展示的。 1.全局坐标系global
全局坐标系描述的是游戏对象在整个世界场景中的相对于坐标原点000的位置。我们在场景中创建一个cube初始的position值为000表示它当前在原点位置如果我们设置它的position属性值为123则此时表示cube相对于世界原点在x轴上偏移了1个单位在y轴上偏移了2单位在z轴上偏移了3个单位注unity中单位为米即每单位为1米。 2.局部坐标local
场景中的游戏对象都有属于自己的独立坐标系也称为模型坐标系通过切换工具栏中的global按钮就可以切换全局局部坐标系。我们新建一个cube在inspector面板中修改rotation属性的y轴为200这时切换全局局部坐标系按钮我们发现全局坐标系和局部坐标系不一致了。如果觉得不好理解我举个形象的例子比如用导航软件我们这里先将指南针正北方向规定为世界坐标的正方向当导航软件提示我们向左转我们向左转这时我们自身的方向变化了但是世界坐标的正方向还是原来的正北并没有因为我们的自身左转而改变指南针的正北方向左转就是局部坐标系的概念当导航软件提示我们向北直行时向北就是世界坐标系的概念了。
如果我们再新建另外一个cube并且将其中一个拖动到另一个cube上组成父子关系这时父节点的cube的坐标就成为了子节点cube的原点了子节点的移动则是相对父节点的偏移。当我们将子物体的position属性设为000时子物体就和它的父节点重合了我们设置子物体的position属性为0-20时子物体在y轴上相对于父节点向下偏移了2个单位。 3.屏幕坐标系
以像素来定义的二维坐标系用以描述像素在屏幕上的位置屏幕的左下角定义为原点00右上角则为Game窗口的宽和高值组成的二维坐标点可以用unity对应的屏幕api表示Screen.widthScreen.heightz轴的大小根据相机在世界坐标的位置来定义。鼠标的位置坐标得到的就是屏幕坐标。屏幕坐标的数值只跟Game窗口的大小有关跟分辨率没有关系。下图通过截图软件标识了左下角的00坐标。 4.视口坐标
视口坐标是标准化后的屏幕坐标视口标准化或者叫归一化概念跟向量的归一化类似向量的标准化即通过计算让向量的长度为1类似的视口坐标以0到1之间的数来表示它的范围是以相机视口的左下角为00右上角为11定义的一个矩形。如果我们希望一个物体能被看到那么它就需要被转换到视口坐标。理解视口坐标可以参照屏幕坐标z轴与屏幕坐标一样我们看视口矩形框时z轴指向我们z轴为正方向z轴的值为摄像机的世界坐标取反。如下图就是摄像机的视口。 各种坐标的转换方法
世界和本地坐标的互转直接取unity的transform的接口即可取世界坐标用的position取局部坐标用localpoistion。
屏幕坐标转为世界坐标使用camera.screentoworldPoint(vector3 v),camera为场景中的场景相机实例此api常用于射击游戏的子弹发射、战略游戏或者角色扮演游戏中的点击地面移动角色。
世界坐标转为屏幕坐标使用camera.worldtoscreenpoint(vector3 v),camera为场景中的UI相机实例比如我们需要在怪物的头上挂一个血条就可以使用场景相机将世界坐标转为屏幕坐标然后再用UI相机将屏幕坐标转为世界坐标最后赋值给UI控件。
屏幕坐标转为视口坐标使用camera.screentoviewportpointcamera为场景中场景相机。视口坐标请参照屏幕坐标。
世界坐标转为视口坐标使用camera.worldtoviewportpointcamera为场景中场景相机。
屏幕坐标转ugui坐标当canvas的渲染模式(render mode)为screen space overlay时直接将屏幕坐标赋给目标物体的transform.position注意不是localposition。当渲染模式为screenspace camera时会出现因深度值不正确而引发的问题这时应该使用RectTransformUtility.ScreenPointToWorldPointInRectangle方法将屏幕坐标转为世界坐标后再赋给transform.position。
Unity的话主要还是分两块吧第一块是美术自己都不懂~这里允许我稍微带过一下吧~美术的话主要包括3d模型、材质、纹理贴图这几部分吧当然你也可以说还有shader着色器Unity本身拥有几十种shader也可以根据自己的需要使用shaderLab语言来编写shader这个对我来说相当有难度所以一般只用Unity自带的和网上“流传”的。
接下来是程序方面的
基本组成
Scene场景类似于Flash中的stage用于放置各种对象。
GameObject可以携带各种Component每个GameObject至少带有Transform组件所有的组件都可以从顶部菜单Component里面找到并添加给游戏对象。
Component组件附加在GameObject上不同的组件可以使GameObject具有不同的属性Transform、碰撞器、刚体、渲染器等都是组件脚本也是组件的一种对象所表现出来的行为都是由组件实现的。
脚本语言
C#、Javascript、boo前两者使用较为广泛网上教程以前两者为主个人推荐c#一般的继承MonoBehaviour类的脚本都需要依附的场景中的对象上才能被执行。
用户图形界面部分GUI
用于制作按钮、文本显示、滚动条、下拉框等常用图形操作界面元素使用GUISkin和GUIStyle可以自定义样式系统自带GUI各类GUI插件NGUI、EZGUI等。
预制
用于程序运行时动态实例化对象的“母体”比如在射击类游戏中子弹的生成就可以使用实例化预制的方式来实现这就好比是Flash中的各种Display类你可以定义它的各种属性方法然后在使用的时候直接实例化一个实例。在project面板右击选择Creat——Prefab新建一个预制将Hierarchy面板中要制成预制的对象拖到这个新建预制上即可。
标签和层
标签tag用于辨别物体与name类似使用对象的tag和name都可以找到对应的物体 GameObject.Find“Name”、 GameObject.FindWitnTag“Tag”。默认是Untagged可以通过Inspector面板里面Tag的下拉菜单选择 Add Tag项来添加新的标签 在tagmanager中点开Tags左侧的小三角通过size来增加标签的数量每个Element内都填入新标签的名字层layer在使用某些功能的时候可以通过层来过滤不 需要运用该功能的对象也就是把该功能运用到特定的层比如相机的Culling Mask属性通过选择特定层可以实现只显示位于被选中的层的对象。层的添加也是在标签管理器中Unity已经设置了8个层你是不能对这8个层进行修 改的你可以从第9个也就是user layer8开始添加你定义的层。