/// <summary> /// メッセージ表示開始 /// </summary> private void CallMessage() { if (isCall) { return; } if (isPossible) { if (messageIndex != -1) { isCall = true; AdvancedWriteMessageSingleton.instance.Write(messageIndex); ExamineIconManager.HideIcon(); } } }
void OnTriggerStay(Collider other) { if (grabbedObject != null) { return; } // hitListに何か含まれていればreturn。(拾えるもの優先) foreach (GraspItem listItem in hitList) { ColorObjectBase colorObject = listItem.GetComponent <ColorObjectBase>(); if (colorObject != null) { if (!colorObject.isDisappearance) { return; } } else { return; } } // 目の前の物を調べる // 調べられるもの全てを配列として取得 Component[] checkComponents = other.GetComponents(typeof(ICheckEvent)); if (checkComponents == null) { return; } ExamineIconManager.HideIcon(); if ((Input.GetKeyDown(KeyCode.E) || Input.GetMouseButtonDown(1)) && !player.isIrradiation) { foreach (ICheckEvent component in checkComponents) { component.Check(); } } }
protected override void Update() { base.Update(); if (AdvancedWriteMessageSingleton.instance.isWrite) { return; } Collider[] colliders = Physics.OverlapSphere(transform.position, radius); float minDistance = Mathf.Infinity; Component[] iconOwnerCheckComponents = null; bool isGrabbed = false; foreach (Collider hitCollider in colliders) { float distance = (hitCollider.transform.position - transform.position).sqrMagnitude; Component[] checkComponents = hitCollider.gameObject.GetComponents(typeof(ICheckEvent)); if (distance < minDistance && checkComponents.Length != 0) { if (hitCollider.GetComponent <GraspItem>() != null && !hitCollider.GetComponent <GraspItem>().enabled) { continue; } if (isGrabbed) { if (hitCollider.GetComponent <GraspItem>() != null) { minDistance = distance; iconOwnerCheckComponents = checkComponents; } } else { if (hitCollider.GetComponent <GraspItem>() != null) { isGrabbed = true; } minDistance = distance; iconOwnerCheckComponents = checkComponents; } } } if (iconOwnerCheckComponents != null && iconOwnerCheckComponents.Length != 0) { if (grabbedObject == null) { foreach (ICheckEvent checkEvent in iconOwnerCheckComponents) { checkEvent.ShowIcon(); } if ((Input.GetKeyDown(KeyCode.E) || Input.GetMouseButtonDown(1)) && !player.isIrradiation) { foreach (ICheckEvent component in iconOwnerCheckComponents) { component.Check(); } } } else { ExamineIconManager.HideIcon(); } } else { ExamineIconManager.HideIcon(); } if (hitList.Count != 0) { if (Input.GetMouseButtonDown(1) && !Input.GetMouseButton(0)) { minDistance = Mathf.Infinity; GraspItem grabItem = null; foreach (GraspItem item in hitList) { float distance = (item.transform.position - transform.position).magnitude; if (minDistance > distance && !item.collider.isTrigger) { grabItem = item.GetComponent <GraspItem>(); minDistance = distance; } } if (grabItem != null) { grabItem.Grab(transform.parent.gameObject); grabbedObject = grabItem; grabbedObject.transform.parent = transform.parent.parent; } } } if (grabbedObject != null) { bool isLetGo = false; // 持ってるものを離す if ((transform.position - grabbedObject.transform.position).sqrMagnitude > grabbedLimitLeaving) { isLetGo = true; } else { grabbedObject.rigidbody.velocity = (transform.position - grabbedObject.transform.position) * grabbedMoveSpeed; } if (Input.GetMouseButtonUp(1)) { isLetGo = true; } else if (grabbedObject.GetComponent <ColorObjectBase>() != null && grabbedObject.GetComponent <ColorObjectBase>().isDisappearance) { isLetGo = true; } if (isLetGo) { LetGo(); } } }
protected override void Update() { base.Update(); if (AdvancedWriteMessageSingleton.instance.isWrite) { return; } Collider[] colliders = Physics.OverlapSphere(transform.position, radius); float minDistance = Mathf.Infinity; Component[] iconOwnerCheckComponents = null; bool isGrabbed = false; foreach (Collider hitCollider in colliders) { float distance = (hitCollider.transform.position - transform.position).sqrMagnitude; Component[] checkComponents = hitCollider.gameObject.GetComponents(typeof(ICheckEvent)); if (distance < minDistance && checkComponents.Length != 0) { if (hitCollider.GetComponent <GraspItem>() != null && !hitCollider.GetComponent <GraspItem>().enabled) { continue; } if (isGrabbed) { if (hitCollider.GetComponent <GraspItem>() != null) { minDistance = distance; iconOwnerCheckComponents = checkComponents; } } else { if (hitCollider.GetComponent <GraspItem>() != null) { isGrabbed = true; } minDistance = distance; iconOwnerCheckComponents = checkComponents; } } } // 調べられるものがあるとき if (iconOwnerCheckComponents != null && iconOwnerCheckComponents.Length != 0) { if (grabbedObject == null) { foreach (ICheckEvent checkEvent in iconOwnerCheckComponents) { checkEvent.GetIconSprite(); } // 調べるコマンドが実行されたとき if ((Input.GetKeyDown(KeyCode.E) || Input.GetMouseButtonDown(1)) && !player.isIrradiation) { // 調べられるものなら調べる foreach (ICheckEvent component in iconOwnerCheckComponents) { component.Check(); } } } else { // 掴んでいるときは調べられない ExamineIconManager.HideIcon(); } } else { ExamineIconManager.HideIcon(); } InputGrasp(); InputLetGo(); }