Aimbot-ParallelEnv/Assets/Script/InGame/Enemy.cs
Koha9 25eac00c53 Target & dynamic reward System V1.0
太多了...总之能用了,就这样吧,也懒得用英文写了(;´Д`)
ParameterContainer用于管理所有的Reward和Parameter.
TargetController用于生成目标,然后再让SceneBlockContainer实际生成目标块,并且兼顾reward计算功能和目标观察结果的获取.
EnemyContainer用于生成和删除敌人.
SceneBlockContainer用于生成和删除目标块.

States用于管理HP.
SceneBlock用于管理目标块的...一堆东西,比如目标大小,目标区内人数等和目标所属状态等.
2022-11-29 07:54:08 +09:00

85 lines
3.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Enemy : MonoBehaviour
{
//扇形角度
//[SerializeField] private float angle = 80f;
//扇形半径
//[SerializeField] private float radius = 3.5f;
//物体B
[SerializeField] private Transform b;
private bool flag;
/// <summary>
/// 判断target是否在扇形区域内
/// </summary>
/// <param name="sectorAngle">扇形角度</param>
/// <param name="sectorRadius">扇形半径</param>
/// <param name="attacker">攻击者的transform信息</param>
/// <param name="target">目标</param>
/// <returns>目标target在扇形区域内返回true 否则返回false</returns>
void Start()
{
}
// Update is called once per frame
void Update()
{
//detactDeath();
//flag = IsInRange(angle, radius, transform, b);
}
public bool IsInRange(float sectorAngle, float sectorRadius, Transform attacker, Transform target)
{
//攻击者位置指向目标位置的向量
Vector3 direction = target.position - attacker.position;
//点乘积结果
float dot = Vector3.Dot(direction.normalized, transform.forward);
//反余弦计算角度
float offsetAngle = Mathf.Acos(dot) * Mathf.Rad2Deg;
return offsetAngle < sectorAngle * .5f && direction.magnitude < sectorRadius;
}
/*
private void OnDrawGizmos()
{
Handles.color = flag ? Color.cyan : Color.red;
float x = radius * Mathf.Sin(angle / 2f * Mathf.Deg2Rad);
float y = Mathf.Sqrt(Mathf.Pow(radius, 2f) - Mathf.Pow(x, 2f));
Vector3 a = new Vector3(transform.position.x - x, transform.position.y, transform.position.z + y);
Vector3 b = new Vector3(transform.position.x + x, transform.position.y, transform.position.z + y);
Handles.DrawLine(transform.position, a);
Handles.DrawLine(transform.position, b);
float half = angle / 2;
for (int i = 0; i < half; i++)
{
x = radius * Mathf.Sin((half - i) * Mathf.Deg2Rad);
y = Mathf.Sqrt(Mathf.Pow(radius, 2f) - Mathf.Pow(x, 2f));
a = new Vector3(transform.position.x - x, transform.position.y, transform.position.z + y);
x = radius * Mathf.Sin((half - i - 1) * Mathf.Deg2Rad);
y = Mathf.Sqrt(Mathf.Pow(radius, 2f) - Mathf.Pow(x, 2f));
b = new Vector3(transform.position.x - x, transform.position.y, transform.position.z + y);
Handles.DrawLine(a, b);
}
for (int i = 0; i < half; i++)
{
x = radius * Mathf.Sin((half - i) * Mathf.Deg2Rad);
y = Mathf.Sqrt(Mathf.Pow(radius, 2f) - Mathf.Pow(x, 2f));
a = new Vector3(transform.position.x + x, transform.position.y, transform.position.z + y);
x = radius * Mathf.Sin((half - i - 1) * Mathf.Deg2Rad);
y = Mathf.Sqrt(Mathf.Pow(radius, 2f) - Mathf.Pow(x, 2f));
b = new Vector3(transform.position.x + x, transform.position.y, transform.position.z + y);
Handles.DrawLine(a, b);
}
}
*/
}