人物角色群体攻击判定四(三角区域判断)

我们在游戏一些逃生游戏中很可能让主角不能在怪物前方的三角区域内, 如果存在里面玩家就会被发现.  这种判断的该如何实现呢?

请看下图:  (此图是主角探索怪物)

 

using UnityEngine;
using System.Collections;
using UnityEditor;
using System;

public class Test : MonoBehaviour {

    public Transform a;
    public Transform b;
    public Transform c;
    public Transform d;
    public TextMesh 正角;
    public TextMesh 补角;
    public TextMesh distanceText;
    public TextMesh angelText;
    public TextMesh isInEayText;
    public TextMesh dcDistanceText;
    public float distance;
    public float angle;

    // Update is called once per frame
    void Update () {

        Vector3 ac = a.position - c.position;
        Vector3 bc = b.position - c.position;
        Vector3 cb = c.position - b.position;

        //计算cd的距离
        float dcDistance = Mathf.Abs(Vector3.Distance(d.position, c.position));
        dcDistanceText.text = "DC的距离: " + dcDistance;

        /*
         * cos<A,B>=(ac+bd)/(根号a*a+b*b)(根号c*c+d*d)
         * 两向量夹角余弦等于向量数量积除以两向量模的乘积
         */
        double hudu = Math.Acos(
                             (ac.x * bc.x
                            + ac.y * bc.y)
                            / (Mathf.Sqrt(ac.x * ac.x + ac.y * ac.y)
                            * Mathf.Sqrt(bc.x * bc.x + bc.y * bc.y)));
        //弧度转换角度
        double jiajiao = hudu / Math.PI * 180;

        正角.text = jiajiao + "度";
        补角.text = (180 - jiajiao) + "度";

        distanceText.text = "玩家看得到的距离: " + distance;
        angelText.text = "玩家看得到的角度: " + angle;

        //判断敌人是否在视线当中
        if (jiajiao >= 0 && jiajiao <= angle && dcDistance <= distance)
        {
            isInEayText.text = "敌人是否在玩家视线内: true";
        }
        else
        {
            isInEayText.text = "敌人是否在玩家视线内: false";
        }
    }

    //绘制线段
    public void OnDrawGizmos()
    {
        Gizmos.DrawLine(a.position, b.position);
        Gizmos.DrawLine(a.position, c.position);
        Gizmos.DrawLine(b.position, c.position);
        Gizmos.DrawLine(b.position, d.position);
        Gizmos.DrawLine(a.position, d.position);

    }

}

 

项目下载地址:  http://yunpan.cn/cdPpwnbrja5xA  访问密码 4146

时间: 2024-10-17 01:48:40

人物角色群体攻击判定四(三角区域判断)的相关文章

Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应

版权声明:本文为博主原创文章,未经博主允许不得转载.  Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应  上一篇讲过了主体界面的绘制,这里讲解调色板应用中的另外一个核心: 颜色选择及生成. ColorPcikerView中不同部分的选择和ColorPickerPanelView中颜色显示是怎样响应的呢?这里当然少不了回调函数: ColorPickerView: [java] view plain copy public interface OnColorCh

java-第四章-switch 判断分数奖励物品

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. java-第四章-switch 判断分数奖励物品,布布扣,bubuko.com

shell编程(四)--- 条件判断之if判断

单分支if语句 if 判断条件;then     statement1     statement2 fi 双分支if语句 if 判断条件;then     statement1     statement2     -- else     statement3     statement4     -- fi 多分支if语句 if 判断条件1;then     statement1     statement2     -- elif 判断条件2;then     statement3    

mongoVUE的增删改查操作使用说明;一、查询;1、精确查询;1)右键点击集合名,再左键点击Find;或者直接点击工具栏上的Find;2)查询界面,包括四个区域;{Find}区,查询条件格式{&quot;se

mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{"sendId":"000101"}表示查询sendId=000101的记录, (注:mongodb区分大小写,写成{"sendid":"000101"}会查询不到) 查询条件包含and时,格式为:{"sendId&quo

hdu 4975 最大流及其唯一性判定(有向图环判断算法升级)

就当时最大流再次复习吧..动手敲一下...经典解法不想说了..这题主要是坑时间,10个提交7个tle. 环的判断,曾经用简单dfs方法,这次的就tle了!别人说要用很屌的dinic,我感觉自己dinic不可能超时,坚信是判断环慢了,于是学习了新断环的方法:删除点/边!从某点进去,若该点的所有边都遍历过还是无功而返,那么该店以后不用再进入了(这么简单的道感觉自己应该要想到啊!愚蠢啊!)开始时用只删除边,还是tle!nb!于是自己删点又删边,一下到156ms,前5了! #include<cstdio

软件测试技术(四)——闰年判断器+ int.Parse错误如何解决

目标程序 本次所测试的目标程序是一个闰年判断器,我们知道,一般情况下年份被4整除就可以了,但是如果遇到百年的时候还需要被400整除,于是有了如下的逻辑判断: bool isRunNian = false; if (year > 0) { if ((year % 100 == 0 && year % 400 == 0) || (year % 100 != 0 && year % 4 == 0)) { isRunNian = true; } } 测试方法介绍—Syntax

自适应XAML布局经验总结 (四)区域布局设计模式

本系列对实际项目中的XAML布局场景进行总结,给出了较优化的自适应布局解决方案,希望对大家有所帮助. 下面介绍区域布局设计模式. 7. 头尾模式 页面有时分为顶部栏,中间内容和底部栏三部分.这时可以使用Grid布局,分为3行,设置为Auto,*和Auto,分别放置顶部栏,中间内容和底部栏.顶部栏和底部栏由其中内容决定高度,中间内容充满剩余空间. <Window x:Class="BlendDemo.DP7" xmlns="http://schemas.microsoft

四 python 流程判断

1 if else 流程判断 强制缩进 _usename = "" _password = "" if _usename == username and _password == password: print("welcome user {name} login ...".format(name==username)) else: print ("invalid username or password") 父级代码顶格写,

python笔记四(条件判断/循环/break和continue)

一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> if判断条件还可以简写,比如写: if x: print('True') 只要x是非零数值.非空字符串.非空list等,就判断为True,否则为False. 二 循环 for...in循环 #列表的循环 names = ['Michael', 'Bob', 'Tracy'