天河定制型网站建设,wordpress苏醒主题,wordpress get author link,wordpress主题无法删除建议阅读: 判断敌人在玩家的某一个区域: http://www.cnblogs.com/plateFace/p/4716799.html 我们可以根据玩家和敌人的坐标, 进行叉乘来获取一个向量可以用它来判断敌人的位置, 敌人是否在攻击范围内. 下面我简单实现下对单体敌人是否攻击做判定 这种方式有一种重大的BUG, 假设…建议阅读: 判断敌人在玩家的某一个区域: http://www.cnblogs.com/plateFace/p/4716799.html 我们可以根据玩家和敌人的坐标, 进行叉乘来获取一个向量可以用它来判断敌人的位置, 敌人是否在攻击范围内. 下面我简单实现下对单体敌人是否攻击做判定 这种方式有一种重大的BUG, 假设我把敌人大小增加100倍, 很显然玩家已经在敌人的体内了. 我们是通过坐标来判断敌人是否可以攻击, 跟敌人的体积大小无关系. 所以攻击的距离是跟敌人体积的大小所决定的 代码的实现: using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class Player : MonoBehaviour {public float speed 2;public GameObject enemy;public Dictionarystring,GameObject enemyList new Dictionarystring,GameObject();public TextMesh text1;public TextMesh text2;//判断敌人是否可以攻击public void CanAttack(GameObject obj){Vector3 toOther this.transform.position - obj.gameObject.transform.position;Vector3 chaCheng1 Vector3.Cross(transform.forward, toOther);Vector3 chaCheng2 Vector3.Cross(transform.right, toOther);//调试距离的代码text1.text chaCheng1.ToString ();text2.text chaCheng2.ToString ();//经过调试 前后距离是3 左右距离是2,//当敌人在左上或右上 并且 距离小于攻击距离, 就可以攻击if (chaCheng1.y 0 chaCheng2.y 0) {Debug.Log(位置: 左上);if(Mathf.Abs(chaCheng2.y) 3 Mathf.Abs(chaCheng1.y) 2){//打开头顶可攻击标示obj.gameObject.transform.FindChild (T).gameObject.SetActive(true);}else{obj.gameObject.transform.FindChild (T).gameObject.SetActive(false);}return;}if (chaCheng1.y 0 chaCheng2.y 0){Debug.Log(位置: 右上);if(Mathf.Abs(chaCheng2.y) 3 Mathf.Abs(chaCheng1.y) 2){obj.gameObject.transform.FindChild (T).gameObject.SetActive(true);}else{obj.gameObject.transform.FindChild (T).gameObject.SetActive(false);}return;}obj.gameObject.transform.FindChild (T).gameObject.SetActive(false);if (chaCheng1.y 0 chaCheng2.y 0){Debug.Log(位置: 左下);return;}if (chaCheng1.y 0 chaCheng2.y 0){Debug.Log(位置: 右下);}}
} 判断之后的效果图(人物头顶的红色表示可以攻击) 转载于:https://www.cnblogs.com/plateFace/p/4718144.html