public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { _owner = animator.transform.GetComponent <MonoAI>(); _owner.status = AIStatus.Idle; return; }
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { _owner = animator.transform.GetComponent <MonoAI>(); _owner.status = AIStatus.Freeze; _owner.GetComponent <MeshRenderer>().material.SetColor("_Color", Color.red); _owner.SetDetectorEnable(false); return; }
private void OnTriggerExit(Collider other) { MonoAI ai = other.transform.GetComponent <MonoAI>(); if (ai != null && ai.status != AIStatus.Freeze && ai.status != AIStatus.Attack) { _attackTargetDict.Remove(ai.index); } return; }
private void UpdateMesh(float radius, float angleDegree, int segments) { float angle = Mathf.Deg2Rad * angleDegree; float startAngle = Mathf.Deg2Rad * (180 - angleDegree) / 2f; float angleCurrent = startAngle + angle; float angleDelta = angle / segments; Mesh mesh = transform.GetComponent <MeshFilter>().mesh; Vector3[] vertices = mesh.vertices; for (int i = 1; i < vertices.Length; ++i) { RaycastHit hitInfo; Vector3 direction = transform.TransformPoint(vertices[i]) - transform.position; float length = radius; LayerMask blockMask = 1 << 8 | 1 << 9 | 1 << 10; if (Physics.Raycast(transform.position, direction.normalized, out hitInfo, length, blockMask)) { Vector3 hitPos = transform.InverseTransformPoint(hitInfo.point); vertices[i] = hitPos; //float ratio = (hitPos - transform.position).magnitude / radius; MonoPlayer player = hitInfo.transform.GetComponent <MonoPlayer>(); if (player != null) { //update the state to attack MonoAIManager.Instance.OnDetectEnemy(); } MonoAI ai = hitInfo.transform.GetComponent <MonoAI>(); if (ai != null && ai.status == AIStatus.Freeze) { //update the state to attack MonoAIManager.Instance.OnDetectEnemy(); } } else { Vector3 hitPos = transform.InverseTransformPoint(transform.position + direction.normalized * length); vertices[i] = hitPos; //float ratio = (hitPos - transform.position).magnitude / radius; } angleCurrent -= angleDelta; } mesh.vertices = vertices; mesh.RecalculateNormals(); return; }
public void Init(MonoAI owner) { _owner = owner; return; }