【新增分类】
Animations 动画
——Animation
——AnimatorController
Prefabs 预制

【素材导入】
unitypackage 素材包
Sprites Editor 编辑图片(切图之类)

【素材应用】
1.选取一个动作多张图片拖动到Hierarchy生成动画
2.带有Sprite Renderer和Animator组件
3.在project会生成anim(动画)和controller(控制)文件
4.选取另一个动作多张图片拖拽到刚生成的物体则不会创建新物体
5.把物体拖拽到project生成预制体

(同一控制不同动画处理)
6.右键创建Animator Overide Controller重写一个相同的控制器,指定重写对象
7.把2动画借1物体生成动画,并改1物体指定控制和重写的状态机指定动画。

【动画编辑】【动画状态机】
Animator 动画编辑器 状态机
idle 待命
attack 攻击
damger 受伤

Trigger
——Has Exit Time 前一个动画播放完触发
——Exit Time 多久进行切换
——Transition Duration 转化时间(3D需要融合时间)

[动画组件]
private Animator animator;

animator = GetComponent<Animator>();

animator.SetTrigger("Attack");

【固定生成】【设置父类】
//创建一个空物体,创建脚本
GameObject[] outWallArray;
//指定预设物体
private Transform mapHolder;(1)
//地址
public int rows=10;
public int cols=10;

private void InitMap(){
//初始化地图,

mapHolder = new GameObject("Map").transform;(2)

for(int x=0;x<cols;x++){

for(int y =0; y <rows;y++){

if(x==0||y==0||x==cols-1||y==rows-1){

int index = Random.Range(0,outWallArray,length)

GameObject go = GameObject.Instantiate(outWallArray[index],new vector3(x,y,0),Quaternion.identity)as GameObject;

//对象,位置,旋转

go.transform.SetParent(mapHolder):(3)

//设置父类

}

}

}
}

【随机生成】【List的使用】
public GameObject[] wallArray;
public int minCountWall = 2;
public int maiCountWall = 8;
private List<Vector2> polistionList = new List<Vector2>();
positionList.Clear();
for(int x = 2; x < cols-2;x++){

for(int y = 2; y < cols-2;y++){

positionList.Add(new Vector2(x,y))

}
}
//障碍物的地址
int wallCount = Random.Range(minCountWall, maxCountWall + 1);、
//障碍物的个数
for(int i = 0;i <wallCount;i++){

int positionIndex = Random.Rabge(0,positionList.Count)

Vector2 pos = positionList[positionIndex];

positionList.Remove(positionIndex);

//随机取得位置,移出列表

int wallIndex = Random.Range(0,wallArray.length);

//随机取得障碍物

GameObject go = GameObject.Instantiate(wallArray[wallIndex],pos,Quaternion.identity) as GameObject ;

go.transform.SetParent(mapHolder):
}
注意:记得设置墙体和障碍物层数

【互相调用】
同一物体两个组件
{GameManager}
public int level
{MapManager}
private GameManager gameManager;
gameManager = this.GetComponent<GameManager>();

不同物体两个组件
{GameManager}
public List<Enemy> enemyList = new List<Enemy>();
{Enemy}
GameManager.Instance.enemyList.Add(this);

【预设输入】
float h = Input.GetAxisRaw("Horizontal");
float h = Input.GetAxisRaw("Vertical");
if(h>0){
v = 0;
}

【刚体组件】
rigidbody.MovePosition(Vector2.Lerp(transform.position,targetPos.smoothing*Time.deltaTime));
//差值(初始位置,目标位置,速度)

【计时休息】
public float restTimer = 1;//限时多少
private float restTime = 0;//计时器
restTimer += Time.deltaTime;
if(restTimer<restTime)retrun;
//运行
restTimer = 0;

【目标检测】
colider.enabled = false; //自身collider禁用
RaycastHit2D hit = Physics2D.Linecast(targetPos,targetPos + new Vector2(h,v));
//初始位置,目标位置
collider.enabled = true;
if(hit.transform == null){

targetPos += new Vector2(h,v);
}else{

switch(hit.collider.tag) {

case"OutWall"

break;

case"Wall"

hit.collider.SendMessage("TakeDamage")

}
}
restTimer = 0;
//碰撞到物体标签

【物体查找】
private Transform player
player = GameObject.FindGameObjectWithTag("player").transform;

【AI判断】
Vector2 offset = player.position - transform.position;
if(offset.magnitude<1.1f){

//攻击
}else{

float x = 0, y = 0;

if(Mathf.Abs(offset.y)>Mathf.Abs(offset.x)){

//按照Y轴移动,绝对值

if(offset.y<0){

y = -1;

}else

{

y = 1;

}

}else{

//按照x轴移动

if(offset.x > 0){

x = 1;

}else{

x = -1;

}

}

tagetPosition +=new Vector2(x,y);
}

【开启禁用】
this.enabled = false;//禁用该脚本
if(GameManager.Instance.food)

private Text foodText;
foodText = GameObject.Find("FailText").GetComponent<Text>();
failText.enabled = false;
failText.enabled = true

[HideInspector]public Vector2 targetPos = new Vector2(1,1);

DontDestroyOnload(gameObject);//不要销毁

void HideBlack(){
dayImage.gameObject.SetActive(false);
}
Invoke("HideBlack",1)//经过一秒调用

【关卡变化】
Application.LoadLevel(Application.loadedLevel);//重新加载本关卡

void OnLevelWasLoaded (int sceneLevel){

Level++;

InitGame();//初始化游戏
}

【实例化】
GameManager放在预设里
在Main Camer添加一个新脚本Leader
public GameObjiect gameManager;
void Awake(){

if(GameManager.Instance==null)//等于空才进行实例化

GameObject.Instantiate(gameManager);
}

【音效播放】
public float minPitch = 0.9f;
public float manPitch = 1.1f;
public AudioSource efxSource;

public void RandomPlay(params AudioClip[] clips){

float pitch = Random.Range(minPitch,manPitch);

int index = Random.Range(0,clips.Length);

AudioClip clip = clips[index];

efxSource.clip =clip;

efxSource.pitch = pitch;

efxSource.Play();
}

【SIKIA计划】_06_Unity2D游戏开发-拾荒者笔记的更多相关文章

  1. lua游戏开发实践指南学习笔记1

    本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1.  语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...

  2. 【SIKIA计划】_03_C#初级教程 (2015版)笔记

    Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力.MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装.M ...

  3. 【SIKIA计划】_04_C#中级教程 (2015版)笔记

    IKIC#中级教程 (2015版)正常模式指的是不会影响程序的正常运行.1,在VS中我们使用Console.Write(或者WriteLine)方法向控制台输出变量的值,通过这个我们可以查看变量的值是 ...

  4. Siki_Unity_1-9_Unity2D游戏开发_Roguelike拾荒者

    Unity 1-9 Unity2D游戏开发 Roguelike拾荒者 任务1:游戏介绍 Food:相当于血量:每走一步下降1,吃东西可以回复(果子10药水20),被怪物攻击会减少中间的障碍物可以打破, ...

  5. PuTsangTo-单撸游戏开发01 Flag与计划

    先立下flag,至少1年之内坚持并2年之内完成自己的一个梦想--游戏开发. 没有参加培训也不打算参加培训,就纯靠业余时间自学并用自己的思路完成一整套游戏体系.做出此决心时也已经做好准备烂尾了,但是有种 ...

  6. 2017年Unity游戏开发视频教程(入门到精通)

    本文是我发布的一个Unity游戏开发的学习目录,以后我会持续发布一系列的游戏开发教程,都会更新在这个页面上,适合人群有下面的几种: 想要做独立游戏的人 想要找游戏开发相关工作的人 对游戏开发感兴趣的人 ...

  7. [Unity游戏开发]向量在游戏开发中的应用(一)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102 向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只 ...

  8. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...

  9. 转: Orz是一个基于Ogre思想的游戏开发架构

    Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...

随机推荐

  1. 【译文】InnoDB 的不同的SQL如何加锁

    http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html 前置:检索如果用不到索引,会扫描全表,并根据策略加锁.所以,这就是我们合理建立 ...

  2. VMWare虚拟机下为Windows Server 2012配置静态IP(NAT方式)

    利用VMWare Workstation安装了Windows Server 2012 R2, 对于服务器来说,使用动态分配的IP会很不方便,最好设置为静态IP,此例中虚拟机和主机的网络联接方式为NAT ...

  3. python第二课——数据类型1

    day02(上午)主要讲了进制问题,小编之前已经发过了 day02(下午): 1.数据类型: 分类: 1).整数型:int浮点型(小数):float布尔型(True/False):bool 2).字符 ...

  4. BZOJ1597:[USACO]土地购买(斜率优化DP)

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 < = 1,000 ...

  5. 【洛谷】【动态规划/背包】P1833 樱花

    [题目描述:] 爱与愁大神后院里种了n棵樱花树,每棵都有美学值Ci.爱与愁大神在每天上学前都会来赏花.爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一种樱花树最多看Ai遍,一种樱花树 ...

  6. 【洛谷】【堆+结论】P4597 序列sequence

    [题目背景:] 原题cf13c 数据加强版(就是说原来能用DP做现在不行了QwQ) [题目描述:] 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.而且要求修改后的数列只能出现修改 ...

  7. Js 面向对象之封装,继承,原型,原型链

    封装 ,继承 ,原型, 原型链 封装 ? 面向对象有三大特性,封装.继承和多态.对于ES5来说,没有class(类)的概念,并且由于JS的函数级作用域(函数内部的变量在函数外访问不到),所以我们就可以 ...

  8. regex_replace

    Regex_iterator方法需要输入一个正则表达式,以及一个用于替换匹配的字符串的格式化字符串:这个格式化的字符串可以通过表的转义序列引用匹配子字符串的部分内容: 转义序列 $n 替换第n个捕获的 ...

  9. Spring整合MyBatis(四)MapperFactoryBean 的创建

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 目录 一.MapperFactoryBean的初始化 二.获取 Map ...

  10. STM32F103 ucLinux开发BOOT

    STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...