Unity 3D游戏——神鬼传说
简答题
- 游戏对象运动的本质是什么?
- 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
- 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。
游戏对象运动的本质
游戏对象的运动实际上是通过不断更改位置(position)属性和旋转(rotation)属性的值,以微小差异的离散值变化,在快速刷新图像的条件下,使人视觉上产生运动的感觉。
// 以一定速度向左移动
this.transform.position += speed * Vector3.left * Time.deltaTime;// 以一定速度向e方向旋转
Quaternion q = Quaternion.AngleAxis(speed * Time.deltaTime, e);
this.transform.localRotation *= q;
物体抛物线运动
抛物线运动可以分解为水平方向运动以及垂直方向运动,水平方向速度一定,垂直方向存在加速度。但是由于显示画面刷新快且时间间隔一定,所以可以认为在每一次 Update
函数执行时速度是不变的,存在公式ds=dv*dt
,关键是垂直方向在此时也可以认为速度不变。
(1) 第一种方法:在原position上增值
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1;public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");this.transform.position += Vector3.down * Time.deltaTime * v; // 竖直方向和水平方向都有 ds=dv*dtthis.transform.position += Vector3.right * Time.deltaTime * 2;v += a; // 存在加速度,v的值不断改变}
}
(2) 第二种方法:用新的position取代原position
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1; //垂直方向速度public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");this.transform.position = new Vector3(this.transform.position.x + v, this.transform.position.y, this.transform.position.z + 1);v += a; // 存在加速度,v的值不断改变}
}
(3) 第三种方法:使用translate函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour
{public float v = 1; // 垂直方向速度public float a = 1;// Start is called before the first frame updatevoid Start(){Debug.Log("Start!");}// Update is called once per framevoid Update(){Debug.Log("Update!");Vector3 run = new Vector3(Time.deltaTime * 2, -Time.deltaTime * v, 0); // 和速度向量this.transform.Translate(run);v += a; // 存在加速度,v的值不断改变}
}
完整太阳系
在unity中建立模型(红色为太阳,蓝色为地球):
Moon需要放在Earth下,作为子对象,以保证在Earth自转时,轴位置的改变不会影响到Moon的公转。
在空游戏对象中绑定脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScript1 : MonoBehaviour
{GameObject Sun, Mer, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Earth, Moon;// Start is called before the first frame updatevoid Start(){Sun = GameObject.Find("Sun");Mer= GameObject.Find("Mer");Venus= GameObject.Find("Venus");Mars= GameObject.Find("Mars");Jupiter= GameObject.Find("Jupiter");Saturn= GameObject.Find("Saturn");Uranus= GameObject.Find("Uranus");Neptune= GameObject.Find("Neptune");Earth= GameObject.Find("Earth");Moon= GameObject.Find("Moon");}// Update is called once per framevoid Update(){Earth.transform.RotateAround(Sun.transform.position, Vector3.up, 50 * Time.deltaTime);Earth.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Moon.transform.RotateAround(Earth.transform.position, Vector3.up, 359 * Time.deltaTime);Moon.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Mer.transform.RotateAround(Sun.transform.position, new Vector3(1, 5, 2), 45 * Time.deltaTime);Mer.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Venus.transform.RotateAround(Sun.transform.position, new Vector3(1, 2, 0), 42 * Time.deltaTime);Venus.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Mars.transform.RotateAround(Sun.transform.position, new Vector3(2, 1, 2), 40 * Time.deltaTime);Mars.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Jupiter.transform.RotateAround(Sun.transform.position, new Vector3(1, 2, 1), 38 * Time.deltaTime);Jupiter.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Saturn.transform.RotateAround(Sun.transform.position, new Vector3(2, 1, 1), 36 * Time.deltaTime);Saturn.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Uranus.transform.RotateAround(Sun.transform.position, new Vector3(3, 1, 2), 35 * Time.deltaTime);Uranus.transform.Rotate(Vector3.up * 30 * Time.deltaTime);Neptune.transform.RotateAround(Sun.transform.position, new Vector3(1, 3, 2), 33 * Time.deltaTime);Neptune.transform.Rotate(Vector3.up * 30 * Time.deltaTime); }
}
游戏运行结果如下:
编程实践
- 列出游戏中提及的事物(Objects)
- 用表格列出玩家动作表(规则表),注意,动作越少越好
- 请将游戏中对象做成预制
- 在 GenGameObjects 中创建 长方形、正方形、球 及其色彩代表游戏中的对象。
- 使用 C# 集合类型 有效组织对象
- 整个游戏仅 主摄像机 和 一个 Empty 对象, 其他对象必须代码动态生成!!! 。 整个游戏不许出现 Find 游戏对象, SendMessage 这类突破程序结构的 通讯耦合 语句。 违背本条准则,不给分
请使用课件架构图编程,不接受非 MVC 结构程序 - 注意细节,例如:船未靠岸,牧师与魔鬼上下船运动中,均不能接受用户事件!
游戏中提及的事物
- 河岸,牧师、恶魔、船、河水、“Go”按钮、“Restart”按钮。
玩家动作表
动作 | 参数 | 结果 |
---|---|---|
点击牧师或恶魔 | 船不在移动且两者在同一侧 | 牧师或恶魔上船或下船 |
点击小船 | 小船已靠岸 ,船上有人物 | 小船向另一边航行 |
游戏对象预制
下载了一些材料,使用Cube和Sphere预制了河岸、牧师、恶魔、小船。
游戏实现
主要按照MVC结构设置了Model、Controller以及View。其中Controller被分解成了Director、SceneController、UserActions几个方面。
程序内主要需要完成的是根据行为为事物添加动作,关键在于position的定位以及状态的设定。
遇到的一些问题主要有:
1.空位判断时,需要保证小船的空位数组在起始处与终点处时相互对应的。
2.绑定事件到游戏对象需要,先为事件设计类,再将事件类实例使用AddComponent(typeof(事件类)) as 事件类
绑定到游戏对象。
3.Resume功能必须详尽的考虑到所有可能被改变的初始状况。
4.灵活使用单例,可以方便的将各个组件串联到一起,本次实验中SSDirector.getInstance().currentSceneController as 类
就是一个很明显的例子,通过SSDirector单例,可以在其他类中对场景进行唯一性的变换。
5.View部分应该通过用户行为与场记交互,从而影响场景变换。
程序运行界面:
程序运行效果视频:https://www.bilibili.com/video/av68226387/
具体程序如下:
1.View.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UserActions;
using Director;namespace View
{public class pageImage : MonoBehaviour{IUserAction userAction;public bool isOver = true;// Start is called before the first frame updatevoid Start(){userAction = SSDirector.getInstance().currentSceneController as IUserAction;}private void OnGUI(){if (!isOver){GUI.Label(new Rect(Screen.width / 2 - 80, Screen.height / 2 - 80, 100, 50), "Gameover!", new GUIStyle(){fontSize = 30});if (GUI.Button(new Rect(Screen.width / 2 - 60, Screen.height / 2, 100, 50), "Restart")){userAction.Resume();isOver = true;}}if(GUI.Button(new Rect(Screen.width / 2- 60, Screen.height / 2-150, 100, 50), "Go")){userAction.MoveBoat();}}}
}
2.UserActions.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using Models;namespace UserActions
{public interface IUserAction{void MoveBoat(); /* 小船向另一边航行,条件:小船已靠岸 ,船上有人物 */void MoveRole(Role role); /* 牧师或恶魔上船或下船,条件:船不在移动且两者在同一侧 */bool Check(); /* 游戏结束,条件:岸上牧师的人数小于恶魔数; 通关,条件:所有人物都达到河岸另一边 */void Resume(); /* 游戏重新开始 */}}
3.SceneController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/* 场记命名空间,便于被Director.cs文件中引用,场记应该受导演管制和调用 */namespace SceneController {/* 场记接口:用于被场记类继承,一个游戏中通常不止一个场记 */public interface ISceneController{void LoadResource(); /* 加载当前场景的资源 *///void Pause(); /* 当前场景暂停 *///void Resume(); /* 当前场景继续进行 */}
}
4.Model.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using SceneController;
using UserActions;namespace Models
{public class Land /* 陆地类 */{GameObject land; /* 声明陆地对象 */Vector3[] rolesPositions; /* 保存陆地上人物的位置 */bool isStart; /* 标记左右岸,默认右岸为Start */Vector3 landPosition; /* 岸的位置 */bool[] isPosEmpty = new bool[6]; /* 保存岸上位置的占用的情况 */public Land(bool startOrEnd) /* true为右岸,false为左岸 */{if (startOrEnd){landPosition = new Vector3(3, -1, -2);rolesPositions = new Vector3[] {new Vector3(1,1,-4), new Vector3(1,1,-2), new Vector3(2,1,-4),new Vector3(2,1,-2),new Vector3(3,1,-4),new Vector3(3,1,-2)};}else{landPosition = new Vector3(-20, -1, -2);rolesPositions = new Vector3[] {new Vector3(-18,1,-4), new Vector3(-18,1,-2), new Vector3(-19,1,-4),new Vector3(-19,1,-2),new Vector3(-20,1,-4),new Vector3(-20,1,-2)};}land = Object.Instantiate(Resources.Load("Land", typeof(GameObject)), landPosition, Quaternion.identity) as GameObject;isStart = startOrEnd;for (int i = 0; i < 6; i++) isPosEmpty[i] = true;}public Vector3 getPos(int index) /* 获得一个岸上的位置 */{return rolesPositions[index];}public int getAnEmptyIndex(){for(int i = 0; i < isPosEmpty.Length; i++){if (isPosEmpty[i])return i;}return -1;}public bool isEmpty() /* 岸上是否为空 */{for(int i = 0; i < isPosEmpty.Length; i++){if (!isPosEmpty[i])return false;}return true;}public bool judgeId() /* 判断是左岸还是右岸 */{return isStart;}public void setOccupied(int index) /* 将位置设为占用 */{isPosEmpty[index] = false;}public void setEmpty(int index) /* 将位置设置为空闲 */{isPosEmpty[index] = true;}public int getSeatByPos(Vector3 pos) /* 根据坐标获得人物在岸上的位置 */{for(int i = 0; i < rolesPositions.Length; i++){if (rolesPositions[i] == pos)return i;}return -1;}public void reset() /* 所有位置置空 */{for (int i = 0; i < isPosEmpty.Length; i++){isPosEmpty[i] = true;}}}public class Boat /* 小船类 */{GameObject boat;Move move;Click click;Vector3[] rolePositionsAtStart; /* 小船在右岸时的座位位置 */Vector3[] rolePositionsAtEnd; /* 小船在左岸时的座位位置 */bool[] isPosEmpty = new bool[2]; /* 座位是否空闲 */bool boatPosition; /* 小船的位置,右岸为true,左岸为false */Vector3 startPos, endPos; /* 小船在起点和终点时的位置 */public Boat(){/* 起点和终点的船上位置坐标必须对应,调试了好久!! */startPos = new Vector3(-1, -1, -1);rolePositionsAtStart = new Vector3[] { new Vector3(-0.5F, 0.5F, -1), new Vector3(-1.6F, 0.5F, -1) };endPos = new Vector3(-16, -1, -1);rolePositionsAtEnd = new Vector3[] { new Vector3(-15.5F, 0.5F, -1), new Vector3(-16.6F, 0.5F, -1) };boatPosition = true;boat= Object.Instantiate(Resources.Load("Boat", typeof(GameObject)), startPos, Quaternion.identity) as GameObject;move = boat.AddComponent(typeof(Move)) as Move;click = boat.AddComponent(typeof(Click)) as Click;move.moveTowards(startPos);for (int i = 0; i < isPosEmpty.Length; i++) isPosEmpty[i] = true;}public Vector3 getPos(int index) /* 获得一个岸上的位置 */{if (boatPosition)return rolePositionsAtStart[index];elsereturn rolePositionsAtEnd[index];}public int getAnEmptyIndex(){for (int i = 0; i < isPosEmpty.Length; i++){if (isPosEmpty[i])return i;}return -1;}public int getSeatByPos(Vector3 pos) /* 根据坐标获得人物在船上的位置 */{if (boatPosition){for (int i = 0; i < 2; i++){if (rolePositionsAtStart[i] == pos)return i;}}else{for (int i = 0; i < 2; i++){if (rolePositionsAtEnd[i] == pos)return i;}}return -1;}public void setOccupied(int index) /* 将位置设为占用 */{isPosEmpty[index] = false;}public void setEmpty(int index) /* 将位置设置为空闲 */{isPosEmpty[index] = true;}public bool isEmpty() /* 船上是否为空 */{ for (int i = 0; i < isPosEmpty.Length; i++){if (!isPosEmpty[i]){return false;}}return true;}public bool isMove(){if (boat.transform.position != startPos && boat.transform.position != endPos)return true;elsereturn false;}public void moveToOtherSide() /* 船向对岸移动 */{if (getBoatPos()){move.moveTowards(endPos);boatPosition = false;}else{move.moveTowards(startPos);boatPosition = true;}}public bool getBoatPos() /* 返回船在左岸还是右岸,右岸为true */{return boatPosition;}public GameObject getPrototype() /* 获得游戏对象 */{return boat;}public void reset() /* 所有位置置空 */{for(int i = 0; i < isPosEmpty.Length; i++){isPosEmpty[i] = true;}boat.transform.position = startPos;boatPosition = true;}}public class Role /* 人物类 */{GameObject role;Move move; /* 移动 */Click click;bool id; /* 判断身份,牧师或者恶魔,true为牧师,false为恶魔 */int isOnLand; /* 判断是否在岸上,在船上是0,右岸为1,左岸为2 */Land startLand = (SSDirector.getInstance().currentSceneController as Controller).startLand;Land endLand = (SSDirector.getInstance().currentSceneController as Controller).endLand;Boat boat = (SSDirector.getInstance().currentSceneController as Controller).boat;public Role(bool hisId,string name) /* 用name来标识人物 */{int emptyIndex = startLand.getAnEmptyIndex();if (emptyIndex == -1)Application.Quit();if (hisId){role = Object.Instantiate(Resources.Load("Priest", typeof(GameObject)), startLand.getPos(emptyIndex), Quaternion.identity) as GameObject;startLand.setOccupied(emptyIndex);}else{role = Object.Instantiate(Resources.Load("Devil", typeof(GameObject)), startLand.getPos(emptyIndex), Quaternion.identity) as GameObject;startLand.setOccupied(emptyIndex);}role.name = name;isOnLand = 1;id = hisId;move = role.AddComponent(typeof(Move)) as Move;click = role.AddComponent(typeof(Click)) as Click;move.moveTowards(startLand.getPos(emptyIndex));click.SetRole(this);}public void setRolePos(Vector3 pos) /* 设置人物位置 */{role.transform.position = pos;}public void goAshore() /* 人物上岸 */{Land land = boat.getBoatPos() ? startLand : endLand;int pos = land.getAnEmptyIndex();if (pos == -1){Debug.Log("Land No Empty.");return;}land.setOccupied(pos);boat.setEmpty(boat.getSeatByPos(role.transform.position));//Debug.Log("Boat empty:" + boat.getSeatByPos(role.transform.position) + role.transform.position);move.moveTowards(land.getPos(pos));if (boat.getBoatPos()) isOnLand = 1;else isOnLand = 2;role.transform.parent = null;}public void goBoarding() /* 人物上船 */{Land land = boat.getBoatPos() ? startLand : endLand;int pos = boat.getAnEmptyIndex();if (pos == -1){Debug.Log("Boat No Empty.");return;}boat.setOccupied(pos);land.setEmpty(land.getSeatByPos(role.transform.position));move.moveTowards(boat.getPos(pos));isOnLand = 0;role.transform.parent = boat.getPrototype().transform;}public int getRolePos() /* 了解人物在左岸(2)、右岸(1)还是船上(0) */{return isOnLand;}public bool getRoleId() /* 获得人物身份 */{return id;}public void reset(){int emptyIndex = startLand.getAnEmptyIndex();setRolePos(startLand.getPos(emptyIndex));startLand.setOccupied(emptyIndex);role.transform.parent = null;isOnLand = 1;}}public class Move: MonoBehaviour{int speed = 50;Vector3 destPos;bool canMove = false;private void Update(){if (canMove){transform.position = Vector3.MoveTowards(transform.position, destPos, speed * Time.deltaTime);if(transform.position==destPos)canMove = false;}}public void moveTowards(Vector3 dest){destPos = dest;canMove = true;}}public class Click : MonoBehaviour{IUserAction userAction;Role role;public void SetRole(Role role){this.role = role;}public void Start(){userAction = SSDirector.getInstance().currentSceneController as IUserAction;}private void OnMouseDown(){if (role == null) return;else{userAction.MoveRole(role);}}}
}
5.Director.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SceneController;namespace Director
{public class SSDirector : System.Object{/* 单例模式,导演只有一个 */private static SSDirector _instance;/* 记录当前的场记,也即记录了当前场景 */public ISceneController currentSceneController { get; set; }/* 记录游戏是否正在运行 */public bool running { get; set; }/* 获得单例 */public static SSDirector getInstance(){if (_instance == null){_instance = new SSDirector();}return _instance;}}
}
6.Controller.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;
using UserActions;
using Models;
using View;
using SceneController;/* 场记类实现:需要继承场记接口 */
public class Controller : MonoBehaviour, ISceneController, IUserAction
{public Land startLand, endLand;public Boat boat;public Role[] roles;public pageImage gameGUI;/* 场记接口方法的实现,主要完成场景载入 */public void LoadResource(){startLand = new Land(true);endLand = new Land(false);boat = new Boat();roles = new Role[6];for (int i = 0; i < 3; i++){roles[i] = new Role(true, "Priest" + i);}for (int i = 3; i < 6; i++){roles[i] = new Role(false, "Devil" + i);}}/* 用户行为接口方法的实现 */public void MoveBoat(){if (boat.isEmpty() || boat.isMove()|| !gameGUI.isOver) return;boat.moveToOtherSide();gameGUI.isOver = Check();}public void MoveRole(Role role){if (!boat.isMove() && gameGUI.isOver){if (role.getRolePos() == 0){role.goAshore();}else{role.goBoarding();}}}public bool Check(){int priestNumAtStart = 0;int priestNumAtEnd = 0;int devilNumAtStart = 0;int devilNumAtEnd = 0;int priestNumAtBoat = 0;int devilNumAtBoat = 0;for (int i = 0; i < 6; i++){switch (roles[i].getRolePos()){case 0:if (roles[i].getRoleId()){priestNumAtBoat++;}else{devilNumAtBoat++;}break;case 1:if (roles[i].getRoleId()){priestNumAtStart++;}else{devilNumAtStart++;}break;case 2:if (roles[i].getRoleId()){priestNumAtEnd++;}else{devilNumAtEnd++;}break;default:break;}}Debug.Log("priestNumAtBoat:" + priestNumAtBoat);Debug.Log("priestNumAtStart:" + priestNumAtStart);Debug.Log("devilNumAtBoat:" + devilNumAtBoat);Debug.Log("devilNumAtStart:" + devilNumAtStart);Debug.Log("priestNumAtEnd:" + priestNumAtEnd);Debug.Log("devilNumAtEnd:" + devilNumAtEnd);Debug.Log("");if ((priestNumAtBoat + priestNumAtStart < devilNumAtBoat + devilNumAtStart || priestNumAtBoat + priestNumAtEnd < devilNumAtBoat + devilNumAtEnd)){return false;}elsereturn true;}public void Resume(){startLand.reset();endLand.reset();boat.reset();for (int i = 0; i < roles.Length; i++){roles[i].reset();}}/* 控制器的生命周期 */void Awake(){SSDirector director = SSDirector.getInstance();director.currentSceneController = this;director.currentSceneController.LoadResource();}void Start(){Debug.Log("First SceneController Start!");gameGUI = gameObject.AddComponent<pageImage>() as pageImage;}
}
Unity 3D游戏——神鬼传说相关推荐
- Unity 3D游戏——神鬼传说(动作管理重制版)
基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 写一个简单的总结,总结游戏对象的使用 下载Fantasy Skybox FREE 构建场景 (1)在Asset Sto ...
- 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 ...
- 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序
本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...
- 雨松MOMO《Unity 3D游戏开发》源码公布
原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...
- 【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍
随着游戏体积和功能的不断叠加,游戏中的数据也变得越来越庞杂,这其中既包括玩家产生的游戏存档等数据,例如关卡数.金币等,也包括游戏配置数据,例如每一关的配置情况.尽管Unity提供了PlayerPref ...
- unity 3d游戏开发_使用Unity 5开发3D游戏
unity 3d游戏开发 If there's one thing cooler than playing games, it's building games. 如果有比玩游戏更酷的一件事,那就是构 ...
- 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览
本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...
- Unity 3D 环境特效||Unity 3D 游戏场景设计实例
Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...
- Unity 3D游戏发布到Android平台
Android 是目前最流行的一个词,Android 的游戏.软件等几乎是人们每天都要用到的.要将 apk 文件发布到 Android 平台,必须先安装两个工具:Java(JDK)和 Android ...
最新文章
- matlab处理图像位置,MATLAB图像处理:我的直方图的最后一个位置出现了
- Logstic与Softmax比较
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
- tensorflow详解-tf.nn.conv2d(),tf.nn.max_pool()
- 技术分享丨关于 Hadoop 的那些事儿
- I.MX6 boot from Micro SD
- PolandBall and Forest(并查集)
- java stringbuffer原理_深入理解Java:String
- 收藏 | 可能是最详尽的PyTorch动态图解析
- win7 python2.7安装PIL库
- 如何去除chrome最常访问的网页
- 设计模式之组合模式(十四)
- Win10加装SSD固态硬盘后卡顿现象的解决方法
- Xweibo:新浪云微博服务 - 新浪开源微博系统
- jsdroid 教程_ps教程自学平台
- h30-t10 android phone,荣耀3C移动2G版(H30-T10)官方完整版ROM全合集!!!
- MYSQL设置初始密码
- 兴奋神经递质——谷氨酸与大脑健康
- 在react脚手架中使用Tailwind CSS (入门)
- 永磁同步电机转子位置估算专题 —— 基波模型与转子位置角
热门文章
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day40】—— 数据库7
- 加油吧,数字化转型@聪明的券商正在成为金融技术的整合者
- 判断一个图形是否为对称图形
- IDEA编译项目提示程序包不存在、符号错误,最终幻想
- HTML学生个人网站作业设计:电影网站设计——威海影视网站首页(1页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- plex自动跳到登入_如何使用Plex Media Server自动下载字幕
- iPhone上用小影剪辑视频(iPhone读取文件)
- APK动态加载框架(DL)解析
- weblog_Google Weblog宣布Froogle A hrefhttpwwwjepstonene
- 『每日AI』5G新时代丨最先火起来的居然是……