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

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

移動(dòng)游戲?qū)ο?/h1>

我正在嘗試使用剛體創(chuàng)建 MOB AI。我想讓暴徒(GameObject)使用mobrigid.AddForce((((goal - transform.position).normalized)*speed * Time.deltaTime));(目標(biāo)是暴民周圍的一個(gè)隨機(jī)地方)。這就是它變得復(fù)雜的地方,一些暴徒以極快的速度在空中飛行,而另一些則以低速正常移動(dòng)。(是的,我確實(shí)確保目標(biāo)。Y 是在地面上而不是空中)。我嘗試通過(guò)改變阻力來(lái)修復(fù)它,但這會(huì)導(dǎo)致暴徒在空中行走而不會(huì)因重力而下落。我真的很迷茫,不知道如何簡(jiǎn)單地用剛體移動(dòng)游戲?qū)ο蠖粫?huì)出現(xiàn)這種奇怪的行為。怪物日志(目標(biāo) Y 更改為 0): 編輯:暴徒的形象:我的運(yùn)動(dòng)邏輯:   case MOBTYPE.EARTHMOB:            switch (currentstatus)            {                case MOBSTATUS.STANDING:                        if (mobrigid.IsSleeping())                        {                            mobrigid.WakeUp();                        }                           goal = this.transform.position;                            goal.x = Random.Range(goal.x - 150, goal.x + 150);                            goal.z = Random.Range(goal.z -150, goal.z + 150);                    goal.y = 0;                                    currentstatus = MOBSTATUS.WALKING;                 //   Debug.Log("Transform:"+this.transform.position+ "Goal:" + goal+ "goal-transform:" + (goal - transform.position));                    break;                case MOBSTATUS.WALKING:                    if (Random.Range(1, 100) == 5)                    {                        currentstatus = MOBSTATUS.STANDING;                    }                    if (mobrigid.IsSleeping())                    {                        mobrigid.WakeUp();                    }                    mobrigid.AddForce((((goal - transform.position).normalized) * 10000 * Time.deltaTime));                    // transform.LookAt(goal);                    var distance = Vector3.Distance(goal, gameObject.transform.position);                    if (distance <=5)                    {                        currentstatus = MOBSTATUS.STANDING;                    }                    break;            }            break;地形圖:
查看完整描述

1 回答

?
叮當(dāng)貓咪

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

該Rigidbody.AddForce函數(shù)用于沿某個(gè)方向向?qū)ο筇砑恿?。由于您有一個(gè)需要移動(dòng)Rigidbody到的位置,因此您必須使用該Rigidbody.MovePosition功能。您可能還想將剛體標(biāo)記為運(yùn)動(dòng)學(xué)。


將 Rigidbody 對(duì)象移動(dòng)到特定位置的簡(jiǎn)單協(xié)程函數(shù):


IEnumerator MoveRigidbody(Rigidbody rb, Vector3 destination, float speed = 50f)

{

    const float destThreshold = 0.4f;


    while (true)

    {

        Vector3 direction = (destination - rb.position).normalized;

        rb.MovePosition(rb.position + direction * speed * Time.deltaTime);


        float dist = Vector3.Distance(rb.position, destination);


        //Exit function if we are very close to the destination

        if (dist <= destThreshold)

            yield break;


        yield return null;

        //yield return new WaitForFixedUpdate();

    }

}

最好從另一個(gè) coorutine 函數(shù)調(diào)用它,以便您可以讓步或等待它完成,然后執(zhí)行其他任務(wù),例如再次生成隨機(jī)位置并將剛體移動(dòng)到那里。


您想生成新位置然后將其移動(dòng)到Rigidbody那里,這是如何調(diào)用上述函數(shù)的示例:


IEnumerator StartMoveMent()

{

    Rigidbody targetRb = GetComponent<Rigidbody>();


    while (true)

    {

        //Generate random position

        Vector3 destination = new Vector3();

        destination.y = 0;

        destination.x = UnityEngine.Random.Range(0, 50);

        destination.z = UnityEngine.Random.Range(0, 50);


        //Move and wait until the movement is done

        yield return StartCoroutine(MoveRigidbody(targetRb, destination, 30f));

    }

}

并啟動(dòng)該StartMoveMent功能:


void Start()

{

    StartCoroutine(StartMoveMent());

}

雖然我上面所說(shuō)的應(yīng)該可行,但我建議您使用 Unity 的內(nèi)置尋路系統(tǒng)。這是一個(gè)教程。它簡(jiǎn)化了尋找通往目的地的路徑,NavMesh也可以使用baked during run-time.


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

添加回答

了解更多

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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