void unequia(RoleController roleController, string id) { GameObject giveUpWeaponObject = GameObjectManager.Instance.Create(id); DropItemController dropItemController = giveUpWeaponObject.GetComponent <DropItemController>(); SceneManager.Instance.DropItemEnterSceneWithLocalPosition(dropItemController, roleController.SceneId, roleController.gameObject.transform.localPosition + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(1.0f, 1.5f), UnityEngine.Random.Range(-0.5f, 0.5f))); }
public void DropEquipByPlace(EquipPlaceType equipPlaceType, string sceneId, Vector3 position) { EquipData equipData = GetEquipByPlace(equipPlaceType); if (equipData != null && !string.IsNullOrWhiteSpace(equipData.id)) { string equipId = equipData.id; if (GameObjectManager.Instance.GetPrefab(equipId) != null) { // 丢下身上的装备 add by TangJian 2017/09/01 21:41:20 GameObject giveUpItem = GameObjectManager.Instance.Spawn(equipId); DropItemController dropItemController = giveUpItem.GetComponent <DropItemController>(); SceneManager.Instance.DropItemEnterSceneWithWorldPosition(dropItemController, sceneId, position + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(1.0f, 1.5f), Random.Range(-0.5f, 0.5f))); } } }
void drop() { foreach (var item in dropItems) { GameObject go = GameObjectManager.Instance.Create(item); if (go != null) { DropItemController dropItemController = go.GetComponent <DropItemController>(); SceneManager.Instance.DropItemEnterSceneWithWorldPosition(dropItemController, SceneId, gameObject.transform.position + new Vector3(0, 1, 0)); Rigidbody rigidbody = go.GetComponent <Rigidbody>(); if (rigidbody != null) { float min = 100; float max = 200; rigidbody.AddForce(new Vector3(Random.Range(-max, max), Random.Range(min, max), Random.Range(-max, max))); } } } Destroy(gameObject, 3); }
public void CreateItem(string id, bool randomPos = false, bool rotating = false) { var player = GameManager.Instance.Player1; if (player) { GameObject gameObject = GameObjectManager.Instance.Create(id); DropItemController dropItemController = gameObject.GetComponent <DropItemController>(); if (gameObject != null) { var pos = player.transform.localPosition + new Vector3(0, 5, 0); if (randomPos) { pos += new Vector3(Random.Range(-5, 5), Random.Range(-5, 5), Random.Range(-5, 5)); } SceneManager.Instance.DropItemEnterSceneWithLocalPosition(dropItemController, player.SceneId, pos); if (rotating) { gameObject.transform.eulerAngles = new Vector3(0, 0, Random.Range(0, 360)); } } } }
public override void Interact() { TriggerController selfTriggerController = gameObject.GetChild("InteractiveCube").GetComponent <TriggerController>(); TriggerController otherTriggerController = selfTriggerController.GetFirstKeepingTriggerController(); if (selfTriggerController != null && otherTriggerController != null && otherTriggerController.ITriggerDelegate != null) { GameObject interactObject = otherTriggerController.ITriggerDelegate.GetGameObject(); if (interactObject.tag == "NPC") { RolePromptController rolePromptController = GetComponentInChildren <RolePromptController>(); rolePromptController.killtalk(); OnInteractAction(interactObject); AnimManager.Instance.PrintBubble("[color=#FFFFFF,#000000]fgtdfg[/color]", interactObject); } else if (interactObject.tag == "Ladder") { LadderController ladderController = interactObject.GetComponent <LadderController>(); BoxCollider boxCollider = otherTriggerController.gameObject.GetComponent <BoxCollider>(); Bounds bou = boxCollider.bounds; gameObject.layer = LayerMask.NameToLayer("Default"); if ((interactObject.transform.position.y + bou.center.y + ((bou.size.y / 2) - 1.6f)) < transform.position.y) { switch (ladderController.laddertype) { case laddertype.Left: transform.position = new Vector3(interactObject.transform.position.x + CharacterController.radius, transform.position.y - 1.6f, interactObject.transform.position.z); break; case laddertype.Right: transform.position = new Vector3(interactObject.transform.position.x - CharacterController.radius, transform.position.y - 1.6f, interactObject.transform.position.z); break; case laddertype.Center: transform.position = new Vector3(interactObject.transform.position.x, transform.position.y - 1.6f, interactObject.transform.position.z - 0.1f); break; } } else { switch (ladderController.laddertype) { case laddertype.Left: transform.position = new Vector3(interactObject.transform.position.x + CharacterController.radius, transform.position.y, interactObject.transform.position.z); break; case laddertype.Right: transform.position = new Vector3(interactObject.transform.position.x - CharacterController.radius, transform.position.y, interactObject.transform.position.z); break; case laddertype.Center: transform.position = new Vector3(interactObject.transform.position.x, transform.position.y, interactObject.transform.position.z - 0.1f); break; } } if (animatorParams.ContainsKey("ladder_type")) { _animator.SetInteger("ladder_type", (int)ladderController.laddertype); } if (animatorParams.ContainsKey("start_climb_ladder")) { _animator.SetBool("start_climb_ladder", true); } } else if (interactObject.GetComponent <IInteractable>() != null) { IInteractable interactable = interactObject.GetComponent <IInteractable>(); if (interactable.CanInteract()) { interactable.Interact(); } } else if (interactObject.GetComponent <PortalController>()) { PortalController portalController = interactObject.GetComponent <PortalController>(); if (portalController) { this.OpenPortal(portalController); } } else if (interactObject.GetComponent <FenceDoorController>()) { FenceDoorController fenceDoorController = interactObject.GetComponent <FenceDoorController>(); if (fenceDoorController) { fenceDoorController.OpenPortal(); } } else { if (interactObject != null && interactObject.Equals(null) == false) { DropItemController dropItemController = interactObject.GetComponent <DropItemController>(); if (dropItemController != null) { var itemData = ItemManager.Instance.getItemDataById <ItemData>(dropItemController.ItemId); GameManager.Instance.PickupTips("Textures/Icon/" + itemData.icon, itemData.name, itemData.count.ToString()); switch (itemData.itemType) { case ItemType.Consumable: Debug.Log("捡到消耗品 id = " + itemData.id); Destroy(interactObject); ConsumableData consumableData = ItemManager.Instance.getItemDataById <ConsumableData>(itemData.id); if (consumableData != null) { switch (consumableData.consumableUseType) { case ConsumableUseType.deposit: RoleData.AddConsumableItem(itemData.id, itemData.count); PickupConsumable(); break; case ConsumableUseType.ImmediateUse: BuffController.AddBuff(consumableData.buffId); break; } } break; case ItemType.Other: RoleData.OtherItemList.Add(itemData); dropItemController.RemoveSelf(); break; case ItemType.Equip: var weaponData = ItemManager.Instance.getItemDataById <WeaponData>(dropItemController.ItemId); if (weaponData != null) { this.JuageEquipPossessType(weaponData); } else { var equipData = ItemManager.Instance.getItemDataById <EquipData>(itemData.id); RoleData.EquipData.UseEquip(equipData, interactObject.transform.localPosition + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(1.0f, 1.5f), Random.Range(-0.5f, 0.5f))); } Destroy(interactObject); break; } } else { var interactive = interactObject.GetComponent <ITriggerDelegate>(); if (interactive != null) { Event evt = new Event(); evt.Type = EventType.Interact; evt.Data = GetGameObject(); interactive.OnEvent(evt); } } } } } }
public void DropItemEnterWithLocalPosition(DropItemController dropItemController, Vector3 localPosition) { ObjectEnterWithLocalPosition(dropItemController, localPosition); }
void Prompt() { selfTriggerController = parent.GetComponentInChildren <TriggerController>(); valueMonitorPool.Clear(); valueMonitorPool.AddMonitor(() => { otherTriggerController = selfTriggerController.GetFirstKeepingTriggerController(); if (otherTriggerController != null) { DoorController doorController = otherTriggerController.ITriggerDelegate as DoorController; NpcController npcController = otherTriggerController.ITriggerDelegate as NpcController; TreasureBoxController treasureBox = otherTriggerController.ITriggerDelegate as TreasureBoxController; JoystickController joystickController = otherTriggerController.ITriggerDelegate as JoystickController; DropItemController dropItemController = otherTriggerController.ITriggerDelegate as DropItemController; MagicPortalController magicPortalController = otherTriggerController.ITriggerDelegate as MagicPortalController; if (doorController != null) { if (doorController.IsClosed()) { return(0); } else { return(1); } } else if (npcController != null) { return(2); } else if (treasureBox != null) { if (treasureBox.IsOpened()) { return(3); } else { return(4); } } else if (joystickController != null) { return(5); } else if (dropItemController != null) { return(6); } else if (magicPortalController != null) { return(7); } } return(-1); }, (int from, int to) => { if (otherTriggerController != null) { GameObject interactObject = otherTriggerController.ITriggerDelegate.GetGameObject(); if (interactObject != null) { DoorController doorController = interactObject.GetComponent <DoorController>(); NpcController npcController = interactObject.GetComponent <NpcController>(); TreasureBoxController treasureBox = interactObject.GetComponent <TreasureBoxController>(); JoystickController joystickController = interactObject.GetComponent <JoystickController>(); DropItemController dropItemController = interactObject.GetComponent <DropItemController>(); MagicPortalController magicPortalController = interactObject.GetComponent <MagicPortalController>(); if (doorController != null) { if (doorController.IsClosed()) { ShowPrompt("ui://UI/key"); } else { HidePrompt(); } } else if (npcController != null) { ShowPrompt("ui://UI/talkmark"); } else if (treasureBox != null) { if (treasureBox.IsOpened()) { HidePrompt(); } else { ShowPrompt("ui://UI/Exclamatory mark"); } } else if (joystickController) { ShowPrompt("ui://UI/key"); } else if (dropItemController != null) { if (dropItemController.ItemData.pickUpMethod == PickUpMethod.Interact) { ShowPrompt("ui://UI/Exclamatory mark"); } } else if (magicPortalController != null) { ShowPrompt("ui://UI/Exclamatory mark"); } else { HidePrompt(); } } } else { HidePrompt(); } }); }
public async Task<SceneController> CreateScene(SceneData sceneData, int difficultyLevel = 1) { // 新建场景 GameObject prefab = await AssetManager.LoadAssetAsync<GameObject>("Assets/Resources_moved/Prefabs/Scenes/" + sceneData.rawSceneId+".prefab"); Debug.Assert(prefab != null, "找不到场景预制体:" + "Prefabs / Scenes / " + sceneData.rawSceneId); GameObject scene = Instantiate(prefab); // Debug.Log(" 预制体id " + sceneData.rawSceneId); scene.transform.parent = SceneRoot.transform; scene.transform.localPosition = GetOnlyScenePosition(); scene.name = sceneData.sceneId; SceneController sceneController = scene.GetComponent<SceneController>(); sceneController.SceneData = sceneData; { // 添加怪物 add by TangJian 2017/08/03 21:35:51 { foreach (var roleData in sceneData.roleDatas) { roleData.locationData.position = sceneController.GetAreaRandomPosition(roleData.locationData.areaId); roleData.difficultyLevel = difficultyLevel; sceneController.AddRole(roleData); } } // 添加物品 add by TangJian 2017/08/22 19:45:51 { foreach (var itemData in sceneData.itemDatas) { var item = GameObjectManager.Instance.Create(itemData.id); DropItemController dropItemController = item.GetComponent<DropItemController>(); itemData.position = sceneController.GetAreaRandomPosition("MonsterAreas"); sceneController.DropItemEnterWithLocalPosition(dropItemController, itemData.position); } } // 添加放置物体 add by TangJian 2018/01/23 15:52:08 { foreach (var placementData in sceneData.PlacementDatas) { var placementObject = GameObjectManager.Instance.Create(placementData.id); SceneObjectController sceneObjectController = placementObject.GetComponent<SceneObjectController>(); PlacementController treasureBoxController = placementObject.GetComponent<PlacementController>(); treasureBoxController.Placementdata = placementData; placementData.position = sceneController.GetAreaRandomPosition("MonsterAreas"); sceneController.PlacementEnterWithLocalPosition(sceneObjectController, placementData.position); ScenePlacementComponent sceneComponent = treasureBoxController.gameObject.GetComponent<ScenePlacementComponent>(); if (sceneComponent != null) { sceneComponent.GridPos = placementObject.transform.localPosition; } } } // 设置门数据 add by TangJian 2018/12/26 16:00 for (int i = 0; i < sceneData.portalDatas.Count; i++) { PortalData portalData = sceneData.portalDatas[i]; Transform portalTransform = scene.transform.Find("Portals/" + portalData.id); Debug.Assert(portalTransform != null, "找不到门: " + sceneData.sceneId + ":" + portalData.id); PortalController portalController = portalTransform.GetComponent<PortalController>(); portalController.PortalData = portalData; portalController.State = 1; } // 为丢失NavMeshDataBuild { foreach(var item in scene.GetComponents<UnityEngine.AI.NavMeshSurface>()) { if (item.navMeshData == null) { item.BuildNavMesh(); } } } } // 初始化 // sceneController.InitData(); return sceneController; }
private void showdropitem() { valueMonitorPool.AddMonitor((Func <TriggerController>)(() => { GameObject player = GameObject.Find("Player1"); TriggerController selfTriggerController = player.GetComponentInChildren <TriggerController>(); otherTriggerController = selfTriggerController.GetFirstKeepingTriggerController(); return(otherTriggerController); }), (TriggerController from, TriggerController to) => { if (Typedown) { if (otherTriggerController != null) { GameObject interactObject = otherTriggerController.ITriggerDelegate.GetGameObject(); if (interactObject != null) { DropItemController dropItemController = interactObject.GetComponent <DropItemController>(); DoorController doorController = interactObject.GetComponent <DoorController>(); if (dropItemController != null) { var itemData = ItemManager.Instance.getItemDataById <ItemData>(dropItemController.ItemId); if (itemData != null) { GameObject player = GameObject.Find("Player1"); RoleController roleController = player.GetComponent <RoleController>(); if (itemData is WeaponData) { AttributeShow <WeaponData>(itemData as EquipData); ShowRoleInfodown(); } else if (itemData is ArmorData) { AttributeShow <ArmorData>(itemData as EquipData); ShowRoleInfodown(); } else if (itemData is DecorationData)//现阶段物品掉落使用 { DecorationData RoleDecorationData; AttributeShow <DecorationData>(itemData as EquipData); ShowRoleInfodown(); } else { HideRoleInfodown(); } } } else if (doorController != null) { Debug.Log("door"); } } } else { HideRoleInfodown(); } } }); }