【问题标题】:How to draw circle around an object in unity3d?如何在unity3d中围绕对象绘制圆圈?
【发布时间】:2015-05-26 02:48:18
【问题描述】:

我想在场景中绘制一个立方体。我在 unity3d 上创建了一个项目。它有主摄像头和定向灯。我使用统一 gui 添加了一个空的游戏对象。我创建了一个.cs 文件并附加到游戏对象。 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 函数在这个立方体周围绘制具有透视效果的圆圈。我怎样才能完成这项工作?我想创建如下视图

【问题讨论】:

    标签: c# unity3d drawing


    【解决方案1】:

    1 - 你为什么不创建一个手工制作的立方体,而不是使用原始盒子并设置大小?

    2 - 问题之一是您的“D”可能因盒子旋转而不同。

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

    即使您尝试先计算边界,该边界也会因旋转而不同。 0º = 0.5, 45º = 0.7 等等(同样的问题)

    简单的方法(我现在能想到的)是:

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

    抱歉语法问题,英语不是我的母语。

    【讨论】:

    • D 不是每个位置的常数。但我想放置立方体圆心。我不使用原始盒子。我应该创建自己的立方体,这是一项任务。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2013-06-19
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多