实例化时引用对象

Posted

技术标签:

【中文标题】实例化时引用对象【英文标题】:Reference an object when Instantiated 【发布时间】: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;


【问题讨论】:

您是在问如何将其从数组转换为单个变换?我不太明白这里的问题是什么。 是的,有人帮助我完成了这个学校项目。那太好了,谢谢。 是的,有人在这个学校项目上帮助了我——当你让别人为你工作时,你就会陷入困境;如果你不能理解结果,那么你就不能轻易地向下一个你寻求工作帮助的人解释现有工作是如何工作的。始终确保你完全理解你策划的代码,并要求被教导而不是比给出答案;) 【参考方案1】:

改用此代码:

 Vector2 p0 = routes[routeNum].GetChild(0).position;


 objectPosition = Mathf.Pow(1 - tParam, 3) * p0;

所以删除其他的东西,而不是使用 4 个位置,只使用 1。在这种情况下是 p0。

缺点是您必须使用这些更改制作一个全新的脚本,然后事先决定您是要在每条路线上使用 1 个位置(新脚本)还是 4 个(旧脚本)。

如果您希望脚本检测每条路线需要使用多少个位置,那么您需要以不同的方式提出问题,并希望有人有一个脚本或愿意花时间为您编写一个健壮的脚本,这可能需要几个小时,具体取决于您询问的对象。

【讨论】:

以上是关于实例化时引用对象的主要内容,如果未能解决你的问题,请参考以下文章

目标 C(通过引用传递)

当对象在运行时实例化时,如何使 Unity UI 对象可拖动?

为啥 ICollection 索引在实例化时不起作用?

异常抛出:实体数据模型对象实例化时 C# Windows 服务中的“System.IO.FileNotFoundException”

构造器

多态创建的是父类对象还是子类对象