【发布时间】:2022-01-17 10:19:18
【问题描述】:
一段时间以来,我一直在尝试引用 GameObject。这个游戏对象为我的实例化对象提供了一条“路线”。所要做的就是让实例化对象引用 Game 对象。 Transform is where the Gameobject will Go.
如何,在这种特殊情况下,由于“路线”的数量可能是一个变量,引用游戏对象一直很困难,因为它不是单个变量槽,而是更多变量的设置(如果需要)。 As you can see there are multiple Routes, and they contain the positions for the Route, but I will only be using one object currently.
那么有没有办法把元素的个数默认改为1(element0),也许是把它变成一个奇异变量,然后在场景中也引用Routes游戏对象?
下面是我在实例化 preFab 中的代码。我相信 GameObject.Find 会遵循这些思路:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Streaker2Route : MonoBehaviour
{
[SerializeField]
private Transform[] routes;
private int routeToGo;
private float tParam;
private Vector2 objectPosition;
public float speedModifier = 0.3f;
private bool coroutineAllowed;
// Start is called before the first frame update
void Start()
{
routeToGo = 0;
tParam = 0f;
coroutineAllowed = true;
speedModifier = 0.3f;
}
// Update is called once per frame
void Update()
{
if (coroutineAllowed)
{
StartCoroutine(GoByTheRoute(routeToGo));
}
}
private IEnumerator GoByTheRoute(int routeNum)
{
coroutineAllowed = false;
Vector2 p0 = routes[routeNum].GetChild(0).position;
Vector2 p1 = routes[routeNum].GetChild(1).position;
Vector2 p2 = routes[routeNum].GetChild(2).position;
Vector2 p3 = routes[routeNum].GetChild(3).position;
while (tParam < 1)
{
tParam += Time.deltaTime * speedModifier;
objectPosition = Mathf.Pow(1 - tParam, 3) * p0 + 3 * Mathf.Pow(1 - tParam, 2) * tParam * p1 + 3 * (1 - tParam) * Mathf.Pow(tParam, 2) * p2 + Mathf.Pow(tParam, 3) * p3;
transform.position = objectPosition;
yield return new WaitForEndOfFrame();
}
tParam = 0f;
routeToGo += 1;
if (routeToGo > routes.Length - 1)
{
routeToGo = 0;
}
coroutineAllowed = true;
}
}
【问题讨论】:
-
您是在问如何将其从数组转换为单个变换?我不太明白这里的问题是什么。
-
是的,有人帮助我完成了这个学校项目。那太好了,谢谢。
-
是的,有人在这个学校项目上帮助了我——当你让别人为你工作时,你就会陷入困境;如果你不能理解结果,那么你就不能轻易地向下一个你寻求工作帮助的人解释现有工作是如何工作的。始终确保你完全理解你策划的代码,并要求被教导而不是比给出答案;)