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

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

實(shí)現(xiàn) UI 元素后玩家隨機(jī)改變位置

實(shí)現(xiàn) UI 元素后玩家隨機(jī)改變位置

C#
鳳凰求蠱 2023-12-17 10:42:19
所以我一直在關(guān)注在Unity中制作2D游戲的教程(我是一個(gè)完全的新手,這是我第一次接觸編程),我想給游戲添加一個(gè)功能(粗體)。 “心臟系統(tǒng)”我添加的工作正常(空心的數(shù)量等于玩家受到的傷害),但它導(dǎo)致我的玩家以一種奇怪的方式改變了他的位置。您可以看到,設(shè)置了邊界(maxHeight = 3,2,minHeight = -3,2),以及他的運(yùn)動(dòng)值(Yincrement = 3.2),但是,在按向上或向下箭頭鍵后,他似乎發(fā)生了變化Y 位置大約 4.67。 這是播放器腳本:using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;public class Player : MonoBehaviour{    private Vector2 targetPos;    public float Yincrement;    public float speed;    public float maxHeight;    public float minHeigth;    public int health = 3;    public int numOfHearts;    public Image[] hearts;    public Sprite heartFull;    public Sprite heartEmpty;    public GameObject effect;    public Image healthDisplay;    private void Update()    {        for (int i = 0; i < hearts.Length; i++)        {            if (i < health)            {                hearts[i].sprite = heartFull;            }            else            {                hearts[i].sprite = heartEmpty;                if (i < numOfHearts)                {                    hearts[i].enabled = true;                }                else                {                    hearts[i].enabled = false;                }            }            if (health <= 0)            {                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);            }        }    }}
查看完整描述

1 回答

?
森林海

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

主要問題

主要問題是您的for 循環(huán)。它只能用于更新 UI - 不能多次調(diào)用您的移動(dòng)和場(chǎng)景重新加載!您應(yīng)該提前關(guān)閉for循環(huán)。


for (int i = 0; i < hearts.Length; i++)

{

? ? // you can also reduce these to single lines

? ? hearts[i].enabled = i < numOfHearts;


? ? if(i < numOfHearts) hearts[i].sprite = i < health ? heartFull : heartEmpty;? ??

} // <-- ALREADY CLOSE IT HERE


if(health <= 0) ...


...

位置夾緊

你對(duì)位置的夾緊極不安全!想象一下當(dāng)前位置是?3.1?仍然是?< maxHeight,因此您添加?Yincrement?一次,結(jié)果是最大可能高度 < /span>6.3!這不是你想要的。

您應(yīng)該直接鉗位targetPosition,而不是鉗位當(dāng)前transform.position。例如,您可以使用?Mathf.Clamp?確保?targetPos.y?始終保持在給定范圍內(nèi)。

此外,由于這兩種情況都執(zhí)行非常相似的操作,因此我會(huì)使用簡單的?int?變量來設(shè)置方向,將其減少為僅一次移動(dòng):

...


transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);


var move = 0;

var targetPosY = targePos.y;


if (Input.GetKeyDown(KeyCode.UpArrow) && targetPosY < maxHeight)

{

? ? move = 1;

}

else if (Input.GetKeyDown(KeyCode.DownArrow) && targetPosY > minHeigth)

{

? ? move = -1;

}


// Handle the movement according to the direction

// in one single code block for both directions

if(move != 0)

{

? ? Instantiate(effect, transform.position, Quaternion.identity);


? ? // increase/decrease the targetPosY according to the move direction

? ? targetPosY += move * Yincrement;

? ? // Now make sure it is within the range

? ? targetPosY = Mathf.Clamp(targetPosY, minHeight, maxHeight);


? ? // finally assign the new target position

? ? targetPos = new Vector2(transform.position.x, targetPosY);

}


查看完整回答
反對(duì) 回復(fù) 2023-12-17
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽

添加回答

舉報(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)