请查看GIF以看一个例子,
,我想要红色球复制绿色球的运动,但是需要注意方向的差异。意思是如果绿色球向前移动5个单位,然后向左移动5个单位。绿色球应该向前和左移动,但要根据自己的前进方向。白线表示每个球的前向。
下面是重新创建当前情况的代码,如Gif所示。我想不出怎么解决这个问题。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class CalculateMovement : MonoBehaviour
{
[SerializeField] Transform MyOrigin;
[SerializeField] Transform MyPosition;
[SerializeField] Transform CopyCat;
[SerializeField] Transform CopyCatOrigin;
[SerializeField] float Distance;
[SerializeField] Vector3 rawDirection;
private void Update()
{
rawDirection = (MyPosition.position - MyOrigin.position).normalized;
Distance = Vector3.Distance(MyOrigin.position, MyPosition.position);
if (CopyCat)
{
CopyCat.position = rawDirection * Distance + CopyCatOrigin.position;
}
}
private void OnDrawGizmos()
{
Gizmos.DrawLine(transform.position, transform.position + transform.forward);
Gizmos.DrawLine(CopyCat.position, CopyCat.position + CopyCat.forward);
}
}

发布于 2020-04-28 01:10:55
这在EditMode中可能不是很好。职位:
轮调:
在开始时,根据起始点的旋转差,得到rotations
代码:
public class question_61470495_unity_copy_movement : MonoBehaviour
{
[SerializeField] Transform MyOrigin;
[SerializeField] Transform MyPosition;
[SerializeField] Vector3 MyPositionLastPos;
[SerializeField] Transform CopyCat;
[SerializeField] Transform CopyCatOrigin;
[SerializeField] float Distance;
[SerializeField] Vector3 rawDirection;
[SerializeField] float diffRot;
private void Start()
{
diffRot = Vector3.Angle(MyPosition.forward, CopyCat.forward);
Debug.Log(diffRot);
MyPositionLastPos = MyPosition.position;
}
private void Update()
{
CopyCat.position += CopyCat.forward * Vector3.Distance(MyPositionLastPos, MyPosition.position);
CopyCat.rotation = MyPosition.rotation;
CopyCat.Rotate(Vector3.up, diffRot);
MyPositionLastPos = MyPosition.position;
}
}https://stackoverflow.com/questions/61470495
复制相似问题