Unity 模拟智能

Unity 模拟智能

🎮

寻路向量公式
Vector = target.position - now.position

下载png

将其单位化然后在 Update() 内执行


留意:

Vector3.magnitude 标量

Vector3.normalized 矢量


7

调整了屏幕尺寸计算最终坐标 相机size 是100

如果屏幕尺寸是16:9的话,那么x 的右坐标计算终点是 100 * 16/9 = 177.7777~

Snipaste20221123175332png

8

向量符号

Snipaste20221123180144png


1
2
transform.Translate(goal.transform.position)
//是相当于移动了括号内的坐标的向量 硬加上去的

10 如何走到跟前停下

用if语句,暂存一个值检测距离👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using UnityEngine;

public class Move : MonoBehaviour
{
public GameObject goal;
private Vector3 direction;
private float speed = .01f;


private void Start()
{
direction = goal.transform.position - transform.position;
}

private void FixedUpdate()
{
var distance = Vector3.Distance( transform.position,goal.transform.position);
if (distance > 2) transform.Translate(direction * speed, Space.World);
}
}

11

CIKFJ50A0QCSS699UU9Qpng

终点 - 起点

12

Snipaste20221202165256png

显而易见 Vector3.sqrMagnitude() 的数值更大,节省性能

13


点乘

Snipaste20221202173551png

用途👇

  1. 验证两个向量是否垂直
  2. 两个向量的方向接近度越大越相似

叉乘

FireShot Capture 004  向量点乘与叉乘的概念及几何意义  知乎  zhuanlanzhihucompng

用途👇

  1. 找法向量

Sprite0002png

14 计算角度

Snipaste20221203101231png

以上等同于👇

Vector3.Angle(矢量1,矢量2)

Unity也提供了

1
Vector3.Dot(本体朝向方向, 目标朝向方向);

Mathf.Acos() 是求cos的反函数


【某个向量】.magnitude 可以直接算出来它的模


Mathf.Rad2Deg 将弧度数转换为相应的角度数,

在弧度后面乘上Mathf.Rad2Deg就能转换了(弧度一般是一个数π/X)

15 判断朝向等向量问题

Snipaste20221203115509png

unity提供了

1
Vector3.Cross(本体朝向方向, 目标朝向方向);

叉乘来判断最优转向角,根据敌人的方位,判断我们应该向什么方向是最快的

总结

简单来说,在两个物体的位置关系判断中。

点乘可以判断出目标物体在我的前方还是后方。大于零在前方,小于零在后方。

叉乘可以判断出目标物体在我的左边还是右边。大于零在右方,小于零在左方。


点乘 多用于找角度

叉乘找法向量、还有证明当前是往左转还是往右转、叉乘算还能算线线交点
顺时针为 负
逆时针为 正

cosθ = 点乘/模的积

sinθ = 叉乘/模的积


16&17 修正游戏对象的正脸朝向

其实Unity提供了一个好用的函数 transform.LookAt(target) ;


18 以时间为频率,而不是用GPU、CPU

捕获.PNG

Time.realtimeSinceStartup

这个函数用来统计从游戏一开始计时


一般刚体的运动放置在 FixedUpdate() 里


22

Vector3.forward 是一个定值,它没有任何意义!它仅仅代表Vector3(0,0,1),仅此而已

transform.forward 他是一个用来自动对物体旋转值算出前进方向向量的变量。

1
2
3
4
5
void MyTranslate(Vector3 dir){

  transform.position += this.transform.rotation * dir;

  }

transform.rotation是个四元素,表示一个旋转值,后面dir是一个向量,用一个四元素去乘以一个向量,得到的结果是经过四元素旋转之后的向量,以后关于计算角度与向量之间的关系,都可以用这个方法算出来。


炮弹抛物线轨迹
Unity_PzjKSRGfH7.gif

rb.AddForce() 给刚体一个力,因为是一瞬间的,应该放在 Start() 函数内

👇麦克老师也是这样

msedge_SiGwg43zux.png

作者

发布于

2022-12-08

更新于

2022-12-19

许可协议