Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
Unity网格编程课程(2017.3,Andy老师)的模型切割案例,为何不适用于自编模型?
Tyason发起了问答2022-08-11
6
回复
371
浏览

Unity网格编程(2017.3)课程(Andy老师)的模型切割案例,采用Unity自带的模型Cube\sphere等模型可以成功切割,但采用自编模型(同样的正方体)就无法成功切割,无任何反应,也不报错。自己思考了很久,都想不明白是何原因,切割功能的脚本是完全采用的Andy老师课程中的最终脚本,应该没有问题,能够兼容这种情况,而生成模型的代码应该也没有问题,想请问老师这种情况可能是什么原因造成的?

图一:Unity自带的Cube模型,能够正常切割

图二:采用脚本自己生成的正方体模型,无法切割,没有丝毫效果

生成模型的代码如下:

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

[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class model3 : MonoBehaviour
{

    private Vector3[] _vertices;
    private int[] _triangles;
    void Start()
    {
        Mesh mesh = new Mesh();

        MeshFilter filter = GetComponent<MeshFilter>();
        filter.mesh = mesh;
        mesh.name = "Mesh03";
        GenerateVextex();
        GenerateTriangle();

        mesh.vertices = _vertices;
        mesh.triangles = _triangles;

        GameObject newGo = new GameObject();
        newGo.transform.position = filter.transform.position;
        newGo.transform.rotation = filter.transform.rotation;
        //newGo.transform.rotation = _hitTrans.rotation;

        newGo.AddComponent<MeshFilter>().mesh = mesh;
        newGo.AddComponent<MeshRenderer>().material = filter.GetComponent<MeshRenderer>().material;
    }

    private void GenerateVextex()
    {
        _vertices = new Vector3[8];
        _vertices[0] = new Vector3(-0.5f, -0.5f, -0.5f);
        _vertices[1] = new Vector3(0.5f, -0.5f, -0.5f);
        _vertices[2] = new Vector3(-0.5f, -0.5f, 0.5f);
        _vertices[3] = new Vector3(0.5f, -0.5f, 0.5f);

        _vertices[4] = new Vector3(-0.5f, 0.5f, -0.5f);
        _vertices[5] = new Vector3(0.5f, 0.5f, -0.5f);
        _vertices[6] = new Vector3(-0.5f, 0.5f, 0.5f);
        _vertices[7] = new Vector3(0.5f, 0.5f, 0.5f);
    }

    private void GenerateTriangle()
    {
        _triangles = new int[36];
        //底面
        _triangles[0] = 0;
        _triangles[1] = 1;
        _triangles[2] = 2;

        _triangles[3] = 1;
        _triangles[4] = 3;
        _triangles[5] = 2;
        //前
        _triangles[6] = 0;
        _triangles[7] = 4;
        _triangles[8] = 5;

        _triangles[9] = 5;
        _triangles[10] = 1;
        _triangles[11] = 0;
        //后
        _triangles[12] = 3;
        _triangles[13] = 7;
        _triangles[14] = 6;

        _triangles[15] = 3;
        _triangles[16] = 6;
        _triangles[17] = 2;
        //左
        _triangles[18] = 6;
        _triangles[19] = 4;
        _triangles[20] = 0;

        _triangles[21] = 6;
        _triangles[22] = 0;
        _triangles[23] = 2;
        //右
        _triangles[24] = 1;
        _triangles[25] = 5;
        _triangles[26] = 7;

        _triangles[27] = 7;
        _triangles[28] = 3;
        _triangles[29] = 1;
        //上
        _triangles[30] = 6;
        _triangles[31] = 7;
        _triangles[32] = 4;

        _triangles[33] = 7;
        _triangles[34] = 5;
        _triangles[35] = 4;
    }
}

联系方式,QQ  1157947543,请指教,谢谢!

所有回复
  • 老师_Trigger 2022-08-11

    同学你好,这个老师具体没有测试过,同学可以测试一下,换一下其他的模型,不用默认的和生成的模型试一下看看,可能切割方法的问题也可能是材质的问题

    • Tyason 2022-08-12

      谢谢Trigger老师的回复,经过您的提醒,我采用别人制作好的模型(零基础入门Unity - 古迹探险中的素材),采用空材质和default材质,都无法切割,目前只有Unity自带的默认模型可以被成功切割,这种情况可以认为是切割方法的问题吗?请问您有什么建议?谢谢!

      (0) 回复
    • 老师_Trigger 2022-08-12

      回复 @ Tyason: 是切割方式实现的问题,这个具体实现方式不太清楚,可能Andy老师在制作的时候就是针对默认模型切割的

      (0) 回复
    • Tyason 2022-08-12

      回复 @ 老师_Trigger: Trigger老师,我发现了部分问题所在,是模型没有添加碰撞器、射线检测不到的原因,添加碰撞器之后,别人制作好的模型(包括但不限于默认模型)也能够正常切割了。与之对比,采用脚本生成的模型,虽然射线能够检测到,但仍然无法切割。您觉得这种情况,可能是什么原因造成的呢?

      (0) 回复
    • Tyason 2022-08-12

      回复 @ 老师_Trigger: 有没有可能是脚本冲突的原因呢,因为脚本创建的模型是临时的,脚本运行的过程中模型存在,关闭则模型消失;而挂载另一个切割脚本,切割过程中相当于会对创建模型的脚本产生影响,因此冲突所以无法切割?和线程有没有关系呢?是否能够通过脚本创建永久的模型(即便脚本关闭模型也不会消失的那种)有没有方法或者可能实现呢?

      (0) 回复
    • 老师_Trigger 2022-08-13

      回复 @ Tyason: 这个具体要看Andy老师是怎么实现的,包括使用的技术,同学可以下去详细研究一下

      (0) 回复
    还有0条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!