using UnityEngine; using System.Collections; public class SinDemo : MonoBehaviour { public GameObject gameobj1; // Use this for initialization void Start () { //CalueAngel(); } // Update is called once per frame void Update () { CalueForward(); } void CalueAngel() { Vector3 vec1 = transform.position; Vector3 vec2 = gameobj1.transform.position; float y = vec2.z - vec1.z; float x = vec2.x - vec1.x; float tan = y / x; float angel = tan * 180 / Mathf.PI; Debug.LogError("tan" + tan + " angel is " + angel); Debug.DrawLine(vec1, vec2, Color.red); } void CalueForward() { float dis = 5f; float angel = 45; Quaternion qua1 = transform.rotation; Vector3 pos1 = (transform.position + (qua1 * Vector3.forward) * dis); Debug.DrawLine(transform.position, pos1, Color.red); Quaternion qua2 = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y - angel, transform.eulerAngles.z); Quaternion qua3 = Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y + angel, transform.eulerAngles.z); Vector3 pos2 = (transform.position + (qua2 * Vector3.forward) * dis); Vector3 pos3 = (transform.position + (qua3 * Vector3.forward) * dis); Debug.DrawLine(transform.position, pos2, Color.green); Debug.DrawLine(transform.position, pos3, Color.green); Debug.DrawLine(pos1, pos2, Color.red); Debug.DrawLine(pos1, pos3, Color.red); Vector3 point = gameobj1.transform.position; if (IsInTriangle(point, transform.position, pos2, pos1) || IsInTriangle(point, transform.position, pos1, pos3)) { Debug.LogError("is in"); } else { Debug.LogError("is not in " + transform.position); } } bool IsInTriangle(Vector3 point,Vector3 v1, Vector3 v2, Vector3 v3) { Vector2 tPoint = new Vector2(); tPoint.x = point.x; tPoint.y = point.z; Vector2 tv1 = new Vector2(); tv1.x = v1.x; tv1.y = v1.z; Vector2 tv2 = new Vector2(); tv2.x = v2.x; tv2.y = v2.z; Vector2 tv3 = new Vector2(); tv3.x = v3.x; tv3.y = v3.z; float area = GetAreaOfTirangle(tv1, tv2, tv3); //物体对象和已知几点所形成的几个三角形 float subArea = GetAreaOfTirangle(tv1, tv2, tPoint) + GetAreaOfTirangle(tv1, tPoint, tv3) + GetAreaOfTirangle(tPoint, tv2, tv3); if (Mathf.Abs(area - subArea) <= 0.01f) { return true; } return false; } /// <summary> /// 求出三角形的面积 三角形面积公式 /// </summary> /// <param name="v1"></param> /// <param name="v2"></param> /// <param name="v3"></param> /// <returns></returns> float GetAreaOfTirangle(Vector2 v1,Vector2 v2,Vector2 v3) { //设A(x1,y1),B(x2,y2),C(x3,y3) //S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2) float area = (v1.x * v2.y + v2.x * v3.y + v3.x * v1.y) - (v1.x * v3.y + v2.x * v1.y + v3.x * v2.y); area = Mathf.Abs(area / 2); return area; } }