Unity Notes
学习资料
其他
学习笔记
Mesh Material Shader Texture 辨析
- Mesh 三维物体的轮廓(网格)
- 我的理解就是物体的位置 Mesh由多个三角形构成 一个三角形在空间中就表示一个位置上的小面 然后你要往这个面上面放什么颜色 放什么图片 确定这个三角形与背景的作用、最终到屏幕上加的后处理。总之这个小的三角形就是第一步 确定位置
- Material 渲染方式和参数(材质球)
- Shader 渲染的算法(着色器)
- Texture 图片 增加颜色细节(贴图)
- 把Texture按照Mesh切分成多个三角形 然后一个一个放到Mesh的位置上 然后玩家看到的实际东西是一个三角形里面的Texture的图 而不是很多个三角形分别做的渲染
- 举个例子:我的世界 一个方块的一个正方形面 就是两个三角形 你通过更换Texture来更换这个正方形面上的东西 而不是将这个正方形面切成很多个三角形 然后一个三角形一个三角形去渲染
- Normal 增加物体的凹凸细节等(法线等其他贴图)
- AnimationClip 让物体动起来(动画)
鼠标拖拽物体在平面上移动
- 新建一个项目
- 在场景中添加一个平面(地面) 添加一个物体
- 新建下面的脚本 将脚本拖放到物体上
// 鼠标拖拽物体在平面上移动(不超过边界)
// References: https://jingyan.baidu.com/article/fa4125ac076ed628ac7092d2.html
using UnityEngine;
public class DragByMouse : MonoBehaviour
{
// 鼠标一动就调用这个函数
void OnMouseDrag()
{
// 获得从Camera开始到屏幕上的点的光线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// 让这条光线射出去 得到所有的碰撞信息
RaycastHit[] hits;
hits = Physics.RaycastAll(ray); // 返回的hits是乱序的
for (int i = 0; i < hits.Length; i++)
{
// 找到与Plane的碰撞信息
if (hits[i].collider.name == "Plane")
{
Debug.Log($"鼠标点击的位置 {Input.mousePosition}"); // 只能精确到一个像素点
Debug.Log($"光线与平面碰撞的位置 {hits[i].point}"); // 注意坐标系 相当于二维坐标xy再加一个深度z
Debug.Log($"物体移动前的位置 {transform.position}");
// 使用该碰撞信息重新设置物体的位置 这里只是在物体所在的平面xz上移动
transform.position = new Vector3(hits[i].point.x, transform.position.y, hits[i].point.z);
Debug.Log($"物体移动后的位置 {transform.position}");
break;
}
}
}
}