void ShootRay(Vector3 mousePos) { Vector3 from, clickWorldPoint, normalDir; GeometryTool.GetShootingRay(mousePos, out from, out clickWorldPoint, out normalDir); //debug用 voxelBuilder.SetClickPointOnRay(clickWorldPoint); voxelBuilder.SetClickNormalDir(normalDir); int nowFloor, nowY, nowX; //mahjongMap的平面朝向是固定的,所以不作座標變換 bool isHit = voxelBuilder.DoClick(from, normalDir, out nowFloor, out nowY, out nowX); if (!isHit) { return; } var funptr = DoWhat(); for (var y = 0; y < voxelBuilder.GetAddCountY(); ++y) { for (var x = 0; x < voxelBuilder.GetAddCountX(); ++x) { var node = voxelBuilder.GetVoxel(nowFloor, nowY + 2 * y, nowX + 2 * x); if (node == null) { continue; } voxelBuilder.DoOperation(node, funptr); } } }
public void OnSceneGUI() { Vector3 from, dir; GeometryTool.GetShootingRay(Event.current.mousePosition, out from, out dir); Vector3 hitPoint, hitNormal; controller.from.position = from; var isHitSphere = rayHitSphere(from, dir, out hitPoint, out hitNormal); if (!isHitSphere) { return; } if (Event.current.button == 1)//right button { Vector3 hitOnPlane; var hitTerrain = getHitPlane(hitPoint, hitNormal, out hitOnPlane); if (hitTerrain == null) { Debug.Log("no hit plane"); return; } if (Event.current.type == EventType.MouseDrag || Event.current.type == EventType.MouseDown) { // Debug.Log(hitTerrain.name); isUsingBrush = true; hitTerrain.setBrushLocalPosFrom(hitOnPlane); hitTerrain.useBrush(true); hitTerrain.updateNeighborsBrush(true); Event.current.Use(); // 中斷鏡頭的旋轉 return; } if (isUsingBrush == true) { isUsingBrush = false; hitTerrain.setBrushLocalPosFrom(hitOnPlane); hitTerrain.useBrush(false); hitTerrain.updateNeighborsBrush(false); } } }
void ShootRay(Vector3 mousePos) { Vector3 from, clickWorldPoint, normalDir; GeometryTool.GetShootingRay(mousePos, out from, out clickWorldPoint, out normalDir); var voxelBuilder = groupRelationBuilder.GetVoxelBuilder(); //假裝自己是在對voxelBuilder發射 var localFrom = groupRelationBuilder.transform.InverseTransformPoint(from); int nowFloor, nowY, nowX; bool isHit = voxelBuilder.DoClick(localFrom, normalDir, out nowFloor, out nowY, out nowX, true); if (!isHit) { return; } var selectGroup = voxelBuilder.GetVoxel(nowFloor, nowY, nowX).group; groupRelationBuilder.SetNowSelectGroup(selectGroup); }