如何在unity3d中围绕对象绘制圆圈?

时间:2015-05-25 12:45:22

标签: c# unity3d drawing

我想在场景上绘制一个立方体。我在unity3d上创建了一个项目。它有主摄像头和定向灯。我使用统一gui添加一个空的游戏对象。我创建了一个.cs文件并附加到gameobject。 C#文件的内容是:

using UnityEngine; 
using System.Collections;
using System.Collections.Generic;

/**
 * Simple example of creating a procedural 6 sided cube
 */
[RequireComponent (typeof (MeshFilter))] 
[RequireComponent (typeof (MeshRenderer))]
public class test : MonoBehaviour {

void Start () {
    MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>();
    Mesh mesh = new Mesh ();
    meshFilter.mesh = mesh;

    mesh.vertices = new Vector3[]{
        // face 1 (xy plane, z=0)
        new Vector3(0,0,0), 
        new Vector3(1,0,0), 
        new Vector3(1,1,0), 
        new Vector3(0,1,0), 
        // face 2 (zy plane, x=1)
        new Vector3(1,0,0), 
        new Vector3(1,0,1), 
        new Vector3(1,1,1), 
        new Vector3(1,1,0), 
        // face 3 (xy plane, z=1)
        new Vector3(1,0,1), 
        new Vector3(0,0,1), 
        new Vector3(0,1,1), 
        new Vector3(1,1,1), 
        // face 4 (zy plane, x=0)
        new Vector3(0,0,1), 
        new Vector3(0,0,0), 
        new Vector3(0,1,0), 
        new Vector3(0,1,1), 
        // face 5  (zx plane, y=1)
        new Vector3(0,1,0), 
        new Vector3(1,1,0), 
        new Vector3(1,1,1), 
        new Vector3(0,1,1), 
        // face 6 (zx plane, y=0)
        new Vector3(0,0,0), 
        new Vector3(0,0,1), 
        new Vector3(1,0,1), 
        new Vector3(1,0,0), 
    };

    int faces = 6; // here a face = 2 triangles

    List<int> triangles = new List<int>();
    List<Vector2> uvs = new List<Vector2>();

    for (int i = 0; i < faces; i++) {
        int triangleOffset = i*4;
        triangles.Add(0+triangleOffset);
        triangles.Add(2+triangleOffset);
        triangles.Add(1+triangleOffset);

        triangles.Add(0+triangleOffset);
        triangles.Add(3+triangleOffset);
        triangles.Add(2+triangleOffset);

        // same uvs for all faces
        uvs.Add(new Vector2(0,0));
        uvs.Add(new Vector2(1,0));
        uvs.Add(new Vector2(1,1));
        uvs.Add(new Vector2(0,1));
    }

    mesh.triangles = triangles.ToArray();

    mesh.uv = uvs.ToArray();

    GetComponent<Renderer>().material = new Material(Shader.Find("Diffuse"));

    mesh.RecalculateNormals(); 
    mesh.RecalculateBounds (); 
    mesh.Optimize();
} 
}

此代码有效。现在,我想使用SetPixel函数绘制围绕此立方体具有透视效果的圆。我该怎么做这个工作?我想创建一个视图,如下所示

enter image description here

1 个答案:

答案 0 :(得分:0)

1 - 为什么不使用原始框并只设置尺寸,而不是创建手工立方体?

2 - 其中一个问题是你的“D”可能会有所不同取决于盒子的旋转。

例如,如果您的方框为0º,则0º方向的D将为0.5(从1个单位立方体的中心到边界)。如果你在45º方向计算D,那么sabe框将是0.7(hipotenuse)。

即使您首先计算边界,这个边界在旋转方面也会有所不同。 0º=0.5,45º= 0.7等等(同样的问题)

一种简单的方式(我现在可以想到)是:

创建一个原始立方体并设置所需的比例。 创建一个代表圆的平面,并添加圆的透明纹理。 将平面(圆圈)添加为框的子项,当您调整框的大小时,圆圈将一起调整大小。

对不起语法,英语不是我的母语。