Unity如何只ansys 修改坐标系一个坐标系的值

关于设置坐标系的问题...【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,694贴子:
关于设置坐标系的问题...收藏
先创建一个Cube当做棋盘用。。把Cube捏扁成棋盘状..然后要怎么做才能把
Cube的左下角设定为一个坐标系的原点(0,0,0)呢。注:此坐标系与世界坐标无关...完全是以Cube自身为‘相对坐标。’...因为之后还要和棋子绑定父子坐标。。.求指导@xuiopp321 @岚依王子
SiKi学院上有大量的项目案例课程,可以让学员随时随地学习!通过案例来从入门到深入的学习Unity!
计算吧,有长度,宽度,设中心坐标是长度宽度的一半……
Unity里面position的“1”一般等于一米。。。努力吧
登录百度帐号Unity3D的四种坐标系 - Tekkaman - 博客园
随笔 - 1575
评论 - 107
【Unity3D的四种坐标系】
1、World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
2、Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。
  Screen.width =&Camera.pixelWidth
  Screen.height = Camera.pixelHeigth
3、ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。
4、绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
【四种坐标系的转换】
1、世界坐标&屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。
2、屏幕坐标&视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。
3、视口坐标&屏幕坐标:camera.ViewportToScreenPoint();
4、视口坐标&世界坐标:camera.ViewportToWorldPoint();
阅读(...) 评论()unity的几种坐标系及他们之间的转换
在谈unity各种坐标系之前,我一直很好奇unity为什么要有这么多坐标系搞的很麻烦,其实unity这么坐标系是为了解决麻烦,试想计算你和你同桌的位置,要先得到你们各自在世界中的位置,然后在计算相对位置,其实完全没有这个必要,这也是unity为什么会有这么多坐标系的原因
1.word space (世界坐标系)
当我们向场景中添加物体时,他们都是以世界坐标系的方式的方式显示在场景中的,通过transform.position可以得到它在世界中的坐标位置,transform.position(Vector3)可以设置它在世界中的位置(c#不支持单独设置x y z);
2.Screen Space(屏幕坐标系)
以像素为单位,左下角是(0,0),右上角为(screen.width, screen.height),Z的位置是以相机的世界单位来衡量//及物体离相机远近
注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得鼠标坐标,手指触摸屏也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指的手机屏幕坐标
说点题外话
unity中Input.GetMouseButtonDown(0)代表按下鼠标左键,Input.GetMouseButtonDown(1)代表鼠标右键Input.GetMouseButtonDown(2)代表滚轮中间。
3.viewport (视口坐标)
左下角为(0, 0),右上角为(1, 1)在一些画中画效果中长用到,比如主视口为FPS,然后右下角有一个小窗口为第三人称视图。
4.绘制GUI界面的坐标系(自从有了新版UI之后这个也很少用到)
这个坐标系与屏幕坐标系类似,不同的是左上角为(0,0),右下角为(screen.width, screen.height)这样绘制起来更方便。
5.桌面坐标系(系统坐标系)
这个坐标系与屏幕坐标系类似,不同的是该坐标系以桌面的左上角为(0,0),桌面右下角为桌面分辨率的宽和桌面分辨率的高
用SetCursorPos设置鼠标坐标,用GetCursorPos得到鼠标坐标。
命名空间 using System.Runtime.InteropS
导入库 [DllImport("user32.dll")]
函数原型 public static extern int SetCursorPos(int x, int y);
public static extern bool GetCursorPos(ref int x, ref int y);
******************************************************
叮叮叮,开始下一个话题,unity中各种坐标系间的转换
1.物体的世界坐标到屏幕坐标的转换
camer.WorldToScreenPoint(cb.transform.position);//这里camer与一个相机相关联,cb代表场景中的一个方块物体,得到的vector3中的z为相机离cube物体的远近
2.屏幕坐标转世界坐标
Vector3 world = camer.ScreenToWorldPoint(Input.mousePosition);//及鼠标单击位置距世界中心(0,0,0)点的距离
3.屏幕坐标转视口坐标
Vector3 viewCoor = camer.ScreenToViewportPoint(Input.mousePosition);//底层原理无非就是Input.mousePosition.x/Screen.width,Input.mousePosition.y/Screen.H
4.视口坐标转屏幕坐标
Vector3 screen = camer.ViewportToScreenPoint(new Vector3(0.2f, 0.3f, 0));//注意视口左下角为(0,0),右上角为(1,1);
5.视口坐标到世界坐标
Vector3 word = camer.ViewportToWorldPoint(new Vector3(0.2f, 0.3f, 0));//注意当只改变一个z值时转化出的世界坐标的x,y也会发生相应的变化
6.视口坐标转射线
Ray ray = camer.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));//这是转化源码,为了更方便理解顺便写了一个小Deom
if (Physics.Raycast(ray,out hit))
Debug.Log("Im look at " + hit.transform.name);
Debug.Log("Im look at nothing");
没有更多推荐了,&&& 模型导入unity后,可以使用unity的Inspector面板对模型在某个坐标轴上进行平移、旋转和缩放操作(如图1)。
&&& Inspector面板提供功能是所见即所得的,调整后立刻可以看到效果,相当的方便。但是这些功能还不能完全满足游戏开发的要求,比如为了减轻美工的工作量一些游戏对场景中的模型标准作出了一些规定,使这些模块化的小模型能按照一定的规律拼接成丰富多样的大模型。拼接过程往往要对模型的local coordinates进行调整才能最终形成一个&无缝&的大模型,而这个过程常常是在游戏运行时进行(或者地图初始化时),因此需要引擎提供修改模型mesh的接口。十分幸运的是unity提供了这样的接口。
Mesh and MeshFilter
&&& 需要修改模型的网格数据,首先第一步是要想办法获得模型的mesh,这里我们需要Mesh Filter,unity文档中的解释如下:
The Mesh Filter takes a mesh from your assets and passes it to the
for rendering on the screen.
&&& 如上图,Robot手里拿的枪的网格数据保存在以gun_model命名的Mesh里,而这个Mesh则隶属于Gun_model的MeshFilter。知道了网格数据保存的位置,接下来需要做的就是获取这些数据并修改它们。下面使用一个简单的cliff模型为例子介绍如何修改模型的网格数据。
Simple Example
&&& 首先来看原始的模型长什么样?
&&& 现在需要修改模型的网格数据,把模型最高点的高度坐标挑高一倍,代码如下:
using UnityE
using System.C
[RequireComponent(typeof(MeshFilter))]
public class example : MonoBehaviour {
void Update() {
Mesh mesh = GetComponent&MeshFilter&().
Vector3 [] vertices = mesh.
int p = 0;
int flag = -1;
float maxheight = 0.0F;
while (p & vertices.Length) {
if(vertices[p].z & maxheight) {
maxheight = vertices[p].z;
vertices[flag] += new Vector3(0, 0, maxheight);
mesh.vertices =
mesh.RecalculateNormals();
&&& 注意:本例所使用的模型的local坐标系的z轴相当于unity的y轴,因此上述代码时对z轴进行修改。代码运行的结果如下:
&&& 是不是很简单!unity强大的接口以及较为详细的文档对开发者来说确实是一个福音,另外使用C#编程对于我这苦逼的不合格C++程序员来说确实很爽!
&&& 另外有一点值得注意:上述代码所对应的脚本一定要drag到GameObject里MeshFilter的拥有者,才能使代码生效。如下图5必须要把script拖拽到Cliffs01才能生效,因为在cliffs_1cm的GameObject里只有Cliffs01拥有MeshFilter(如图6)
References:
阅读(...) 评论()

我要回帖

更多关于 ansys 修改坐标系 的文章

 

随机推荐