第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從下一個(gè)實(shí)例化更改實(shí)例化游戲?qū)ο蟮囊苿?dòng)

從下一個(gè)實(shí)例化更改實(shí)例化游戲?qū)ο蟮囊苿?dòng)

C#
qq_遁去的一_1 2021-10-09 10:09:12
我正在使用 Unity 和 C#。在我的游戲中,敵人被反復(fù)實(shí)例化并以線性路徑向玩家移動(dòng)。我想讓敵人在經(jīng)過特定時(shí)間后以正弦波移動(dòng),以使游戲更加艱難。運(yùn)動(dòng)會(huì)立即發(fā)生變化,但我希望這種變化從新(下一個(gè))敵人的實(shí)例化而不是當(dāng)前存在的敵人的實(shí)例化生效。我能做什么?EnemySpawner 腳本 -private void Start(){    timeelapsed = 0f;    StartCoroutine(SpawnEnemies(delay));}private void Update(){    timeelapsed += Time.deltaTime;}private IEnumerator SpawnEnemies(float delay){    while (true)    {        SpawnNewEnemy();        yield return new WaitForSeconds(delay);    }}private void SpawnNewEnemy(){    if (!enemyclone)    {        enemyclone = Instantiate(enemy, enemySpawner.transform.position + offset, Quaternion.identity);    }}Enemy Movement 腳本:private void Update(){    t = Time.time;    if (EnemySpawner.timeelapsed > 0f && EnemySpawner.timeelapsed <= 20f)    {        enemy.transform.Translate(Vector3.forward * speed * Time.deltaTime);    }    if (EnemySpawner.timeelapsed > 20f && EnemySpawner.timeelapsed <= 40f)    {        enemy.GetComponent<Rigidbody>().velocity = Vector3.forward * 5 + Vector3.left * 3 * Mathf.Sin(10f * t);    }}
查看完整描述

2 回答

?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

有上千種方法可以實(shí)現(xiàn)這一點(diǎn),但我認(rèn)為可能易于實(shí)現(xiàn)和理解的一種方法是設(shè)置 Action,當(dāng)您從 spawner 實(shí)例化一個(gè)新敵人時(shí)會(huì)觸發(fā)它。我很快就為您的 EnemySpawner 和 EnemyMovement 腳本編寫了一些我認(rèn)為可能對(duì)您有所幫助的更改。


首先,EnemySpawner:


public static event Action EnemySpawning;

void SpawnNewEnemy ( )

{

    if ( !enemyclone )

    {

        EnemySpawning?.Invoke ( );

        enemyclone = Instantiate ( enemy, enemySpawner.transform.position + offset, Quaternion.identity );

    }

}

現(xiàn)在,敵人運(yùn)動(dòng):


private bool travelInLinearPath = true;


private void OnEnable ( )

{

    EnemySpawner.EnemySpawning -= OnEnemySpawning;

    EnemySpawner.EnemySpawning += OnEnemySpawning;

    travelInLinearPath = true;

}


public void OnEnemySpawning( )

{

    EnemySpawner.EnemySpawning-= OnEnemySpawning;

    travelInLinearPath = false;

}


private void Update ( )

{

    if ( travelInLinearPath )

        enemy.transform.Translate ( Vector3.forward * speed * Time.deltaTime );

    else

        enemy.GetComponent<Rigidbody> ( ).velocity = Vector3.forward * 5 + Vector3.left * 3 * Mathf.Sin ( 10f * Time.time );

}

每次啟用敵人時(shí),您都要求在下一個(gè)敵人即將產(chǎn)生時(shí)收到通知。發(fā)生這種情況時(shí),您告訴這個(gè)敵人從線性運(yùn)動(dòng)變?yōu)檎疫\(yùn)動(dòng) ( travelInLinearPath)。您還要求在產(chǎn)生新敵人時(shí)不再通知該敵人(除非您重新啟用該敵人)。


我也沒有討論你是否應(yīng)該從敵人對(duì)象池中抓取一個(gè)新的敵人。但希望你這樣做是我在OnEnable(). 您可能希望/需要將該代碼放入其中,Start()這取決于您在游戲后期的敵人實(shí)例化和創(chuàng)建。


查看完整回答
反對(duì) 回復(fù) 2021-10-09
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

現(xiàn)在知道請(qǐng)求是針對(duì)敵人的“波浪”,我們需要向每個(gè)敵人添加波浪定義項(xiàng)目。因此,首先修改EnemyMovement腳本:


public class EnemyMovement : MonoBehaviour

{

    public enum MovementType

    {

        None = 0,

        Linear = 1,

        Sinusoidal = 2

        // etc, etcc

    }


    /// <summary>

    /// Movement affects the movement type of the enemy.

    /// </summary>

    public MovementType Movement { get; set; }


    /// <summary>

    /// This affects the Speed of the Enemy. Used in conunction with Movement to

    /// produce the enenmy's wave movement type.

    /// </summary>

    public float Speed { get; set; }


    private Rigidbody rigidBody;



    private void Awake ( )

    {

        rigidBody = GetComponent<Rigidbody> ( );

    }



    private void Update ( )

    {

        switch ( Movement)

        {

            case MovementType.Linear:

                transform.Translate ( Vector3.forward * Speed * Time.deltaTime );

                break;

            case MovementType.Sinusoidal:

                // You probably want the Speed property to affect this as well...

                rigidBody.velocity = Vector3.forward * 5 + Vector3.left * 3 * Mathf.Sin ( 10f * Time.time );

                break;


           // Any extra movement types you want here...

        }


    }

}

然后是EnemySpawner驅(qū)動(dòng) Enemy 實(shí)例化的腳本:


public class EnemySpawner : MonoBehaviour

{

    public float Delay;

    public float StartSpeed;


    public GameObject enemy;

    public GameObject enemySpawner;

    public Vector3 offset;


    private float timeElapsed;

    private float currentSpeed;

    private EnemyMovement.MovementType currentMovement;



    void Start ( )

    {

        timeElapsed = 0f;

        currentSpeed = StartSpeed;

        StartCoroutine ( SpawnEnemies ( Delay ) );

        currentMovement = EnemyMovement.MovementType.Linear;

    }



    void Update ( )

    {

        timeElapsed += Time.deltaTime;


        // We can determine at what time the Wave parameters change here.

        if ( timeElapsed >= 40.0f )

        {

            currentSpeed += 10.0f; // Add speed, for example.

        }

        else if ( timeElapsed >= 20.0f )

        {

            currentMovement = EnemyMovement.MovementType.Sinusoidal;

        }

    }



    IEnumerator SpawnEnemies ( float delay )

    {

        while ( true )

        {

            var enemyClone = Instantiate ( enemy, enemySpawner.transform.position + offset, Quaternion.identity );

            var movement = enemyClone.GetComponent<EnemyMovement> ( );


            // We now set what the enemy uses as the Wave values.

            movement.Speed = currentSpeed;

            movement.Movement = currentMovement;


            yield return new WaitForSeconds ( delay );

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-10-09
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)