zoukankan      html  css  js  c++  java
  • 人物角色群体攻击判定四(三角区域判断)

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

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

    image 

    image

    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

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    反素数(暴力)
    More Divisors(反素数)
    CodeForces
    Binary Tree(二叉树+思维)
    Friendship of Frog(水题)
    内网jenkins如何配置gitlab自动拉取代码打包
    配置git使用ssh方式克隆gitlab的代码
    centOS7创建python虚拟环境
    CentOS7下安装JDK
    centOS安装python3 以及解决 导入ssl包出错的问题
  • 原文地址:https://www.cnblogs.com/plateFace/p/4719676.html
Copyright © 2011-2022 走看看