1.1游戏对象运动的本质是什么

游戏对象运动的本质是游戏对象随着动画帧的变化而产生的游戏对象的坐标以及角度的变化。通过平移、旋转、缩放的方式改变游戏对象的transform属性。

1.2抛物线运动

(1)修改transform

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move1 : MonoBehaviour
{public float speed = 1;void Start(){}void Update(){transform.position += Vector3.left * 1/10;//水平匀速以速度1前进,放慢十倍transform.position += Vector3.down * speed * Time.deltaTime/10;//竖直方向以加速度运动,放慢十倍speed += 10 * Time.deltaTime;//速度随重力改变}
}

(2)向量Vector3,直接position加上变化向量

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move2 : MonoBehaviour
{public float speed = 1;void Start(){}void Update(){transform.position += new Vector3(Time.deltaTime * 1,-Time.deltaTime * speed/2,0);//慢放2倍速度speed += Time.deltaTime * 10;//g=10}
}

(3)translate一个向量Vector3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move3 : MonoBehaviour
{   void Start(){      }void Update(){       this.transform.Translate(new Vector3(Time.deltaTime * 1, - 10 / 2 * Time.deltaTime * Time.deltaTime, 0));}
}

1.3太阳系

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Random = System.Random;public class sun : MonoBehaviour
{// Use this for initializationprivate float x0;void Start(){x0= this.transform.position.x;}// Update is called once per framevoid Update(){this.transform.RotateAround(Vector3.zero, new Vector3(0, x0/10, 2-x0/8), 20 * Time.deltaTime*x0/5);this.transform.Rotate(Vector3.up * Time.deltaTime * 10000 * x0 / 5);}}

运行结果:

2、编程实践

  • 游戏中的对象有:Priests,Devils,boat,one side,the other side
  • 玩家动作 条件
    开船 船在开始岸、船在结束岸、船上有人
    开始岸牧师上船 船在开始岸,船有空位,开始岸有牧师
    开始岸魔鬼上船 船在开始岸,船有空位,开始岸有魔鬼
    结束岸牧师上船 船在结束岸,船有空位,结束岸有牧师
    结束岸魔鬼上船 船在结束岸,船有空位,结束岸有魔鬼
  • MVC架构:在Asserts目录下分别创建Model,Control,View文件夹
  • 将游戏中对象做成预制
  • 整个游戏仅 主摄像机 和 一个 Empty 对象, 其他对象由代码动态生成:
  • ControlGameObjects.cs
  • using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;public class ControlGameObjects : MonoBehaviour
    {// Start is called before the first frame updatepublic GameObject river;public GameObject boat;public GameObject leftDust;public GameObject rightDust;public GameObject priestOne;public GameObject priestTwo;public GameObject priestThree;public GameObject demonOne;public GameObject demonTwo;public GameObject demonThree;public int CountPeoPleOnBoat;public bool peopleOnBoatLeft;public bool peopleOnBoatRight;public int leftCoastDemonNum;public int leftCoastPriestNum;public int rightCoastDemonNum;public int rightCoastPriestNum;public bool pause;public bool haveEndedGame;void Start(){river = (GameObject)Resources.Load("Prefabs/River");river = Instantiate(river);boat = (GameObject)Resources.Load("Prefabs/Boat");boat = Instantiate(boat);leftDust = (GameObject)Resources.Load("Prefabs/DustLeft");leftDust = Instantiate(leftDust);rightDust = (GameObject)Resources.Load("Prefabs/DustRight");rightDust = Instantiate(rightDust);priestOne = (GameObject)Resources.Load("Prefabs/priestOne");priestOne = Instantiate(priestOne);priestTwo = (GameObject)Resources.Load("Prefabs/priestTwo");priestTwo = Instantiate(priestTwo);priestThree = (GameObject)Resources.Load("Prefabs/priestThree");priestThree = Instantiate(priestThree);demonOne = (GameObject)Resources.Load("Prefabs/DemonOne");demonOne = Instantiate(demonOne);demonTwo = (GameObject)Resources.Load("Prefabs/DemonTwo");demonTwo = Instantiate(demonTwo);demonThree = (GameObject)Resources.Load("Prefabs/DemonThree");demonThree = Instantiate(demonThree);BeginGame();}void BeginGame(){haveEndedGame = false;peopleOnBoatRight = false;peopleOnBoatLeft = false;leftCoastDemonNum = 0;leftCoastPriestNum = 0;rightCoastDemonNum = 3;rightCoastPriestNum = 3;pause = false;CountPeoPleOnBoat = 0;// 初始化所有对象}// Update is called once per framevoid Update(){// 如果检测if (haveEndedGame && !river.GetComponent<View>().gameEndOrNot){haveEndedGame = false;BeginGame();ReStartGame();}if (!haveEndedGame){allPeopleClick();  //处理所有人物点击函数boatClick();       //处理船的点击函数Checked();}//检查游戏成功或者失败情况}public void boatClick(){// 当所有人物运动都是静止的时候才可以开船;if ((boat.GetComponent<EventClick>().click && CountPeoPleOnBoat <= 0)) boat.GetComponent<EventClick>().click = false;if (boat.GetComponent<EventClick>().click && CountPeoPleOnBoat > 0 && allPeopleStanding()){if (priestOne.GetComponent<EventClickPeoPle>().onBoat){priestOne.GetComponent<EventClickPeoPle>().AcrossRiver();CountPriestsNumOnEachCoast();}if (demonOne.GetComponent<EventClickPeoPle>().onBoat){demonOne.GetComponent<EventClickPeoPle>().AcrossRiver();CountDemonsNumOnEachCoast();}if (priestTwo.GetComponent<EventClickPeoPle>().onBoat){priestTwo.GetComponent<EventClickPeoPle>().AcrossRiver();CountPriestsNumOnEachCoast();}if (demonTwo.GetComponent<EventClickPeoPle>().onBoat){demonTwo.GetComponent<EventClickPeoPle>().AcrossRiver();CountDemonsNumOnEachCoast();}if (priestThree.GetComponent<EventClickPeoPle>().onBoat){priestThree.GetComponent<EventClickPeoPle>().AcrossRiver();CountPriestsNumOnEachCoast();}if (demonThree.GetComponent<EventClickPeoPle>().onBoat){demonThree.GetComponent<EventClickPeoPle>().AcrossRiver();CountDemonsNumOnEachCoast();}boat.GetComponent<EventClick>().MoveAcrossRiver();}}public void Checked()  // 测试有没有一岸 魔鬼的数量大于牧师的数量{//输了的情况if (rightCoastPriestNum < rightCoastDemonNum && rightCoastPriestNum != 0){river.GetComponent<View>().GameEnd("*YOU   LOSE*");haveEndedGame = true;}else if (leftCoastPriestNum < leftCoastDemonNum && leftCoastPriestNum != 0){river.GetComponent<View>().GameEnd("*YOU   LOSE*");haveEndedGame = true;}else if (river.GetComponent<View>().ShowTime == 0){river.GetComponent<View>().GameEnd("*YOU   LOSE*");haveEndedGame = true;}//赢了的情况 else if (leftCoastPriestNum == 3 && leftCoastDemonNum == 3 && PeopleNotOnBoat()) // 且所有人不在船上{river.GetComponent<View>().GameEnd("*YOU    WIN*");haveEndedGame = true;}}public bool PeopleNotOnBoat(){return (!priestOne.GetComponent<EventClickPeoPle>().onBoat) && (!priestTwo.GetComponent<EventClickPeoPle>().onBoat) && (!priestThree.GetComponent<EventClickPeoPle>().onBoat) && (!demonOne.GetComponent<EventClickPeoPle>().onBoat) && (!demonTwo.GetComponent<EventClickPeoPle>().onBoat) && (!demonThree.GetComponent<EventClickPeoPle>().onBoat);}public void ReStartGame(){priestOne.GetComponent<EventClickPeoPle>().begin();priestTwo.GetComponent<EventClickPeoPle>().begin();priestThree.GetComponent<EventClickPeoPle>().begin();demonOne.GetComponent<EventClickPeoPle>().begin();demonTwo.GetComponent<EventClickPeoPle>().begin();demonThree.GetComponent<EventClickPeoPle>().begin();boat.GetComponent<EventClick>().begin();}public void CountPriestsNumOnEachCoast(){                                                               // 动态改变两岸魔鬼牧师的数量if (boat.GetComponent<EventClick>().leftSide)               // 从左往右{rightCoastPriestNum += 1;leftCoastPriestNum -= 1;}else{rightCoastPriestNum -= 1;leftCoastPriestNum += 1;}}public void CountDemonsNumOnEachCoast(){if (boat.GetComponent<EventClick>().leftSide)               // 从左往右{rightCoastDemonNum += 1;leftCoastDemonNum -= 1;}else{rightCoastDemonNum -= 1;leftCoastDemonNum += 1;}}public bool allPeopleStanding(){return (priestOne.GetComponent<EventClickPeoPle>().pause && priestTwo.GetComponent<EventClickPeoPle>().pause && priestThree.GetComponent<EventClickPeoPle>().pause &&demonOne.GetComponent<EventClickPeoPle>().pause && demonTwo.GetComponent<EventClickPeoPle>().pause && demonThree.GetComponent<EventClickPeoPle>().pause);}public void allPeopleClick() //处理所有人物被点击的事件函数{// 当船运动的时候所有人不许动if (!boat.GetComponent<EventClick>().pause) return;if (priestOne.GetComponent<EventClickPeoPle>().click) PeopleClick(ref priestOne);if (priestTwo.GetComponent<EventClickPeoPle>().click) PeopleClick(ref priestTwo);if (priestThree.GetComponent<EventClickPeoPle>().click) PeopleClick(ref priestThree);if (demonOne.GetComponent<EventClickPeoPle>().click) PeopleClick(ref demonOne);if (demonTwo.GetComponent<EventClickPeoPle>().click) PeopleClick(ref demonTwo);if (demonThree.GetComponent<EventClickPeoPle>().click) PeopleClick(ref demonThree);}public void PeopleClick(ref GameObject gobj){if (gobj.GetComponent<EventClickPeoPle>().LeftOrRight != boat.GetComponent<EventClick>().leftSide) return; // 当船和移动的人物不在同一岸时不能移动gobj.GetComponent<EventClickPeoPle>().click = false;if (!gobj.GetComponent<EventClickPeoPle>().onBoat)  // 当牧师不在船上的时候 {if (CountPeoPleOnBoat >= 2) return;CountPeoPleOnBoat += 1;if (!peopleOnBoatLeft){gobj.GetComponent<EventClickPeoPle>().MovePeoPle(1);peopleOnBoatLeft = true;}else{gobj.GetComponent<EventClickPeoPle>().MovePeoPle(2);peopleOnBoatRight = true;}}else{int onBoatLeftOrRight = gobj.GetComponent<EventClickPeoPle>().onBoatLeftOrRight;if (onBoatLeftOrRight == 1){peopleOnBoatLeft = false;}else{peopleOnBoatRight = false;}gobj.GetComponent<EventClickPeoPle>().MovePeoPle(onBoatLeftOrRight);CountPeoPleOnBoat -= 1;}}
    }
    
  • EventClick.cs
  • using System.Collections;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using UnityEngine;
    using UnityEngine.EventSystems;public class EventClick : MonoBehaviour, IPointerClickHandler
    {public bool leftSide;public bool pause;public bool click;public Transform boat;// public float time;// Start is called before the first frame updatevoid Start(){leftSide = false; // true为左边,false为右边;pause = true;}// Update is called once per framevoid Update(){if (!pause){if (leftSide) {boat.position = Vector3.MoveTowards(boat.localPosition, new Vector3((float)1.3, (float)0.4, (float)-1), (float)2 * Time.deltaTime);if (boat.position == new Vector3((float)1.3, (float)0.4, (float)-1)) {pause = true;leftSide = false;}} else{boat.position = Vector3.MoveTowards(boat.localPosition, new Vector3((float)-1.3, (float)0.4, (float)-1), (float)2 * Time.deltaTime);if (boat.position == new Vector3((float)-1.3, (float)0.4, (float)-1)) {pause = true;leftSide = true;}}}}public void OnPointerClick(PointerEventData eventData){if (!pause) return;click = true;}public void MoveAcrossRiver(){click = false;pause = false;}public void begin(){boat.position = new Vector3((float)1.3, (float)0.4, (float)-1);pause = true;leftSide = false;}}
    
  • EventClickPeoPle.cs
  • using System.Collections;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Security.Cryptography;
    using UnityEngine;
    using UnityEngine.EventSystems;public class EventClickPeoPle : MonoBehaviour, IPointerClickHandler
    {public bool pause;public bool onBoat;public Transform person;public bool LeftOrRight;        //人在左边还是右边,左边:true //以河的中心区分左右public Vector3 onBoatPosition;public int onBoatLeftOrRight;  //人在上船后,在船的左边还是右边;以在河的右边为例。如果在河的左边,则是镜像。 1为右边,2为左。0为不在船上public Vector3 leftStartPosition;public Vector3 leftFirstDestination;public Vector3 leftMidDestination;public Vector3 leftFinalDestination;public Vector3 rightStartPosition;public Vector3 rightFirstDestination; public Vector3 rightMidDestination;public Vector3 rightFinalDestination;public bool leftZeroStep;public bool leftFistStep;public bool leftMidStep;public bool leftFinalStep;public bool rightZeroStep; // 从第一个位置点返回起始位置public bool rightFistStep;public bool rightMidStep;public bool rightFinalStep;public bool rightToBoat;public bool boatToRight;public bool leftToBoat;public bool boatToLeft;public bool leftAcrossRiver;        // 从河的右边到左边public bool rightAcrossRiver;       // 从河的左边到右边public bool finishAcrossed;         // 是否度过了河public bool finishOnBoatPosition;   // 是否到船上准确位置public bool click;                  // 被点击。与ModelGameObject交互// public float time;// Start is called before the first frame updatevoid Start(){changePosition(person.position);begin();}public void begin(){onBoatLeftOrRight = 0;click = false;LeftOrRight = false;leftZeroStep = false;leftFistStep = false;leftMidStep = false;leftFinalStep = false;rightZeroStep = false;rightFistStep = false;rightMidStep = false;rightFinalStep = false;onBoat = false;pause = true;rightToBoat = false;boatToRight = false;leftToBoat = false;boatToLeft = false;leftAcrossRiver = false;rightAcrossRiver = false;finishAcrossed = false;finishOnBoatPosition = false;person.position = rightStartPosition;}public void changePosition(Vector3 position)  {float para = 1;if (position.x < 0) para = -1;rightStartPosition = position;rightFirstDestination = new Vector3(position.x, position.y + (float)0.55, position.z);rightMidDestination = new Vector3((float)1.25 * para, rightFirstDestination.y, rightFirstDestination.z);rightFinalDestination = new Vector3(rightMidDestination.x, (float)0.8, rightMidDestination.z);leftStartPosition = new Vector3((float)-1 * rightStartPosition.x, rightStartPosition.y, rightStartPosition.z);leftFirstDestination = new Vector3((float)-1 * position.x, position.y + (float)0.55, position.z);leftMidDestination = new Vector3((float)-1.5, rightFirstDestination.y, rightFirstDestination.z);leftFinalDestination = new Vector3((float)-1 * rightMidDestination.x, (float)0.8, rightMidDestination.z);}// Update is called once per framevoid Update(){if (pause) return;if (rightToBoat){if (!MoveToBoat(ref rightFistStep, rightFirstDestination)) return;if (!MoveToBoat(ref rightMidStep, rightMidDestination)) return;if (!MoveToBoat(ref rightFinalStep, rightFinalDestination)) return;if (!MoveToBoat(ref finishOnBoatPosition, onBoatPosition)) return;finishOnBoatPosition = false;onBoat = true;pause = true;rightToBoat = false;rightZeroStep = false;rightFistStep = false;rightMidStep = false;rightFinalStep = false;}else if (boatToRight){if (!MoveToBoat(ref rightFinalStep, rightFinalDestination)) return;if (!MoveToBoat(ref rightMidStep, rightMidDestination)) return;if (!MoveToBoat(ref rightFistStep, rightFirstDestination)) return;if (!MoveToBoat(ref rightZeroStep, rightStartPosition)) return;onBoat = false;pause = true;boatToRight = false;rightZeroStep = false;rightFistStep = false;rightMidStep = false;rightFinalStep = false;}else if (leftToBoat){if (!MoveToBoat(ref leftFistStep, leftFirstDestination)) return;if (!MoveToBoat(ref leftMidStep, leftMidDestination)) return;if (!MoveToBoat(ref leftFinalStep, leftFinalDestination)) return;if (!MoveToBoat(ref finishOnBoatPosition, onBoatPosition)) return;finishOnBoatPosition = false;onBoat = true;pause = true;leftToBoat = false;leftZeroStep = false;leftFistStep = false;leftMidStep = false;leftFinalStep = false;}else if (boatToLeft){if (!MoveToBoat(ref leftFinalStep, leftFinalDestination)) return;if (!MoveToBoat(ref leftMidStep, leftMidDestination)) return;if (!MoveToBoat(ref leftFistStep, leftFirstDestination)) return;if (!MoveToBoat(ref leftZeroStep, leftStartPosition)) return;onBoat = false;pause = true;boatToLeft = false;leftZeroStep = false;leftFistStep = false;leftMidStep = false;leftFinalStep = false;}else if (leftAcrossRiver) // 从左到右渡河{if (!MoveAcrossRiver(ref finishAcrossed, onBoatPosition)) return;pause = true;finishAcrossed = false;leftAcrossRiver = false;} else if (rightAcrossRiver){if (!MoveAcrossRiver(ref finishAcrossed, onBoatPosition)) return;pause = true;finishAcrossed = false;rightAcrossRiver = false;}}public void AcrossRiver(){if (!onBoat || !pause) return;if (!LeftOrRight){LeftOrRight = true;rightAcrossRiver = true;onBoatPosition = new Vector3((float)-2.5 + onBoatPosition.x, (float)0.8, (float)-1.1);}else{LeftOrRight = false;leftAcrossRiver = true;   //leftAcroossRiver 从左到右渡河onBoatPosition = new Vector3((float)2.5 + onBoatPosition.x, (float)0.8, (float)-1.1);}pause = false;}public void OnPointerClick(PointerEventData eventData){if (!pause) return;// 请求ModleGameObject响应click = true;return;}public void MovePeoPle(int t_onBoatPosition) // On...: 1代表在船的左边,2代表在船的右边;  {// 选择路径if (!onBoat && !LeftOrRight){rightToBoat = true;}else if (onBoat && !LeftOrRight){boatToRight = true;}else if (!onBoat && LeftOrRight){leftToBoat = true;}else if (onBoat && LeftOrRight){boatToLeft = true;}bool right = false;if (rightToBoat || boatToRight) right = true;if (right){if (t_onBoatPosition == 1){onBoatPosition = new Vector3((float)1, (float)0.8, (float)-1.1);onBoatLeftOrRight = 1;}else if (t_onBoatPosition == 2){onBoatPosition = new Vector3((float)1.5, (float)0.8, (float)-1.1);onBoatLeftOrRight = 2;}}else{if (t_onBoatPosition == 1){onBoatPosition = new Vector3((float)-1.5, (float)0.8, (float)-1.1);onBoatLeftOrRight = 1;}else if (t_onBoatPosition == 2){onBoatPosition = new Vector3((float)-1, (float)0.8, (float)-1.1);onBoatLeftOrRight = 2;}}pause = false;}bool MoveToBoat(ref bool step, Vector3 destination){if (step) return step;person.position = Vector3.MoveTowards(person.localPosition,destination, (float)5 * Time.deltaTime);if (person.position == destination){step = true;}return step;}bool MoveAcrossRiver(ref bool step, Vector3 destination){if (step) return step;person.position = Vector3.MoveTowards(person.localPosition, destination, (float)2 * Time.deltaTime);if (person.position == destination){step = true;}return step;}}
  • View.cs
  • using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;public class View : MonoBehaviour
    {// Start is called before the first frame updateprivate float time;public int ShowTime; // 显示时间是整数public string ShowMessage;public bool gameEndOrNot;public bool gameReStart;void Start(){begin();}// Update is called once per framevoid Update(){if(!gameEndOrNot){time -= Time.deltaTime;ShowTime = (int)time;}}void OnGUI(){//小字体初始化GUIStyle style = new GUIStyle();style.normal.textColor = Color.white;style.fontSize = 20;//大字体初始化GUIStyle bigStyle = new GUIStyle();bigStyle.normal.textColor = Color.white;bigStyle.fontSize = 30;GUI.Label(new Rect(150, 0, 50, 200), "Priests and Devils", bigStyle);GUI.Label(new Rect(0, 30, 100, 50), "Time: " + ShowTime, style);bigStyle.normal.textColor = Color.red;bigStyle.fontSize = 50;// "*YOU   LOSE*" "*YOU    WIN*"// 游戏结束if (gameEndOrNot){if (GUI.Button(new Rect(240, 110, 100, 50), "RESTART")){begin();}GUI.Label(new Rect(120, 50, 50, 200), ShowMessage, bigStyle);}}public void GameEnd(string t_showMessage){ShowMessage = t_showMessage;gameEndOrNot = true;}public void begin(){ShowMessage = "";time = 60;ShowTime = 60;gameReStart = false;gameEndOrNot = false;}
    }

Unity 3D 游戏编程设计g03相关推荐

  1. Unity 3D 游戏编程设计g04

    unity-3d/Priests and Devils g04 at main · Mike0006/unity-3d (github.com)

  2. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  3. 3D游戏编程设计作业八

    本次作业五选一,我选择制作血条预制设计,要求如下 血条(Health Bar)的预制设计.具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI,血条是游戏对象的一个子元素,任何时候需 ...

  4. Unity 3D游戏编程自学#3——Unity 3D初步

    1.开始 在创建的项目文件夹中,各个子文件夹的作用: Assets:保存游戏所需资源. Library:保存当前项目运行所需要的库. ProjectSettings:保存项目设置信息. Temp:保存 ...

  5. Unity 3D游戏编程自学#7——NGUI入门

    1. NGUI简介 NGUI: Next-Gen UI kit(以下简称NGUI)是一个第三方的Unity开发包(我原来以为是Unity自带的),下载下来后是一个unitypackage的文件,导入后 ...

  6. Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games

    Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...

  7. 3D游戏编程与设计-井字棋

    3D游戏编程与设计-井字棋 目录 3D游戏编程与设计-井字棋 A. 简答题 1. 解释游戏对象(GameObjects)和资源(Assets)的区别与联系 ① 游戏对象 ② 资源 2. 下载几个游戏案 ...

  8. 3D游戏编程与设计作业10

    3D游戏编程与设计作业10 环境说明 Unity3D 导航与寻路 Agent 和 Navmesh 练习 Obstacle和Off-Mesh-Link练习 P&D 过河游戏智能帮助实现 状态图 ...

  9. 《Unity 3D脚本编程:使用C#语言开发跨平台游戏》序言

    本文是7月受陈嘉栋的委托为他的新书<Unity 3D脚本编程:使用C#语言开发跨平台游戏>所写的序言,借助序言告诉大家.NET平台有着一个广阔的使用场景. 序言 Unity3D 是由两个具 ...

最新文章

  1. 深度学习机器臂控制_深度学习新进展:可自建任务解决模型的机器人问世
  2. ActiveMQ activemq web管理界面介绍
  3. 《Effective STL》学习笔记(第一部分)
  4. 数字图像的加载、显示和输出
  5. C# XML反序列化与序列化举例:XmlSerializer(转)
  6. Java Spring实现原理研究之Servlet initialization初始化过程
  7. [DB2]DB2中的数值类型
  8. Kubernetes1.4即将发布
  9. 在有的公司,高手遍地走,天才不如狗
  10. winform画图 抗锯齿
  11. foremost入门
  12. WebRTC系列- SDP详解
  13. 位图和矢量图转换工具推荐
  14. C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想
  15. linux集群服务器搭建
  16. 在线作图丨数据降维分析④——NMDS分析
  17. 蚂蚁的开放:想办法摸到10米的篮筐 1
  18. 对话 | AI、机器学习在材料科学研究中能发挥哪些作用?
  19. c语言程序设计流程图案例
  20. Unity线性空间UI的问题

热门文章

  1. linux 模拟器安卓版下载,ONS模拟器下载
  2. Java核心技术:集合——映射
  3. [ Cesium ] 根据卫星位置,建立实时动态连线
  4. python生成等值线_在python中生成X,Y数据的等值线图
  5. halcon编程入门七——halco算子大全
  6. 中国最牛逼的四大软件
  7. 小米10开始抓取日志怎么关闭_除了*#*#6485#*#*,小米手机还有这些神秘暗号
  8. 基于改进二进制粒子群算法的配电网重构(matlab实现)
  9. 中式风格装修,彰显东方迷人的魅力
  10. 利用pymupdf编辑修改pdf