国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity - 無限循環(huán)列表

這篇具有很好參考價(jià)值的文章主要介紹了Unity - 無限循環(huán)列表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

效果和UI結(jié)構(gòu)
效果

unity 無限循環(huán)列表,Unity,C#,unity,游戲引擎
Tips:免費(fèi)的視頻轉(zhuǎn)GIF網(wǎng)站

UI結(jié)構(gòu)

unity 無限循環(huán)列表,Unity,C#,unity,游戲引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-530239.html

  1. 父節(jié)點(diǎn)為一個(gè)Panel
  2. Panel的Vertical Layout Group方便快捷調(diào)整Panel下的Image子物體的位置,使用時(shí)取消組件
  3. Image是列表的子物體,只有一個(gè)Text子物體。
Scroll New代碼
實(shí)現(xiàn)思路
  1. 動(dòng)態(tài)更改所有子節(jié)點(diǎn)的y軸位置實(shí)現(xiàn)上下移動(dòng)
  2. 改變超過位置的首尾子節(jié)點(diǎn)位置,并重新排序子節(jié)點(diǎn)列表
  3. 實(shí)現(xiàn)橫向可以通過修改x軸位置移動(dòng)即可
代碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ScrollNew : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler
{

    bool _isPress;
    Vector2 _curPos;
	
	// item列表
    List<Transform> _items;

    float _height;
    
    // 首尾位置
    float _start_y = 0f;
    float _end_y = 0f;
    
    // 移動(dòng)總距離
    float _moveDis = 0;
    
    // 列表數(shù)據(jù)
    public List<int> _data;
    
    // 間距
    public float _interval = 5f;

    // Start is called before the first frame update
    void Start()
    {
    	// 獲取所有item,重復(fù)GetChild很浪費(fèi)內(nèi)存
        _items = new List<Transform>();
        for (int i = 0; i < transform.childCount; i++)
        {
            _items.Add(transform.GetChild(i));
        }
        
        // 自定義列表數(shù)據(jù)
        _data = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            _data.Add(i);
        }

        _height = _items[0].GetComponent<RectTransform>().sizeDelta.y;
        _start_y = _items[0].GetComponent<RectTransform>().localPosition.y;
        _end_y = _items[_items.Count - 1].GetComponent<RectTransform>().localPosition.y;

        _moveDis = _height * -1f;
	
        initList();
    }

    // Update is called once per frame
    void Update()
    {
        if (_isPress) moveItems();
    }

#if UNITY_EDITOR
    private void OnValidate()
    {
        if (_interval != transform.GetComponent<VerticalLayoutGroup>().spacing) resetInterval();
    }
#endif

    public void OnPointerClick(PointerEventData eventData)
    {
        _isPress = false;
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        _isPress = true;
        _curPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        _isPress = false;
        _curPos = Vector2.zero;
    }

    // 編輯器狀態(tài)下重置item之間的間隔
    void resetInterval()
    {
        transform.GetComponent<VerticalLayoutGroup>().enabled = true;
        transform.GetComponent<VerticalLayoutGroup>().spacing = _interval;
        transform.GetComponent<VerticalLayoutGroup>().enabled = false;
    }

	// 初始化列表數(shù)據(jù)
    void initList()
    {
        for (int i = 0; i < _items.Count; i++)
        {
            _items[i].GetChild(0).GetComponent<Text>().text = _data[i].ToString();
        }
    }

    void moveItems()
    {
        float _y = Input.mousePosition.y - _curPos.y;
        _curPos.y = Input.mousePosition.y;

        for (int i = 0; i < _items.Count; i++)
        {
            _items[i].localPosition = new Vector3(_items[i].localPosition.x, _items[i].localPosition.y + _y, 0);
        }

        // item位置移到最后
        if (_items[0].localPosition.y >= (_start_y + _height))
        {
            _items[0].localPosition = new Vector3(_items[_items.Count - 1].localPosition.x, _items[_items.Count - 1].localPosition.y - _height - _interval, 0);
            Transform item_temp = _items[0];
            _items.RemoveAt(0);
            _items.Add(item_temp);
        }
        // item位置移到最上
        if (_items[_items.Count - 1].localPosition.y <= _end_y)
        {
            _items[_items.Count - 1].localPosition = new Vector3(_items[0].localPosition.x, _items[0].localPosition.y + _height + _interval, 0);
            Transform item_temp = _items[_items.Count - 1];
            _items.RemoveAt(_items.Count - 1);
            _items.Insert(0, item_temp);
        }

        _moveDis += _y;
        refeshScroll();
    }

    int _index_data;
    void refeshScroll()
    {
        if (_moveDis >= (_height + _interval))
        {
        	// 向上移動(dòng)時(shí)
            _moveDis = 0f;
            _index_data++;
            if (_index_data > _data.Count - 1) _index_data = 0;
        }

        if (_moveDis <= (_height + _interval) * -1)
        {
        	// 向下移動(dòng)時(shí)
            _moveDis = 0f;
            _index_data--;
            if (_index_data < 0) _index_data = _data.Count - 1;
        }

        if (_moveDis == 0)
        {
            for (int i = 0; i < _items.Count; i++)
            {
                initItem(_items[i], _index_data + i);
            }
        }
    }

	// 刷新item中的數(shù)據(jù)
    void initItem(Transform item,  int index)
    {
        if (index >= _data.Count) index -= _data.Count;
        if (index < 0) index += _data.Count;
        // Debug.Log("???" + index);
        item.GetChild(0).GetComponent<Text>().text = _data[index].ToString();
    }
}

到了這里,關(guān)于Unity - 無限循環(huán)列表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用團(tuán)結(jié)引擎開發(fā)Unity 3D射擊游戲

    使用團(tuán)結(jié)引擎開發(fā)Unity 3D射擊游戲

    ? ? ? ?本案例是初級案例,意在引導(dǎo)想使用unity的初級開發(fā)者能較快的入門,體驗(yàn)unity開發(fā)的方便性和簡易性能。 ? ? ? 本次我們將使用團(tuán)結(jié)引擎進(jìn)行開發(fā),幫助想體驗(yàn)團(tuán)結(jié)引擎的入門開發(fā)者進(jìn)行較快的環(huán)境熟悉。 ? ? ?本游戲是一個(gè)俯視角度的射擊游戲。主角始終位于屏幕

    2024年01月19日
    瀏覽(110)
  • Unity、UE、Cocos游戲開發(fā)引擎的區(qū)別

    Unity、Unreal Engine(UE)和Cocos引擎是三個(gè)常用的游戲開發(fā)引擎,它們在功能和特性上有一些區(qū)別。以下是它們之間的主要區(qū)別: 編程語言:Unity使用C#作為主要的編程語言,開發(fā)者可以使用C#腳本進(jìn)行游戲邏輯編寫。Unreal Engine主要使用C++作為編程語言,但也支持藍(lán)圖系統(tǒng),允許

    2024年02月22日
    瀏覽(99)
  • Unity vs Godot :哪個(gè)游戲引擎更適合你?

    Unity vs Godot :哪個(gè)游戲引擎更適合你?

    游戲引擎的選擇對開發(fā)過程和最終產(chǎn)品質(zhì)量有著重大影響。近年來,Godot和Unity這兩款引擎受到廣泛關(guān)注。本文將從多個(gè)維度對兩者進(jìn)行比較,以期為開發(fā)者提供正確的選擇建議。 Godot和Unity都有各自的優(yōu)勢,沒有絕對的好壞之分。Godot開源免費(fèi),上手簡單,更適合2D和小型游戲

    2024年01月23日
    瀏覽(106)
  • 30分鐘了解所有引擎組件,132個(gè)Unity 游戲引擎組件速通!【收藏 == 學(xué)會(huì)】

    30分鐘了解所有引擎組件,132個(gè)Unity 游戲引擎組件速通!【收藏 == 學(xué)會(huì)】

    ?? 博客主頁:https://xiaoy.blog.csdn.net ?? 本文由 呆呆敲代碼的小Y 原創(chuàng),首發(fā)于 CSDN ?? ?? 學(xué)習(xí)專欄推薦:Unity系統(tǒng)學(xué)習(xí)專欄 ?? 游戲制作專欄推薦:游戲制作 ??Unity實(shí)戰(zhàn)100例專欄推薦:Unity 實(shí)戰(zhàn)100例 教程 ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正! ?? 未來很長

    2024年02月11日
    瀏覽(130)
  • Unity Physics2D 2d物理引擎游戲 筆記

    Unity Physics2D 2d物理引擎游戲 筆記

    2d 材質(zhì) 里面可以設(shè)置 摩擦力 和 彈力 Simulated:是否在當(dāng)前的物理環(huán)境中模擬,取消勾選該框類似于Disable Rigidbody,但使用這個(gè)參數(shù)更加高效,因?yàn)镈isable會(huì)銷毀內(nèi)部產(chǎn)生的GameObject,而取消勾選Simulated只是禁用。 Kinematic 動(dòng)力學(xué)剛體 動(dòng)力學(xué)剛體不受重力和力的影響,而受用戶的

    2023年04月24日
    瀏覽(93)
  • Unity和UE4兩大游戲引擎,你該如何選擇?

    Unity和UE4兩大游戲引擎,你該如何選擇?

    目錄 游戲引擎 2 —— 難易區(qū)別 編程語言 3 —— 游戲產(chǎn)品 UE4制作的游戲產(chǎn)品? Unity制作的游戲產(chǎn)品? 產(chǎn)品類型 5 —— 資源商店 6 —— 人才需求 平均薪資 總結(jié) ?????Unity和UE4都是游戲引擎,所謂游戲引擎就是集成了復(fù)雜功能的游戲開發(fā)軟件,他們幫我們實(shí)現(xiàn)了復(fù)雜的底層邏

    2023年04月08日
    瀏覽(95)
  • GODOT游戲引擎簡介,包含與unity性能對比測試,以及選型建議

    GODOT游戲引擎簡介,包含與unity性能對比測試,以及選型建議

    GODOT,是一個(gè)免費(fèi)開源的3D引擎。本文以unity作對比,簡述兩者區(qū)別和選型建議。由于是很久以前寫的ppt,技術(shù)原因視頻和部分章節(jié)丟失了。建議當(dāng)做業(yè)務(wù)參考。 GODOT目前為止遇到3個(gè)比較重大的機(jī)遇,第一個(gè)是oprea的合作獎(jiǎng),第二個(gè)是用支持c#換來的微軟的投資,第三個(gè)是虛幻

    2024年02月14日
    瀏覽(232)
  • [游戲開發(fā)][Unity]Assetbundle下載篇(7)獲取運(yùn)行時(shí)(邊玩邊下)下載列表

    [游戲開發(fā)][Unity]Assetbundle下載篇(7)獲取運(yùn)行時(shí)(邊玩邊下)下載列表

    打包與資源加載框架目錄 啥是運(yùn)行時(shí)下載清單?現(xiàn)在大多數(shù)手游都會(huì)有一個(gè)邊玩邊下功能,會(huì)提示用戶是否開啟下載,要XXX流量,如果你下載完了,可能還會(huì)有獎(jiǎng)勵(lì)。 ? 疑問:為何要有邊玩邊下功能? 解答:為了發(fā)包的包體小,并且是越小越好! 我們的游戲想要賺錢,第一

    2024年02月08日
    瀏覽(27)
  • Unity 開發(fā)人員轉(zhuǎn)CGE(castle Game engine)城堡游戲引擎指導(dǎo)手冊

    Unity 開發(fā)人員轉(zhuǎn)CGE(castle Game engine)城堡游戲引擎指導(dǎo)手冊

    一、簡介 2. Unity相當(dāng)于什么GameObject? 3. 如何設(shè)計(jì)一個(gè)由多種資產(chǎn)、生物等組成的關(guān)卡? 4. 在哪里放置特定角色的代碼(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相當(dāng)于什么? 5.Unity子目錄相當(dāng)于什么Assets? 6. 支持哪些模型格式? 7. 支持FBX模型格式嗎? 8.

    2024年02月07日
    瀏覽(26)
  • SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    kele ????在交通,電力,規(guī)劃等行業(yè)中,有的對象常常具有很強(qiáng)的質(zhì)感,比如金屬質(zhì)感的 鋼軌,電力塔;陶瓷材質(zhì)的絕緣子;玻璃材質(zhì)的建筑幕墻等,但常規(guī)方式的表現(xiàn)效果 往往差強(qiáng)人意。 ????游戲引擎(Unity3D)中已有豐富的材質(zhì)資源庫,比如玻璃,金屬等材質(zhì),這

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包