【问题标题】:How to make a dynamic model in unity 3D?如何在统一 3D 中制作动态模型?
【发布时间】:2016-09-06 13:39:33
【问题描述】:

我有一个示例代码,它通过鼠标点击创建动态墙。

using UnityEngine;
using System.Collections;

public class CreateWalls : MonoBehaviour {

    bool creating;
    public GameObject start;
    public GameObject end;

    public GameObject wallPrehab;
    GameObject wall;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        getinput();
    }

    /*
     *this is the method for getting mouse click inputs
     */
    void getinput(){
        if (Input.GetMouseButtonDown (0)) {
            setStart ();
        } else if (Input.GetMouseButtonUp (0)) {
            setEnd ();
        } else {
            if(creating){
                adjust();
            }
        }
    }
    /*
     * getting the mouse clicked position coordinate 
     */
    void setStart(){
        creating = true;
        start.transform.position = getWorldPoint ();
        Debug.Log("Start = " + start.transform.position);
        wall = (GameObject) Instantiate (wallPrehab, start.transform.position, Quaternion.identity);

    }

    /*
     * getting the mouse click over position coordinate
     */
    void setEnd(){
        creating = false;
        end.transform.position = getWorldPoint ();
        Debug.Log("End = " + end.transform.position);
    }

    /*
     * invoking the wall building method
     */
    void adjust(){
        end.transform.position = getWorldPoint ();
        adjustWall ();
    }

    /*
     * build the wall in between start point and the end point
     */
    void adjustWall(){
        start.transform.LookAt (end.transform.position);
        end.transform.LookAt (start.transform.position);
        float distance = Vector3.Distance (start.transform.position, end.transform.position);
        wall.transform.position = start.transform.position + distance / 2 * start.transform.forward;
        wall.transform.rotation = start.transform.rotation;
        wall.transform.localScale = new Vector3 (wall.transform.localScale.x, wall.transform.localScale.y, distance);
    }

    /*
     * method where the coordinate we taken from mouse click
     */
    Vector3 getWorldPoint(){
        Ray ray = GetComponent<Camera>().ScreenPointToRay (Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast (ray, out hit)) {
            return hit.point;
        }
        return Vector3.zero;
    }
}

我有一些坐标,下图的每个角。

a=(55, 297)
b=(300, 297)
c=(55, 297)
d=(55, 52)

Above coordinates are for this image

现在我想为这些坐标建造墙。像一个盒子。我不知道如何放置它们(坐标)。基本上一个墙壁坐标将是 a(x,y) 和 b(x,y)。另一个是 b(x,y) 和 c(x,y)。有人可以帮我解决这个问题吗?我会很棒的

【问题讨论】:

  • 您喜欢制作自己的网格还是使用 Unity 基元?
  • youtube.com/watch?v=h5EiXBJ2Zvc 类似这样的东西。希望你明白。他们使用鼠标点击。但我需要它来协调工作。

标签: c# unity3d 3d-modelling


【解决方案1】:

你可以用图元建造这堵墙,但这会给你一个默认的 10x10 顶点平面。这不是很有效,因为您花费了很多未完成的飞机。

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.localScale = Vector3 (xsize, ysize, zsize);
cube.transform.position = Vector3(xpos, ypos, zpos);

最好的解决方案和更复杂的方法是制作完全属于您自己的 Mesh。 要做到这一点,您需要做的事情很少,这里有一个例子来做一个简单的飞机:

GameObject plane = new GameObject("Plane");
MeshFilter meshFilter = (MeshFilter)plane.AddComponent(typeof(MeshFilter));

Mesh mymesh = new Mesh();
mymesh.name = "MyCustomMesh";
mymesh.vertices = new Vector3[] {
     new Vector3(xpos, ypos, zpos),
     new Vector3(xpos, ypos, zpos),
     new Vector3(xpos, ypos, zpos),
     new Vector3(xpos, ypos, zpos),
 };
 mymesh.uv = new Vector2[] {
     new Vector2 (0, 0),
     new Vector2 (0, 1),
     new Vector2(1, 1),
     new Vector2 (1, 0)
 };
 mymesh.triangles = new int[] { 0, 1, 2, 0, 2, 3};
 mymesh.RecalculateNormals();

meshFilter.mesh = mymesh;
MeshRenderer renderer = plane.AddComponent(typeof(MeshRenderer)) as MeshRenderer;

【讨论】:

  • 先生,我完全迷失在这里了。这个示例代码有什么作用?据我了解,它会让它成为飞机......
  • 对,这段代码创建了一个平面,但您需要为平面的每个顶点设置 vector3 位置。这就是你所要求的......在你的脚本中有一个预制游戏对象“墙”。您可以制作一个名为“wallPrehab”的游戏对象预制件,并且您的脚本可以正常工作。 wall = (GameObject) 实例化 (wallPrehab, start.transform.position, Quaternion.identity);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 2012-09-03
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多