unity里面放一张做好的室内空间效果图如何定位墙面和地面区域去换掉材料 |
您所在的位置:网站首页 › ps怎么更换材质 › unity里面放一张做好的室内空间效果图如何定位墙面和地面区域去换掉材料 |
unity里面放一张做好的室内空间效果图如何定位墙面和地面区域去换掉材料
![]() 把一个好的室内空间效果图放在unity中,如何定位墙面和地面区域来更换材质。 1、将原效果图根据不同的材质进行分区。 保持原效果图中相同的相机角度和光照渲染设置,以材质分区为参考,以每一个要替换的贴图为基础,对所有可变材质对象应用相同的贴图纹理,根据渲染多个特定贴图不同的纹理渲染。 2.将原效果图贴在一个平面(平面)上作为贴图,调整平面(平面)的大小,保证长宽比和贴图长宽比一致,添加一个UVW修改器,选择UV贴图为一个平面,点击Adapt按钮,使原效果图充满平面物体。 3、在俯视图中,根据之前材质分区的形状,用线条勾勒出每个分区的轮廓,然后将所有的线段合并在一起,保证交点合并在一起。 然后用挤压工具将线条挤压出一个高度,调整挤压出的物体的高度unity地面贴图素材,使其与平面物体垂直相交。 4. 选中平面对象unity地面贴图素材,添加ProBoolean修改器,进行布尔运算。 将算法更改为 Stamp,单击 Start Picking 按钮并选择要挤压的对象。 5、布尔运算完成后,给平面对象添加一个edit mesh modifier,选中挤出对象原来的部分,删除。 你会发现平面物体已经按照材质分区进行了切割。 接下来就是将平面物体按照不同的材质分区分成多个分区物体。 6. 平面物体按照材质分区分离后,将所有分区物体归为一组,导出为FBX文件,再导入到UNITY中。 7.在UNITY中,为每个分区的物体添加一个Mesh Colider碰撞包,然后编码在鼠标光标位置发射射线。 光线与不同分区中的物体相交碰撞,识别出不同的材质分区游戏评测,然后按之前选择的 改变贴图设置,将选择的分区物体切换到对应的具体贴图效果图,进而达到替换局部材质的效果和带有平面效果贴图的纹理。 涉及的知识点较多,请百度查询相关知识点。 Unity 3D空气墙怎么做? plane是mesh-based collision detection,基于mesh顶点,比较消耗计算资源,而且碰撞墙没有厚度,所以物体穿过碰撞墙的风险高。 更正式的做法应该是使用box collider拼接,这样有利于计算效率,减少误判。 最快的方法是创建一个默认的立方体,或者您可以先创建一个空的 GameObject,然后添加一个新的 Box Collider。 根据您的需要编辑、移动、旋转和缩放,您可以快速创建多个并将它们排列成您需要的形状。 在优化方面,如果你使用默认的立方体,记得删除或隐藏所有立方体的Mesh Component和Mesh Renderer,最后为所有不动的碰撞墙设置Static Batching激活。 最好将相关的碰撞墙设置为层,在编辑-项目设置-物理中物理引擎的碰撞层关联列表中正确设置关联的碰撞层。 Unity中纹理融合案例的实现——在墙上留下弹痕 原理:实现两张图片的融合,即将一张图片的像素放在另一张图片上。 1.需要两张图片,一张是墙的图片,一张是弹痕的图片。 鼠标点击墙图时,以鼠标点击的位置为中心点设置子弹图在墙图上的像素点。 2.创建Unity工程,将这两张图片拖到工程中,进行如下修改设置 ① 需要将这两张图片的TextureType设置为Advanced; ②这两张图片必须勾选Read/WriteEnable属性才能允许对图片进行像素编辑; ③设置子弹标记图片的MaxSize为64,Format格式为:RGBA32位; ④设置墙图MaxSize为2048,Format为RGBA32位; 3.创建场景,将墙图直接放置在Plane上 4.创建一个脚本PlaneScr,其中鼠标在墙上点击可以生成相应的弹痕音乐,将脚本挂载到Plane上 unity3d可以通过脚本代码用鼠标绘制三维物体吗? 比如画个三维墙? 这个应该可以做,下面是我的一点点想法,不对的地方还请见谅。 将墙的一部分或整面墙设置为预设,通过鼠标点击获取位置,并实例化预设。 通过鼠标点击获取位置的方法可以使用射线。 if (Input .GetMouseButtonDown (0)) //鼠标左键点击 { Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);//启动线 RaycastHit mHi; if (Physics.Raycast (mRay, out mHi)) // 打什么 { Vector3 position = new Vector3(mHi .point .x, mHi .point .y, mHi .point .z);//得到位置 GameObject wall = (GameObject)Instantiate (walls, destenation, mHi .collider .gameObject.transform .rotation);//创建预设 } } 以上只是一个简单的方法,请根据自己的需要进行处理。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |