Advertisement
Albert3069

미완성 AI Script 0929

Sep 28th, 2021
1,134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.42 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Numerics;
  5. using UnityEngine;
  6. using UnityEngine.AI;
  7. using Vector3 = UnityEngine.Vector3;
  8.  
  9. public class AI : MonoBehaviour
  10. {
  11.     // Start is called before the first frame update
  12.     PC_Character Character;
  13.     PC_CharacterStats CharacterStats;
  14.  
  15.     NavMeshAgent navMeshAgent;
  16.     Animator animator;
  17.  
  18.     public GameObject Enemy;    //적 오브젝트
  19.     public GameObject Player;   //일단 거리계산을 위해 플레이어 오브젝트도 따로 만듦
  20.     Vector3 EnemyDir;
  21.     Vector3 AvoidPosition = new Vector3(0.9f, 6.7f, 25);    //미리 설정한 회피 위치
  22.     Vector3 TestPositon = new Vector3(-5.8f, 7, -10);   //미리 설정한 위치
  23.     Vector3 CenterPosition = new Vector3(-6, 6.5f, 6);  //미리 설정한 센터 위치
  24.  
  25.     private float Dist; //플레이어와 적 거리 계산해 넣을 변수
  26.  
  27.     void Start()
  28.     {
  29.         Character = GetComponent<PC_Character>();
  30.         CharacterStats = GetComponent<PC_CharacterStats>();
  31.  
  32.         navMeshAgent = GetComponent<NavMeshAgent>();
  33.         animator = GetComponent<Animator>();
  34.     }
  35.  
  36.     // Update is called once per frame
  37.     void Update()
  38.     {
  39.         Dist = Vector3.Distance(Player.transform.position, Enemy.transform.position);   //플레이어와 적 오브젝트 간의 거리 계산
  40.        
  41.         if (Enemy != null && !Enemy.activeSelf) Enemy = null;   // 적이 죽었을시 타켓 초기화
  42.  
  43.         if (Enemy == null)
  44.         {
  45.             animator.SetBool("isMove", true);
  46.             navMeshAgent.SetDestination(CenterPosition);    //적이 없으면 센터로 이동
  47.         }
  48.  
  49.         if (Enemy != null && !Enemy.GetComponent<PC_CharacterStats>().InGrass)  // 적이 부쉬에 없을시
  50.         {
  51.             if (CharacterStats.HP < Enemy.GetComponent<PC_CharacterStats>().HP)
  52.             {
  53.                 //체력이 적보다 적을 때 취하는 행동?
  54.                 //일단 도망가는 AI 개선이 필요하다.
  55.                 animator.SetBool("isMove", true);
  56.                 navMeshAgent.stoppingDistance = 0.5f;
  57.                 if (gameObject.CompareTag("Enemy")) navMeshAgent.SetDestination(AvoidPosition);
  58.                 else if(gameObject.CompareTag("Friendly")) navMeshAgent.SetDestination(TestPositon);
  59.             }
  60.             else
  61.             {
  62.                 //적보다 체력이 불리하지 않을 때 취하는 행동
  63.                 animator.SetBool("isMove", true);
  64.                 navMeshAgent.stoppingDistance = 5;  //적과 5의 거리 유지?
  65.                 navMeshAgent.SetDestination(Enemy.transform.position);
  66.                
  67.             }
  68.            
  69.             EnemyDir = Enemy.transform.position - transform.position;   //적의 위치와 나의 위치 상대 연산?
  70.             Character.point = new Vector3(EnemyDir.x, 0, EnemyDir.z);
  71.  
  72.             if (CharacterStats.ReadyUltiFire) Character.UltimateAttack();   //궁극기 충전 - 궁극기 나감
  73.             else Character.BasicAttack();   //그렇지 않다면 그냥 일반 공격을 함
  74.         }
  75.         else if (CharacterStats.HP <= 100) navMeshAgent.SetDestination(AvoidPosition);  
  76.         //적이 부쉬에 있고, 캐릭터 HP가 100보다 작다면 회피 포지션으로 목적지 설정
  77.        
  78.     }
  79.     //목적지가 Enemy.transform.position일 때(추적 중일 때) 플레이어가 부쉬에 들어간다면
  80.     //&& 그리고 플레이어가 AI의 식별 거리 내에 있다면 ==> 두 조건 모두 만족 시 플레이어가 부쉬로 들어간 위치 찍고 추적하는 구문 제작해야함
  81.     private void OnTriggerEnter(Collider collision) //플레이어가 트리거 안에 들어갔을 때 실행되는 메소드
  82.     {
  83.         if (Dist <= 6 && collision.CompareTag("Grass")) //플레이어와 적 간 거리 6 이내이고, 플레이어가 들어간 곳이 부쉬일 때
  84.         {
  85.             Vector3 spotPos=Player.transform.position;  //플레이어가 부쉬에 들어갈 당시의 위치
  86.             navMeshAgent.SetDestination(spotPos);   //플레이어가 부쉬에 들어간 지점의 위치로 목적지 설정.
  87.             navMeshAgent.stoppingDistance = 1;  //부쉬에 들어간 지점과의 거리는 1이 되면 되도록 설정.
  88.            
  89.         }
  90.     }
  91.  
  92.     private void OnEnable()
  93.     {
  94.         Enemy = null;   //초기화???
  95.         EnemyDir = transform.position;  //???
  96.     }
  97.  
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement