请问下unity如何从一个物体的脚本中获得另一个物体的组件

请问下unity如何从一个物体的脚本中获得另一个物体的组件,第1张

不太清楚实际情况,但是,

(1)你这样写的前提是,A 和 B 必须同时实例化到同一个gameObject上(这两个脚本得同时应用到一个物体上),否则你的a = GetComponent<A>()肯定为null ,因为B调用这个Get,而他本身所处的gameObject本没有A这个脚本组件,A的实例在另一个物体上。 估计这是你报错的一个原因。

(2)用static声明全局变量似乎没必要,static的作用应该是让变量在类被实例之前就得到实例化。用static的话,那么应该是要达到这样的目的,即用类名直接调用变量或函数(Mathf类里面的很多数学数值和函数都是这样的例子),你这个情况如果用了static那就最好应该为了这样的目的:

ARoadnodecount

(3)实时 *** 作数组,最好用List<>,具体可以参考msdn List的用法,

(4)如果你的目的只是为了让B能够通过代码访问A的变量,一般的public 变量就足够,其余你只需要解决B通过何种途径正确访问A。比如,你可以把A做成singleton:

static A instance;

Test t;

t=gameObjectGetComponentInChildren<Test>();

Test 是一个继承自MonoBehaviour的类

如果在gameObject物体下的子物体包含这个Test,就获取这个Test赋值给t,如果有多个,就将第一个查找到的赋值给t,没有返回null

其实,OpenGL的转换管道直接将gl_Vertex,也就是物体坐标,用gl_ModelViewMatrix相乘,得到的是眼坐标。如果将gl_ModelViewMatirx拆分为gl_ModelMatrix和gl_ViewMatrix,那么问题就好解决了。但事实上没有提供。要清楚OpenGL其实没有世界坐标系,世界坐标系是应用程序的概念。其实可以将OpenGL的摄像机看作是固定的,其坐标系就是眼坐标系,移动摄像机和移动物体的位置是一个相反的转换,对于观察者来说根本不知道是摄像机在动,还是物体在动(想想大卫的大变自由女神像的魔术吧,呵呵)

说回来,最终的变换是这样的:

eyePos=viewMatrix modelMatrix modelVertex

在OpenGL里面viewMatrix和modelMatrix合并了,因为OpenGL里面并没有设置摄像机的参数,所以OpenGL并不知道viewMatrix到底是什么。viewMatrix是用户自己定义的,所以如果能够得到这个viewMatrix并能得到其逆矩阵,就可以得到worldPos:

worldPos=viewMatrixInv viewMatrix modelMatrix modelVertex

传统的OpenGL程序里面,你得自己计算这个viewMatrixInv,还好OSG的Camera提供了一个getViewMatrixInverse()方法,通过这个方法我们就可以轻松的获得viewMatrixInv,然后传递给Vertex Shader(用一个Uniform就可以),然后进行这个计算就可以了。

记得每一帧都需要Update这个viewMatrixInv,只需要一个updateCallBack就可以了。

好了,看几个图,我用3DSMAX创建了两个盒子,为了便于观察,模型的顶点值限制在0-1之间,然后用osgExp导出,没有选中Flatten Static Transform这样就不会把模型定点转换成世界坐标系的顶点。

源代码中可以改变gl_FragColor=的值来修改为相应的坐标系的值显示。

世界坐标系的最终输出,可见颜色连续变换的。

如果model_01名字唯一,且girl_01名字不唯一

GameObjectFind("model_01)TransfomFind("girl_01")name=mesh_underwear;

如果girl_01名字唯一

那么直接GameObjectFind(girl_01)就行了

//获取物体的世界坐标

Vector3 v3 = gameObjecttransformposition;

//把摄像机的位置放置到该物体x/2的位置。

Cameramaintransformposition = new Vector3(v3x / 2, v3y, v3z);

以上就是关于请问下unity如何从一个物体的脚本中获得另一个物体的组件全部的内容,包括:请问下unity如何从一个物体的脚本中获得另一个物体的组件、getcomponentinchildren 怎么用 unity、unity shader 如何获取物体的本地坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9298615.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存