亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當其他協程已經在運行時,如何讓協程啟動并繼續工作?

當其他協程已經在運行時,如何讓協程啟動并繼續工作?

C#
隔江千里 2023-09-24 15:50:11
該腳本附著在 3 個立方體上。每個立方體都有另一個標簽。using System.Collections;using System.Collections.Generic;using UnityEngine;public class raytest : MonoBehaviour{    public float duration;    public string tag;    private Vector3 originalpos;    private void Start()    {        originalpos = transform.position;    }    private void Update()    {        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);        RaycastHit hit;        if (Physics.Raycast(ray, out hit, 100))        {            if (hit.transform.tag == tag)            {                 if (transform.position.z != originalpos.z - 1)                   StartCoroutine(moveToX(transform, new Vector3(transform.position.x, transform.position.y, transform.position.z - 1), duration));            }            else            {                 StartCoroutine(moveToX(transform, originalpos, duration));            }        }        else        {             //reset             StartCoroutine(moveToX(transform, originalpos, duration));        }    }    bool isMoving = false;    IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration)    {        //Make sure there is only one instance of this function running        if (isMoving)        {            yield break; ///exit if this is still running        }        isMoving = true;        float counter = 0;        //Get the current position of the object to be moved        Vector3 startPos = fromPosition.position;        while (counter < duration)        {            counter += Time.deltaTime;            fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration);            yield return null;        }        isMoving = false;    }}當鼠標懸停在游戲對象上并發射光線時,該對象開始移動。當光線沒有擊中物體時,物體就會移回到原來的位置。但有時,當我將鼠標快速移動到兩個甚至三個對象上時,下一個對象不會移動,直到第一個對象完成移動。有時,物體同時移動,第一個物體向前移動,而其余物體仍移回原始位置。我不知道為什么有時當擊中另一個物體時,它首先等待另一個物體回到原來的位置,然后才開始移動擊中的物體?并且不要同時將它們一前一后移動。這個想法是,如果我擊中一個物體并開始向前移動,一旦我擊中另一個物體,第一個物體應該開始向后移動,而擊中的物體應該開始平行地向前移動。
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

抱歉,如果我沒有正確理解這個問題,但這就是我收集到的:

如果光線投射擊中物體,則其向單向移動,如果光線投射未擊中物體,則其移回其原始位置。

如果這就是您所需要的——協程不是讓問題變得過于復雜了嗎?例如,您可以將CheckIfRaycast.cs腳本附加到每個盒子上。在該腳本Update()方法中,您可以檢查它是否被光線投射擊中,然后進行所需的移動。

多個協程可能會導致一些奇怪的行為,因此請確保使用StopCoroutine(coroutine name);或停止它們StopAllCoroutines();。

查看完整回答
反對 回復 2023-09-24
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

你應該這樣識別你的協程:


你必須在不同的對象上使用不同的協程


Coroutine c1;

Coroutine c2;


void runCourotines()

{

    c1 = StartCoroutine(MoveToX());

    c2 = StartCoroutine(MoveToX());

}


void StopCoroutines()

{

    StopCoroutine(c1);

}


查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號