void PickUpItem(InteractiveObj self) { //if (!ikCtrl) ikCtrl = self.GetComponent<UnityChan.IKCtrlRightHand>(); if (objPickedItem) { ThrowItem(self); return; } Collider[] items = Physics.OverlapSphere(self.transform.position, fDistance, 1 << LayerMask.NameToLayer("Accessable")); for (int i = 0, length = items.Length; i < length; ++i) { Q_SceneObj sceneObj = items[i].GetComponent <Q_SceneObj>(); if (!sceneObj) { continue; } switch (sceneObj.objType) { case Q_SceneObj.Type.PickUpItem: Rigidbody rigid = sceneObj.GetComponent <Rigidbody>(); Vector3 localPos = transform.localPosition; Transform tsfSceneCamera = ThirdPersonPlayer.Instance.CameraController.transform; rigid.constraints = RigidbodyConstraints.FreezeAll; rigid.transform.SetParent(ThirdPersonPlayer.Instance.transform.Find("HandItemPos"), false); rigid.transform.localPosition = Vector3.zero; rigid.transform.localRotation = Quaternion.identity; rigid.gameObject.SetLayer(self.gameObject.layer); objPickedItem = sceneObj.gameObject; //ikCtrl.isIkActive = true; //ikCtrl.targetObj = sceneObj.transform; return; } } }
private void OnTriggerEnter(Collider other) { Q_SceneObj obj = other.GetComponent <Q_SceneObj>(); if (obj && obj.objType == Q_SceneObj.Type.Skill) { Explosion(); } }
public void OnTrigger(Collider other) { if (!Master.IsAlive || !BattleManager.Instance.IsBattleBegin) { return; } Q_SceneObj sceneObj = other.GetComponent <Q_SceneObj>(); if (sceneObj) { switch (sceneObj.objType) { case Q_SceneObj.Type.Skill: SkillEffectBase[] skillEffects = sceneObj.GetComponentsInChildren <SkillEffectBase>(true); for (int i = 0, length = skillEffects.Length; i < length; ++i) { skillEffects[i].Execute(WorldInteractObj.Instance, Master); } sceneObj.UseObj(); break; case Q_SceneObj.Type.GuidePoint: sceneObj.UseObj(); UISystem.Instance.ShowGuideDialog(sceneObj.name); break; case Q_SceneObj.Type.TriggerPoint: sceneObj.UseObj(); break; case Q_SceneObj.Type.LoadScene: sceneObj.UseObj(); GameClient.Instance.LoadScene(sceneObj.strNeedItemName); break; case Q_SceneObj.Type.Vedio: VedioPlayer.Play(sceneObj.strNeedItemName, null); sceneObj.gameObject.SetActive(false); sceneObj.UseObj(); break; case Q_SceneObj.Type.SuccessPoint: sceneObj.UseObj(); BattleManager.Instance.BattleOver(true); break; } } InteractiveObj target = other.GetComponent <InteractiveObj>(); if (target && target.IsAlive && target.IsEnemy(ThirdPersonPlayer.Instance.Camp)) { ThirdPersonPlayer.Instance.DoDamage(new Damage(WorldSetting.Effect.Physical, 1), target); } }
void PickUpItem() { if (!IsAlive || UISystem.Instance.InAnyGuide) { return; } Collider[] cols = Physics.OverlapBox(transform.position, ColliderSelf.bounds.size / 2, transform.rotation); for (int i = 0; i < cols.Length; i++) { Q_SceneObj sceneObj = cols[i].GetComponent <Q_SceneObj>(); if (!sceneObj) { continue; } switch (sceneObj.objType) { case Q_SceneObj.Type.Item: if (!dicPickedItems.ContainsKey(sceneObj.name)) { dicPickedItems[sceneObj.name] = 1; } dicPickedItems[sceneObj.name] = dicPickedItems[sceneObj.name] + 1; sceneObj.UseObj(); return; case Q_SceneObj.Type.NeedItem: if (!dicPickedItems.ContainsKey(sceneObj.strNeedItemName)) { UISystem.Instance.ShowMessageBox("需要" + sceneObj.strNeedItemName + "!"); return; } int num = dicPickedItems[sceneObj.strNeedItemName]; if (--num < 0) { dicPickedItems.Remove(sceneObj.strNeedItemName); UISystem.Instance.ShowMessageBox("需要" + sceneObj.strNeedItemName + "!"); return; } sceneObj.UseObj(); if (num == 0) { dicPickedItems.Remove(sceneObj.strNeedItemName); } else { dicPickedItems[sceneObj.strNeedItemName] = num; } return; } } }
private void OnTriggerExit(Collider other) { Q_SceneObj sceneObj = other.GetComponent <Q_SceneObj>(); if (!sceneObj) { return; } switch (sceneObj.objType) { case Q_SceneObj.Type.GuidePoint: UISystem.Instance.CloseGuide(); break; } }
void OnTrigger(Collider other) { if (!BattleManager.Instance.IsBattleBegin) { return; } switch (objType) { case Type.Skill: InteractiveObj target = other.GetComponent <InteractiveObj>(); if (!target || target == ThirdPersonPlayer.Instance || !target.IsEnemy(ThirdPersonPlayer.Instance.Camp)) { return; } SkillEffectBase[] skillEffects = GetComponentsInChildren <SkillEffectBase>(true); for (int i = 0, length = skillEffects.Length; i < length; ++i) { skillEffects[i].Execute(WorldInteractObj.Instance, target); } UseObj(); break; case Type.TriggerPoint: Q_SceneObj obj = other.GetComponent <Q_SceneObj>(); if (obj && obj.objType == Type.PickUpItem) { UseObj(); } break; case Type.PickUpItem: Rigidbody body = GetComponent <Rigidbody>(); if (body && body.velocity.sqrMagnitude > 0.9f) { UseObj(); } break; } }
protected override CastResult OnCast() { for (int i = 0, length = Random.Range(MissleMinCount, MissleMaxCount + 1); i < length; ++i) { if (ReleaseFX) { EffectPlayer.PlayOnTransform(ReleaseFX, ReleaseFXPoint); } if (ReleaseSE) { AudioSystem.Instance.PlayOnTransform(ReleaseSE, ReleaseFXPoint); } Missle missle = Instantiate(MisslePrefab, transform.position, transform.rotation).GetOrAddComponent <Missle>(); switch (LockType) { case SkillLockType.Position: switch (MissleType) { case Type.Bullet: missle.InitBullet(TargetPos, MissileSpeed, Settlement); break; default: missle.Init(TargetPos, MissileSpeed, Settlement); break; } break; case SkillLockType.NoLock: switch (MissleType) { case Type.Bullet: //missle.InitBullet(TargetPos, MissileSpeed, Settlement); break; default: missle.gameObject.AddComponent <SphereCollider>().isTrigger = true; missle.gameObject.AddComponent <Rigidbody>().isKinematic = true; missle.InitFlyFront(Master.transform.forward, MissileSpeed, SkillMaxRange, (hitObj, missleScript) => { if (hitObj) { InteractiveObj target = hitObj.GetComponent <InteractiveObj>(); if (target) { if (target.IsAlive && target.IsEnemy(Master.Camp)) { Settlement(target); Destroy(missleScript.gameObject); } return; } Q_SceneObj sceneObj = hitObj.GetComponent <Q_SceneObj>(); if (sceneObj) { switch (sceneObj.objType) { case Q_SceneObj.Type.Skill: case Q_SceneObj.Type.Item: case Q_SceneObj.Type.NeedItem: break; default: return; } } } if (HitFX) { EffectPlayer.PlayAtPos(HitFX, missleScript.transform.position); } if (HitSE) { AudioSystem.Instance.PlayAtPos(HitSE, missleScript.transform.position); } missleScript.Alive = false; Destroy(missleScript.gameObject); }); break; } break; default: if (Target) { missle.Init(Target.transform, MissileSpeed, (tsf) => Settlement(tsf.GetComponent <InteractiveObj>())); } else { missle.Init(TargetPos, MissileSpeed, Settlement); } break; } missle.SetLifeTime(MissleLifeTime); if (FlySE) { AudioSystem.Instance.PlayOnTransform(FlySE, missle.transform); } } return(CastResult.Success); }