public override void OnMouseDown(int mouseButton, VoxelInfo voxelInfo) { if (mouseButton == 0) { Voxel.DestroyBlock(voxelInfo); } else if (mouseButton == 1) { //右键开关门 if (voxelInfo.GetVoxel() == 70) { // 门开 Voxel.ChangeBlock(voxelInfo, 7); // 则关 } else if (voxelInfo.GetVoxel() == 7) { // 门关 Voxel.ChangeBlock(voxelInfo, 70); // 则开 } } }
public static void DestroyBlock(VoxelInfo voxelInfo) { GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(voxelInfo.GetVoxel())) as GameObject; if (voxelObject.GetComponent <VoxelEvents>() != null) { voxelObject.GetComponent <VoxelEvents>().OnBlockDestroy(voxelInfo); voxelInfo.chunk.SetVoxel(voxelInfo.index, 0, true); Destroy(voxelObject); } }
private void MouseCursorEvents() { // 鼠标位置 VoxelInfo raycast = Engine.VoxelRaycast(Camera.main.ScreenPointToRay(Input.mousePosition), 9999.9f, false); if (raycast != null) { //创建一个被瞄准体素的拷贝 GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(raycast.GetVoxel())) as GameObject; //voxel有event if (voxelObject.GetComponent <VoxelEvents>() != null) { voxelObject.GetComponent <VoxelEvents>().OnLook(raycast); // 对于鼠标动作发信息 for (int i = 0; i < 3; i++) { if (Input.GetMouseButtonDown(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast); } if (Input.GetMouseButtonUp(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast); } if (Input.GetMouseButton(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast); } } } Destroy(voxelObject); } else { // 未被击中,不显示 if (SelectedBlockGraphics != null) { SelectedBlockGraphics.GetComponent <Renderer>().enabled = false; } } }
private void CameraLookEvents() { //第一人称视角 VoxelInfo raycast = Engine.VoxelRaycast(Camera.main.transform.position, Camera.main.transform.forward, Range, false); if (raycast != null) { //创建拷贝 GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(raycast.GetVoxel())) as GameObject; //当体素上有动作 if (voxelObject.GetComponent <VoxelEvents>() != null) { voxelObject.GetComponent <VoxelEvents>().OnLook(raycast); for (int i = 0; i < 3; i++) { if (Input.GetMouseButtonDown(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast); } if (Input.GetMouseButtonUp(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast); } if (Input.GetMouseButton(i)) { voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast); } } } Destroy(voxelObject); } else { // 瞄空时不显示被选中的ui if (SelectedBlockGraphics != null) { SelectedBlockGraphics.GetComponent <Renderer>().enabled = false; } } }
public void Update() { // 检测chunk存在 GameObject chunkObject = Engine.PositionToChunk(transform.position); if (chunkObject == null) { return; } // 获取体素信息 Chunk chunk = chunkObject.GetComponent <Chunk>(); Index voxelIndex = chunk.PositionToVoxelIndex(transform.position); VoxelInfo voxelInfo = new VoxelInfo(voxelIndex, chunk); // 获取拷贝 GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(voxelInfo.GetVoxel())) as GameObject; VoxelEvents events = voxelObject.GetComponent <VoxelEvents>(); if (events != null) { //进入某体素 if (chunk != LastChunk || voxelIndex.IsEqual(LastIndex) == false) { events.OnBlockEnter(this.gameObject, voxelInfo); } //停留 else { events.OnBlockStay(this.gameObject, voxelInfo); } } LastChunk = chunk; LastIndex = voxelIndex; Destroy(voxelObject); }
public override void OnMouseDown(int mouseButton, VoxelInfo voxelInfo) { if (Globe.isMouseVisible) { return; } if (mouseButton == 0) { //左键销毁 Voxel.DestroyBlock(voxelInfo); } else if (mouseButton == 1) { //右键放置 if (voxelInfo.GetVoxel() == 8) { //草(一种植物)可以被覆盖 Voxel.PlaceBlock(voxelInfo, ExampleInventory.HeldBlock); } else { //其他block不可以 VoxelInfo newInfo = new VoxelInfo(voxelInfo.adjacentIndex, voxelInfo.chunk); Voxel.PlaceBlock(newInfo, ExampleInventory.HeldBlock); } } }