private void Update() { var col = Physics.OverlapSphere(transform.position, 2, SkillDamageCaculate.GetDropItemLayer()); foreach (var c in col) { //Log.Sys("DropItem: "+c.gameObject); if (c.gameObject.GetComponent <DropItemStatic>()) { c.gameObject.GetComponent <DropItemStatic>().PickCol(this.gameObject); } } }
//3条射线,当前角度 偏左 偏右角度 private bool CheckHit() { if (attr == null) { return(false); } degree = GameConst.Instance.SectorDegree; distance = GameConst.Instance.SectorDistance; //var curDir = transform.parent.rotation.eulerAngles.y; var curDir = sm.controlDir; //var dir = transform.parent.forward; var dir = Quaternion.Euler(new Vector3(0, curDir, 0)) * Vector3.forward; //主体的位置 var pos = attr.gameObject.transform.position + new Vector3(0, 0.3f, 0) + dir * 1; //向前偏移一些距离 var forwardDir = Quaternion.Euler(new Vector3(0, curDir, 0)) * Vector3.forward; var left = Quaternion.Euler(new Vector3(0, curDir - degree, 0)) * Vector3.forward; var right = Quaternion.Euler(new Vector3(0, curDir + degree, 0)) * Vector3.forward; var tests = new Vector3[] { forwardDir, left, right, }; RaycastHit hitInfo; bool hitYet = false; hitTarget = null; foreach (var d in tests) { var h = Physics.Raycast(pos, d, out hitInfo, distance, SkillDamageCaculate.GetDamageLayer()); Log.Sys("HitTarget: " + h + " pos " + hitInfo.collider + " d " + d + " pos " + pos); if (h) { Log.Sys("HitTarget: " + h + " pos " + hitInfo.collider); if (hitInfo.collider.gameObject.tag == GameTag.Player) { hitYet = true; hitTarget = hitInfo.collider.gameObject; break; } } } IsHitTarget = hitYet; Log.Sys("HitResult:" + IsHitTarget); return(hitYet); }