首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一复制运动底座

统一复制运动底座
EN

Stack Overflow用户
提问于 2020-04-28 00:01:11
回答 1查看 11关注 0票数 0

请查看GIF以看一个例子,

,我想要红色球复制绿色球的运动,但是需要注意方向的差异。意思是如果绿色球向前移动5个单位,然后向左移动5个单位。绿色球应该向前和左移动,但要根据自己的前进方向。白线表示每个球的前向。

下面是重新创建当前情况的代码,如Gif所示。我想不出怎么解决这个问题。

代码语言:javascript
复制
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);
    }

}

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 01:10:55

这在EditMode中可能不是很好。职位:

  1. 通过MyCopy的前锋
  2. 获得了MyPosition的lastPosition和lastPosition之间的距离,并将其添加到MyCopy的当前位置。

轮调:

在开始时,根据起始点的旋转差,得到rotations

  • Set MyCopy与MyPositions rotation

  • Rotate MyCopy之间的差。

代码:

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61470495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档