0409 캐릭터의 시야각과 공격범위 생성
2021. 4. 9. 18:10ㆍunity
벡터 = 위치, 방향, 회전, 속도, 크기 등에서 사용
벡터의 종류
1. 수 묶음 벡터 (요소, 요소)
2. 기하 백터
벡터 (방향, 크기
상대좌표: 현재 죄표에서 나의 좌표
절대 좌표: 게임 세상속에서의 나의 좌표
벡터의 곱: 스칼라 곱
벡터의 길이ㅏ 늘어난다. (요소의 곱)
크기가 1인 벡터: 단위 벡터 (방향 벡터)
Vector3. forward(절대 좌표에서의 forward)
에디터 스트립트는 꼭 에디터 폴더 안에 있어야 함
1. 모노비헤이비어를 참조로 가지고 있는 경우
2. 단일로 있는 경우
using UnityEngine;
public class Hero : MonoBehaviour
{
private Fov fov;
private GameObject[] monsters;
// Start is called before the first frame update
void Start()
{
this.fov = this.GetComponent<Fov>();
this.monsters = GameObject.FindGameObjectsWithTag("monster");
}
// Update is called once per frame
void Update()
{
foreach (var monster in this.monsters)
{
var toOther = monster.transform.position - this.transform.position; //몬스터의 방향
var angle = Vector3.Angle(this.transform.forward, toOther); //몬스터와의 각도
var distance = toOther.magnitude; //길이
if (distance <= this.fov.area && angle < this.fov.angle / 2)
{
Debug.DrawLine(this.transform.position, monster.transform.position, Color.red);
}
}
}
}
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Fov))]
public class FovEditor : Editor
{
private void OnSceneGUI()
{
Fov fov = (Fov)this.target;
//주어진 각도의 1/2
Vector3 fromAnglePos = fov.CirclePoint(-fov.angle * 0.5f);
fov.anglePos = fromAnglePos;
//색상
Handles.color = new Color(1, 1, 1,0.3f);
Handles.DrawWireDisc(fov.gameObject.transform.position, //원점
Vector3.up, //방향 벡터
fov.area); //원의 반지름
Handles.DrawSolidArc(fov.transform.position, //원점
Vector3.up, //노멀백터
fromAnglePos, //시작위치
fov.angle, //각도
fov.area); //반지름
GUIStyle guiStyle = new GUIStyle();
guiStyle.fontSize = 40;
Handles.Label(fov.transform.position + fov.transform.forward,
fov.angle.ToString(), guiStyle);
}
}
using UnityEngine;
public class Fov : MonoBehaviour
{
public float area = 1f;
public float angle = 60f;
public Vector3 anglePos;
public Vector3 CirclePoint(float angle)
{
return new Vector3(
Mathf.Sin((angle + this.transform.eulerAngles.y) * Mathf.Deg2Rad),
0,
Mathf.Cos((angle + this.transform.eulerAngles.y) * Mathf.Deg2Rad));
}
}
몹이 캐릭터의 공격범위 안에 들어올 경우 붉은색 줄이 그려지도록 만듦.
'unity' 카테고리의 다른 글
0414 cinemachine/coroutine/IK pivot (0) | 2021.04.14 |
---|---|
0412 쿠키런 달리기 (0) | 2021.04.12 |
0409 총알 피하기 게임 (랜덤 총알 + 유도탄 생성) (0) | 2021.04.09 |
0408 마우스 클릭하는 곳으로 캐릭터 이동시키기 (0) | 2021.04.08 |
0408 타겟 포인트로 달려가서 적 때리기 (0) | 2021.04.08 |