Unity 通过物体上的3个点坐标变化,计算物体变化

这个理论本来应该用矩阵计算,但是不会,所以用了笨方法。

假设上一帧三个点是:point1’ , point2‘ , point3’

       当前帧三个点是:point1 , point2,point3

   物体上个点是:objpoint1 , objpoint2,objpoint3

point1’ , point2‘ , point3’  可以形成一个面

point1 , point2,point3 也可以形成一个面

如果让两个面重合,就可以很好操作了。

point1 当作物体中心点 , 物体移动以这个点为基准

        Vector3 zdir = Vector3.Cross((point2- point1 ), (point3- point1 )).normalized;
        Vector3 zdir1 = Vector3.Cross(objpoint2 - objpoint1 , (objpoint3- objpoint1 )).normalized;

        GameObject parent = new GameObject();
        parent.transform.position =

Unity中,你可以通过编写脚本来控制游戏对象在多个预设位置之间循环移动。这通常涉及到路径寻路、序列化列表或数组以及使用`Coroutine`(协同工作线程)。以下是一个简化的步骤: 1. 首先,在脚本中创建一个存储所有目标位置的列表或数组。 ```csharp public List<Vector3> targetPositions = new List<Vector3>(); ``` 2. 定义一个迭代函数,比如 `MoveBetweenPoints()`, 使用`IEnumerator` 和 `yield return` 来实现协程。 ```csharp private IEnumerator MoveBetweenPoints(float speed) { for (int i = 0; i < targetPositions.Count; i++) { transform.position = targetPositions[i]; // 如果你想让角色在到达每个后暂停一段时间再继续,可以添加等待时间 yield return new WaitForSeconds(moveDuration); } // 循环结束回到第一个 transform.position = targetPositions[0]; // 或者设置为循环模式 } ``` 3. 在Update()函数中启动这个协程,并提供一个速度参数来控制移动速度。 ```csharp void Update() { if (!isMoving) // 假设有一个标记变量isMoving来控制是否开始移动 { isMoving = StartCoroutine(MoveBetweenPoints(transform.speed)); // 用实际速度替换transform.speed } // 添加停止循环的条件,例如按下某个键或达到最后一个后停止 if (Input.GetKeyDown(KeyCode.Space) || CurrentPosition == targetPositions[targetPositions.Count - 1]) { StopCoroutine(isMoving); isMoving = false; } } ``` 4. 记得处理`CurrentPosition`以跟踪当前正在移动到的位置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值