【发布时间】:2019-06-25 08:55:32
【问题描述】:
关于此处提出的问题 (How to place spheres in a half circle shape between 2 points),它在 A 和 B 两点之间生成球体。 如何在一个循环周期中只创建一个从 A 点移动到 B 点,然后从 B 点回到 A 点的球体?在这种情况下如何使用 Lerp?
我尝试让球体按照以下代码中描述的角度(半圆)移动,但它始终沿直线移动。
以下代码在两点之间生成球体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetCurves : MonoBehaviour
{
public GameObject A;
public GameObject B;
public int amount;
[ContextMenu("PlaceSpheres()")]
public void Start()
{
PlaceSpheres(A.transform.position, B.transform.position, amount);
}
public void PlaceSpheres(Vector3 posA, Vector3 posB, int numberOfObjects)
{
// get circle center and radius
var radius = Vector3.Distance(posA, posB) / 2f;
var centerPos = (posA + posB) / 2f;
// get a rotation that looks in the direction
// posA -> posB
var centerDirection = Quaternion.LookRotation((posB - posA).normalized);
for (var i = 0; i < numberOfObjects; i++)
{
var angle = Mathf.PI * (i+1) / (numberOfObjects + 1); //180 degrees
var x = Mathf.Sin(angle) * radius;
var z = Mathf.Cos(angle) * radius;
var pos = new Vector3(x, 0, z);
// Rotate the pos vector according to the centerDirection
pos = centerDirection * pos;
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = centerPos + pos;
sphere.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
}
}
}
我创建的以下脚本使对象在循环中的两点之间移动,但只能沿直线移动。如何让它在曲线中移动(180 度)?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RunInLoop : MonoBehaviour
{
public float speed = 0.25f;
public Transform PointA;
public Transform PointB;
private Vector3 origin;
private bool backToOrigin;
void Start()
{
transform.position = PointA.transform.position;
origin = transform.position;
}
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, backToOrigin ? origin : PointB.transform.position, speed * Time.deltaTime);
// if one of the two positions is reached invert the flag
if (transform.position == PointB.transform.position || transform.position == origin)
{
backToOrigin = !backToOrigin;
}
}
}
【问题讨论】:
-
您的代码只运行一次并将项目放置在一个球体中。它没有任何动作。这是某种形式的学校作业吗?本周似乎有很多关于放置东西和移动它们的问题
-
是的,这段代码只是在两点之间放置了多个球体。我尝试只放置一个球体在两点之间移动,但它不遵循我正在创建的路径。不,绝对不是学校作业,我正在尝试在 Unity 上做新的事情,这就是我坚持的地方。
-
您需要展示您是如何尝试移动它的。问题真的不是统一,而是如何沿着路径前进的逻辑
-
我已使用新脚本更新了帖子,该脚本使对象从 A 点移动到 B 点并循环返回。 (直线)
-
更正它会直线移动,因为这就是你告诉它要做的事情。您需要找到弧上的点并移动到该点,而不仅仅是在 a->b 之间