主頁 > 軟體設計 > 【游戲開發創新】上班通勤時間太長,做一個任意門,告別地鐵與塞車(Unity | 建模 | ShaderGraph | 搖桿 | 角色控制)

【游戲開發創新】上班通勤時間太長,做一個任意門,告別地鐵與塞車(Unity | 建模 | ShaderGraph | 搖桿 | 角色控制)

2021-09-25 17:59:19 軟體設計

文章目錄

      • 一、前言
      • 二、最終效果
      • 三、Blender建模
        • 1、Blender下載安裝
        • 2、傳送門建模
        • 3、房子建模
        • 4、公司大樓建模
        • 5、文字模型
      • 四、Blender匯出FBX
      • 五、FBX匯入Unity中
      • 六、制作材質
        • 1、傳送門
          • 1.1、ShaderGraph準備
          • 1.2、創建ShaderGraph
          • 1.3、編輯ShaderGraph
          • 1.4、材質球使用ShaderGraph
          • 1.5、模型參考材質球
        • 2、房子材質球
        • 3、公司大樓材質球
      • 七、地面
        • 1、廣州地鐵圖
        • 2、地面(Plane)
      • 八、主角
        • 1、主角資源
        • 2、雙搖桿制作
        • 3、主角移動控制
          • 3.1、影片控制
          • 3.2、移動控制
          • 3.3、主角腳本代碼
          • 3.4、主角移動測驗
        • 4、攝像機跟隨
        • 5、攝像頭角度控制
      • 九、導航烘焙
      • 十、傳送門觸發器
      • 十一、特效
      • 十二、最終效果
      • 十三、工程原始碼
      • 十四、完畢

一、前言

嗨,大家好,我是新發,
現在每天上班的通勤時間是一個多小時,加上下班的通勤時間,每天在路上就是兩個半小時,在廣州早高峰坐地鐵簡直要命,這里我不得不吐槽一下廣州21號線,人流量超多,發車頻率還低,導致每趟都堆積特別多人,每次都要等至少兩三趟才能擠上,而且都好暴力,太瘋狂了,這樣真的容易出事,每次出地鐵心里都在重復一句話:下次不搭21號線了!
還好有熱心同事經常開車搭我上下班,老麻煩別人也很不好意思,不過,搭了幾次車又感覺臉皮厚了-_-

要是有一個任意門可以連接家門口和公司門口就好了,現實中沒有,那就在虛擬世界里做一個吧~

二、最終效果

我做的Demo最終效果如下,
家門口:
請添加圖片描述
從家門口穿過傳送門:
請添加圖片描述
從公司經過傳送門回家:
請添加圖片描述
下面,我就來講講我的制作程序吧~

三、Blender建模

看過我前面兩篇文章的同學應該知道,我最近自學了Blender建模,感興趣的同學可以看下我之前兩篇文章,
【游戲開發創新】當我學了Blender 建模,自制3D電腦桌面,回收站爆發了,把我做的模型都吐了出來(Blender | Unity | FBX),
【游戲開發創新】自學Blender建模,自制孔明燈,在Unity中點亮整個星空,愿新年,勝舊年(Unity | 建模 | 粒子系統 | 預設)

1、Blender下載安裝

Blender官網:https://www.blender.org/
Blender中國社區:https://www.blendercn.org/
Blender中文手冊:https://docs.blender.org/manual/zh-hans/2.79/about/introduction.html

我使用的Blender版本是2.93.4
在這里插入圖片描述

注:關于Blender的教程網上蠻多的,這里我就不過多講了,掌味訓本操作和快捷鍵,很快就可以上手建模啦~

2、傳送門建模

傳送門最終模型如下:
請添加圖片描述

3、房子建模

房子最終模型如下:
請添加圖片描述

4、公司大樓建模

公司大樓最終模型如下:
請添加圖片描述

5、文字模型

再做一些文字模型,
請添加圖片描述

四、Blender匯出FBX

Blender中點擊選單File / Export / FBX,將模型匯出成FBX格式,
在這里插入圖片描述
如下:
在這里插入圖片描述

五、FBX匯入Unity中

FBX檔案匯入到Unity工程中,
在這里插入圖片描述
把模型放入場景中,現在都是默認的材質,所以都是灰白色的,不著急,下面我們就來做材質~
在這里插入圖片描述

六、制作材質

1、傳送門

材質球使用的shader我打算使用ShaderGraph來制作,我之前寫過一篇ShaderGraph的文章:《ShaderGraph使用教程與各種特效案例:Unity2020》,推薦先看下這篇文章,

1.1、ShaderGraph準備

安裝Universal RP插件,
在這里插入圖片描述
Project視圖中右鍵滑鼠,點擊選單Create / Rendering / Universal Render Pipeline / Pipeline Asset (Forward Renderer)
在這里插入圖片描述
創建UniversalRenderPipelineAsset,如下
在這里插入圖片描述
點擊選單Edit / Project Settings...,打開Project Settings視窗,選擇Graphics分頁,把UniversalRenderPipelineAsset拖到Scriptable Render Pipeline Settings中,
在這里插入圖片描述

1.2、創建ShaderGraph

Project視圖中右鍵滑鼠,點擊選單Create / Shader / Universal Render Pipeline / Lit Shader Graph,創建一個PBRShaderGraph
在這里插入圖片描述
重命名為PortalCenter,作為傳送門中心的shader
在這里插入圖片描述

1.3、編輯ShaderGraph

雙擊PortalCenter打開編輯器,編輯節點如下,核心就是對泰森多邊形(Voronio)進行UV旋渦旋轉(Twirl),
在這里插入圖片描述

1.4、材質球使用ShaderGraph

創建一個材質球Material, 重命名為PortalCenter
在這里插入圖片描述
設定材質球的shader為剛剛的ShaderGraph檔案,
在這里插入圖片描述

1.5、模型參考材質球

將材質球賦值給傳送門模型,
在這里插入圖片描述
效果如下,
請添加圖片描述

2、房子材質球

同理,制作房子的材質,
在這里插入圖片描述
效果如下,
在這里插入圖片描述

3、公司大樓材質球

制作房子的材質,
在這里插入圖片描述

效果如下,
在這里插入圖片描述

七、地面

1、廣州地鐵圖

找一張廣州最新的地鐵地圖,我找到的是下面這張,
請添加圖片描述

2、地面(Plane)

在場景中創建一個Plane平面,制作材質并參考這張圖片,
在這里插入圖片描述
在這里插入圖片描述
效果如下:
請添加圖片描述

八、主角

1、主角資源

主角我在AssetStore上找到了一個心儀的模型,推薦給大家,
AssetStore地址:https://assetstore.unity.com/packages/3d/characters/humanoids/sci-fi/stylized-astronaut-114298

將模型下載匯入Unity中,
請添加圖片描述

2、雙搖桿制作

主角的移動和攝像頭的角度旋轉我想通過搖桿來控制,我們做一個雙搖桿功能,
Canvas節點上右鍵點擊選單UI / Panel,創建一個Panel
在這里插入圖片描述
Image組件禁用掉,因為我們不需要Panel顯示出來,
在這里插入圖片描述
Panel下創建一個Image,重命名為leftJointedArm,作為左搖桿的父節點,
在這里插入圖片描述
設定它的錨點為bottom - left,即螢屏左下角,調整坐標和寬高,
在這里插入圖片描述
像這樣子,
在這里插入圖片描述
把它的Coloralpha調為0,因為我們只需要利用它的區域來檢測觸碰,我們不需要肉眼看見它,
在這里插入圖片描述
接著在它的子節點下創建兩個Image,分別命名為bgcenter
在這里插入圖片描述
它們的Source Image都設定為搖桿的圖片資源,
在這里插入圖片描述
分別調整下bgcenter的大小和顏色透明度,效果如下:
在這里插入圖片描述
同理再做一個右搖桿,
在這里插入圖片描述
效果如下:
在這里插入圖片描述
接下來需要給搖桿加上邏輯,UnityUGUI提供了ScrollRect組件,非常適合用來制作搖桿,我們繼承ScrollRect然后實作OnDragOnEndDrag方法,可以很方便地獲取到搖桿的遙控資料,另外,為了檢測區域點擊,我們再實作IPointerDownHandler介面,

創建搖桿腳本JointedArm.cs,代碼如下:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System;

/// <summary>
/// 搖桿
/// </summary>
public class JointedArm : ScrollRect, IPointerDownHandler
{
    public Action<Vector2> onDragCb;
    public Action onStopCb;

    protected float radius = 0f;
    
    private Transform trans;
    private RectTransform bgTrans;
    private Camera uiCam;
    private Vector3 originalPos;

    protected override void Awake()
    {
        base.Awake();
        trans = transform;
        bgTrans = trans.Find("bg") as RectTransform;
        uiCam = GameObject.Find("UICamera").GetComponent<Camera>();
        originalPos = trans.localPosition;
    }

    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            //松手時,搖桿復位
            trans.localPosition = originalPos;
            this.content.localPosition = Vector3.zero;
        }
    }

    protected override void Start()
    {
        base.Start();
        //計算搖桿塊的半徑
        radius = bgTrans.sizeDelta.x * 0.5f;
    }

    public override void OnDrag(PointerEventData eventData)
    {
        base.OnDrag(eventData);
        var contentPostion = this.content.anchoredPosition;
        if (contentPostion.magnitude > radius)
        {
            contentPostion = contentPostion.normalized * radius;
            SetContentAnchoredPosition(contentPostion);
        }
        // Debug.Log("搖桿滑動,方向:" + contentPostion);

        if(null != onDragCb)
            onDragCb(contentPostion);
    }

    public override void OnEndDrag(PointerEventData eventData)
    {
        base.OnEndDrag(eventData);
        // Debug.Log("搖桿拖動結束");
        if (null != onStopCb)
            onStopCb();
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        //點擊到搖桿的區域,搖桿移動到點擊的位置
        trans.position = uiCam.ScreenToWorldPoint(eventData.position);
        trans.localPosition = new Vector3(trans.localPosition.x, trans.localPosition.y, 0);
    }
}

JointedArm.cs分別掛到leftJointedArmrightJointedArm上,賦值對應的center
在這里插入圖片描述
運行Unity,搖桿測驗效果如下:
請添加圖片描述
接下來我們要實作左搖桿控制主角移動并播放跑的影片,右搖桿控制攝像機角度旋轉,

3、主角移動控制

3.1、影片控制

注:關于Animator組件的詳細使用可以參見我之前寫的這篇文章:《Unity影片狀態機Animator使用》

打開角色的影片控制器檔案CharacterController
在這里插入圖片描述
可以看到,兩個動作,一個idle(站立)一個Run(跑),
在這里插入圖片描述
Parameters(引數)里面有一個AnimationPar引數,這個引數就是用來控制站立與跑著兩個影片的過渡條件的,
在這里插入圖片描述
Idle過渡到Run的條件是AnimationPar等于1

Run過渡到Idle的條件是AnimationPar等于0

這樣,我們就可以在代碼中通過這個引數來控制影片的過渡了,例:

// public Animator anim; 

// 站立 -> 跑
anim.SetInteger("AnimationPar", 1);
// 跑 -> 站立
anim.SetInteger("AnimationPar", 0);
3.2、移動控制

主角的移動控制包括坐標和角度的變化,當搖桿向左滑,主角向左移動,同時主角的朝向也跟著轉向左邊,
移動我們可以設定transfromposition屬性來實作,轉向我們可以設定transfromforward屬性來實作,例:

// Vector3 moveDirection; 搖桿向量
// float speed; 移動速度
// float turnSpeed; 轉向速度

transform.position += moveDirection * speed * Time.deltaTime;
transform.forward = Vector3.Lerp(transform.forward, moveDirection, turnSpeed * Time.deltaTime);
3.3、主角腳本代碼

綜上,我們封裝一個主角腳本Player.cs,代碼如下:

// Player.cs
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.AI;

/// <summary>
/// 主角腳本
/// </summary>
public class Player : MonoBehaviour
{
    // 移動速度
    public float speed = 1f;
    // 轉向速度
    public float turnSpeed = 20f;

    public Animator anim;
    // 跟節點
    public Transform rootTrans;
    // 模型節點
    public Transform modelTrans;
    // 導航Agent
    public NavMeshAgent navAgent;
    
    // 是否在移動
    private bool moving = false;
    // 移動向量
    private Vector3 moveDirection = Vector3.zero;
    // 是否可移動
    private bool canMove = true;

    private void Awake() {
        companyPosParticle.Stop();
        homePosParticle.Stop();
    }

    void Update()
    {
        if (canMove && moving)
        {
            anim.SetInteger("AnimationPar", 1);

            rootTrans.position += moveDirection * speed * Time.deltaTime;
            modelTrans.forward = Vector3.Lerp(modelTrans.forward, moveDirection, turnSpeed * Time.deltaTime);
        }
        else
        {
            anim.SetInteger("AnimationPar", 0);
        }
    }

    public void Move(Vector3 direction)
    {
        moveDirection = direction;
        moving = true;
    }

    public void Stand()
    {
        moving = false;
    }

Player.cs腳本掛到主角物體上,在Inspector面板賦值腳本的成員變數,
在這里插入圖片描述
我們再創建一個GameMgr.cs腳本來調度,

// GameMgr.cs

public Player player;
public JointedArm leftJointedArm;
private Transform playerTrans;
private Transform camTrans;

// ...

// 左搖桿 -------------------------------------------
leftJointedArm.onDragCb = (direction) =>
{
    var realDirect = camTrans.localToWorldMatrix * new Vector3(direction.x, 0, direction.y);
    realDirect.y = 0;
    realDirect = realDirect.normalized;
    player.Move(realDirect);
};
leftJointedArm.onStopCb = () => { player.Stand(); };

創建一個空物體重命名為GameMgr,把GameMgr.cs掛到這個物體上,并在Inspector面板中賦值腳本的成員變數,

3.4、主角移動測驗

運行測驗效果如下:
請添加圖片描述

4、攝像機跟隨

我們創建一個CameraControler.cs腳本,實作攝像機跟隨主角的邏輯,代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 攝像機控制器
/// </summary>
public class CameraControler : MonoBehaviour
{
    // 限制攝像機角度范圍
    private const float Y_ANGLE_MIN = 10f;
    private const float Y_ANGLE_MAX = 50.0f;

    // 攝像機看向的物體
    public Transform lookAt;
    // 攝像機Transform
    public Transform camTransform;
    // 攝像機距離目標物體的距離
    public float distance = 1.2f;
    // 原始距離
    private float originalDistance;
    // 旋轉速度
    public float rotateSpeed = 0.01f;

    public float currentX = 0.0f;
    public float currentY = 20.0f;


    private void Start()
    {
        camTransform = transform;
        originalDistance = distance;
    }
    
    private void Update()
    {
        if (rotating)
        {
            currentX += rotateDelta.x;
            currentY += rotateDelta.y;
            currentY = Mathf.Clamp(currentY, Y_ANGLE_MIN, Y_ANGLE_MAX);
        }
    }

    private void LateUpdate()
    {
        Vector3 dir = new Vector3(0, 0, -distance);
        Quaternion rotation = Quaternion.Euler(currentY, currentX, 0);
        camTransform.position = lookAt.position + rotation * dir;
        camTransform.LookAt(lookAt.position);
    }
}

CameraControler.cs腳本掛到主攝像機上,在Inspector面板賦值腳本的成員變數,運行Unity,可以看到有跟隨效果了,
請添加圖片描述

5、攝像頭角度控制

我們在上面的CameraControler.cs腳本中添加兩個方法,如下:

// CameraControler.cs

private bool rotating;
private Vector2 rotateDelta;
    
public void RotateCam(Vector2 delta)
{
    rotateDelta = delta * rotateSpeed;
    rotating = true;
}

public void StopRotate()
{
    rotating = false;
}

然后在GameMgr.cs中添加右搖桿的調度,

// GameMgr.cs

// 右搖桿 ------------------------------------------
rightJointedArm.onDragCb = (direction) =>
{
    camCtrler.RotateCam(direction);
};
rightJointedArm.onStopCb = () => { camCtrler.StopRotate(); };

運行Unity,可以控制攝像頭角度旋轉了,
請添加圖片描述

九、導航烘焙

如果我們想要實作點擊地圖某個位置,讓主角走到目標點,可以使用Unity的尋路導航功能,另外,這個功能也可以限制主角的移動區域,為了防止主角走到地圖外面,我們使用Navigation對場景進行導航烘焙,
首先選中地面,把地面設定為Static
在這里插入圖片描述
然后點擊選單Window / AI / Navigation
在這里插入圖片描述
點擊Bake分頁,點擊Bake按鈕,
在這里插入圖片描述
看到地面蒙上了一層藍色的網,就說明烘焙成功了,
請添加圖片描述
你可以在場景檔案所在目錄中看到它生成了一個NavMesh檔案,
在這里插入圖片描述
另外,我們需要給主角添加NavMeshAgent組件,并根據主角模型大小設定RadiusHeight
在這里插入圖片描述
如下:
請添加圖片描述
運行Unity,測驗一下移動到地面邊界的效果,
請添加圖片描述

十、傳送門觸發器

傳送門傳送,我使用了觸發器,檢測主角是否通過了傳送門,然后出發傳送邏輯,
給傳送門的前后添加兩個碰撞體,并勾選Is Trigger
在這里插入圖片描述
如下:
請添加圖片描述
分別在兩個沖送門位置添加一個標記傳送目標位置的空物體,
在這里插入圖片描述
在這里插入圖片描述

給主角腳本Player.cs添加傳送的邏輯,

// Player.cs


public Transform homePos;
public Transform companyPos;
private string lastTrigger;

private void OnTriggerEnter(Collider other) 
{
    if("trigger1" == other.name || "trigger3" == other.name)        
    {
        lastTrigger = other.name;
    }
    else
    {
        if("trigger1" == lastTrigger && "trigger2" == other.name)
        {
             // 執行傳送,從公司到家
            rootTrans.position = homePos.position;
        }
        else if("trigger3" == lastTrigger && "trigger4" == other.name)
        {
             // 執行傳送,從家到公司
            rootTrans.position = companyPos.position;
        }
    }
}

這樣,當主角傳過傳送門的時候就會按順序觸發觸發器,最終指向傳送邏輯,

十一、特效

傳送時加多一個特效吧,使用PhotoShop畫一個菱形,如下:
在這里插入圖片描述

再畫個菱形邊框,
在這里插入圖片描述
使用粒子系統制作特效,效果如下:
請添加圖片描述
主要利用的是粒子系統的color over LifttimeSize over Lifetime來達到上面的效果,
在這里插入圖片描述
關于粒子系統的相關教程,可以參見我之前寫的這幾篇文章:
【游戲開發實戰】權游紅袍女在火中看到了什么,我看到了…(Unity | 粒子系統 | 火焰特效 | ParticleSystem | 手把手制作)
【游戲開發實戰】Unity使用ShaderGraph配合粒子系統,制作子彈拖尾特效(Fate/stay night金閃閃的大招效果)
【學Unity的貓】——第十五章:Unity粒子系統ParticleSystem,下雪啦下雪啦
【游戲開發實戰】手把手教你使用Unity制作一個飛機噴射火焰尾氣的粒子效果

十二、最終效果

家門口:
請添加圖片描述
從家門口穿過傳送門:
請添加圖片描述
從公司經過傳送門回家:
請添加圖片描述

十三、工程原始碼

本工程我已上傳到CODE CHINA,感興趣的同學可自行下載學習,
地址:https://codechina.csdn.net/linxinfa/UnityPortalDemo
注:我使用的Unity版本為Unity 2021.1.9f1c1 (64-bit)
在這里插入圖片描述

十四、完畢

好了,就到這里吧,最后希望廣州地鐵21號線高峰期可以提高發車頻率,不然真的很痛苦,
我是林新發:https://blog.csdn.net/linxinfa
原創不易,若轉載請注明出處,感謝大家~
喜歡我的可以點贊、關注、收藏,如果有什么技術上的疑問,歡迎留言或私信,我們下期見~

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302830.html

標籤:其他

上一篇:看完這篇還不懂HashMap的擴容機制,那我要哭了~

下一篇:學透CSS-7個場景讓你深入理解min/max - width/height

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more