Unity向量的点乘用于判断怪物相对于人物的方向

Unity向量的点乘用于判断怪物相对于人物的方向

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Vector3_Class_methods : MonoBehaviour {

// 用于演示Vector3的函数

Vector3 Apoint;

Vector3 Bpoint;

Vector3 Cpoint;

public Transform oneObj, twoObj;

public Transform Hero, Monster;

public Transform PointA, PointB;

void Start()

{

Apoint = new Vector3(0, 0, 4);

Bpoint = new Vector3(0, 3, 0);

Cpoint = new Vector3(1, 1, 1);

Debug.Log("(0,0,1)和(0,1,0)两个向量夹角:"+Vector3.Angle(Apoint, Bpoint));//求向量夹角

Debug.Log("两个箱子两个向量夹角是(相对点是原点):" + Vector3.Angle(oneObj.position, twoObj.position));//求向量夹角

#region

Debug.Log("(0,0,1)和(0,1,0)两个向量点乘结果:" + Vector3.Dot(Apoint, Bpoint));//求向量点乘结果

Debug.Log("两个箱子坐标向量点乘结果(相对点是原点):" + Vector3.Dot(oneObj.position, twoObj.position));//求向量点乘结果

#endregion

}

// Update is called once per frame

void Update() {

//Debug.Log("(0,0,1)和(0,1,0)两个向量点乘结果:" + Vector3.Dot(Apoint, Bpoint));//求向量点乘结果

Debug.Log("两个箱子坐标向量点乘结果(相对点是原点):" + Vector3.Dot(oneObj.position, twoObj.position));//求向量点乘结果

Debug.DrawLine(Vector3.zero, twoObj.position, Color.red);

Debug.DrawLine(Vector3.zero, oneObj.position, Color.blue);

Relativepos(Hero, Monster);//用于判断物体hero和Monster的前后位置

DrawNormalLine(PointA.position, PointB.position);// 求两个向量的 构成面的法向量

Distance(Apoint, Bpoint);

}

private void DrawNormalLine(Vector3 A, Vector3 B)//求两个向量的 构成面的法向量

{

Vector3 NormalLine= Vector3.Cross(A, B);//求两个向量的 构成面的法向量

Vector3 StartPoint = (A + B) / 2;

Debug.Log(""+NormalLine+ NormalLine.normalized);

Debug.DrawLine(StartPoint, NormalLine, Color.green);

Debug.DrawLine(Vector3.zero, A, Color.blue);

Debug.DrawLine(Vector3.zero, B, Color.blue);

}

private void Relativepos(Transform Hero, Transform Monster)//用DOT【点乘】于判断物体hero和Monster的前后位置

{

Vector3 HeroPos = Hero.TransformDirection(Hero.forward);//从局部坐标系转世界坐标系

Vector3 RelaPosVector = Monster.position - Hero.position;

float Dot = Vector3.Dot(HeroPos, RelaPosVector);

Debug.DrawLine(Hero.position, Monster.position, Color.blue);

if (Dot > 0)

{

Debug.Log("怪物在角色英雄前面");

}

if (Dot == 0)

{

Debug.Log("怪物在角色英雄侧面");

}

if (Dot<0)

{

Debug.Log("怪物在角色英雄后面");

}

}

private void Distance(Vector3 A, Vector3 B)

{

Debug.Log("两个向量的距离"+Vector3.Distance(A,B));

}

}

相关推荐
枯萎穿心攻击41 分钟前
从 Unity UGUI 到 Unreal UMG 的交互与高效实践:UI 事件、坐标系适配与性能优化
开发语言·ui·unity·性能优化·ue5·游戏引擎·虚幻引擎
SmalBox16 小时前
【渲染流水线】[逐片元阶段]-[深度测试]以UnityURP为例
unity·渲染
Thomas_YXQ2 天前
Unity3D编辑器扩展-物体批量替换设置材质
游戏·unity·编辑器·游戏引擎·材质
雪下的新火2 天前
Unity-HDRP场景搭建-那山
经验分享·笔记·unity·游戏引擎·场景搭建
郝学胜-神的一滴2 天前
深度解析游戏引擎中的相机:视图矩阵
程序人生·unity·矩阵·游戏引擎·godot·图形渲染·虚幻
谷宇.3 天前
【Unity3D实例-功能-拔枪】角色拔枪(三)IK的使用-紧握武器
游戏·unity·c#·unity3d·游戏开发·游戏编程·steam
SmalBox3 天前
【渲染流水线】[逐片元阶段]-[模版测试]以UnityURP为例
unity·渲染
小蜗 strong3 天前
unity中实现机械臂自主运动
unity·游戏引擎
★YUI★4 天前
学习游戏制作记录(制作系统与物品掉落系统)8.16
学习·游戏·ui·unity·c#
SmalBox4 天前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
unity·渲染