为啥我unity3d 用以下代码没有出现球体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我unity3d 用以下代码没有出现球体?相关的知识,希望对你有一定的参考价值。

if(Input.GetButtonDown("Firel"))
var n:Transform = Instantiate(newobject,transform.position,transform.rotation);

球体也拉进去了,能运行。。可是进去点击左键什么都没有出现。。
求大神指点!

有没有实例化成功,看Hierachy窗口是否有新的名字出现,如果有就是实例化成功,双击就能找到,你先把Firel改为Fire1。。。 参考技术A 在脚本的物体上加个BOX COLLIDER

另外,这句话应该放在Update 里

为啥我的有线球体在平移和改变相机角度时会变成椭球体?

【中文标题】为啥我的有线球体在平移和改变相机角度时会变成椭球体?【英文标题】:Why does my wired sphere turn into ellipsoid when translating and changing camera angle?为什么我的有线球体在平移和改变相机角度时会变成椭球体? 【发布时间】:2020-05-14 12:03:43 【问题描述】:

我需要沿 z 轴来回平移我的有线球体,同时还要改变摄像机角度。每当我的球体被平移时,它就会慢慢变成椭球体。我真的不明白为什么。在这里你可以看到我认为是错误的代码片段。此外,在调整窗口大小时不应该改变形状,只改变它们的大小。

void init() 
    glClearColor(0.0, 0.0, 0.0, 0.0);
      glEnable(GL_DEPTH_TEST);

    


void display(void) 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 glPushMatrix();
    glLoadIdentity();
    gluLookAt(ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glTranslatef(0.0,0.0,tra);
    glScalef(0.65, 0.65, 0.65);
    glColor3f(1.0f, 0.8f, 1.0f);
    glutWireSphere(0.65, 10, 15);
    glPopMatrix();

 glPushMatrix();
    glLoadIdentity();
    gluLookAt(ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glColor3f(0.1f, 0.8f, 1.0f);
    glutWireTorus(0.25, 1.0, 15, 15);
    glPopMatrix();
    glFlush();

    glFlush();
    

void reshape(int w, int h) 
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();


  gluPerspective(70.0, (GLfloat)w / (GLfloat)h, 1.0, 80.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
    

【问题讨论】:

【参考方案1】:

[...] 同时改变相机角度。每当我的球体被平移时,它就会慢慢变成椭球体。

这是由Perspective distortion 或广角畸变引起的,并且朝向视图边缘增加。可以通过减小视场角来降低效果,但效果永远不会完全取消(平行投影除外)。 另见How to fix perspective projection distortion?。

此外,在调整窗口大小时不应该改变形状,只改变它们的大小。”

在透视投影中,对象的大小始终与视口的大小相关,而不是与屏幕的大小相关。

如果您不希望透视失真,并且如果您希望对象的大小必须相对于屏幕的大小(以像素为单位),那么您必须使用正交投影,相对于大小的视口。

例如:

void reshape(int w, int h) 
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    //gluPerspective(70.0, (GLfloat)w / (GLfloat)h, 1.0, 80.0);

    float sx = w / 100.0f;
    float sy = h / 100.0f;
    glOrtho(-sx/2.0f, sx/2.0f, -sy/2.0f, sy/2.0f, 1.0f, 80.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

【讨论】:

这解决了我遇到的问题,谢谢@Rabbid76。现在我只需要找到他们在示例 .gif 中使用的相机转换,我的硬件就完成了!

以上是关于为啥我unity3d 用以下代码没有出现球体?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 唯一指针;为啥这个示例代码会出现编译错误?错误代码太长了,我无法指定

3D MAX模型怎么通过FBX格式导入unity

将球体 a 旋转到 b 指向自身

为啥unity3d进去之后没有鼠标?

Unity3D:Gizmos画圆(转载)

为啥我的unity3d关联的vs2017里没有onmousedown函数?