Пример #1
0
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        _owner        = animator.transform.GetComponent <MonoAI>();
        _owner.status = AIStatus.Idle;

        return;
    }
Пример #2
0
 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;
 }
Пример #3
0
    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;
    }
Пример #4
0
    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;
    }
Пример #5
0
 public void Init(MonoAI owner)
 {
     _owner = owner;
     return;
 }