主要是移动脚本和2个技能的脚本编写。

首先是移动的脚本:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class playerMove : MonoBehaviour
{
public float rotateSpeed = 1f;
public float moveSpeed = 0.08f;
public Texture aimImage;
//大键盘wsad控制人物移动
void moveBigKeyboard()
{
if (Input.GetKey("a"))
{
transform.Translate(, , * moveSpeed);
}
else if (Input.GetKey("d"))
{
transform.Translate(, , - * moveSpeed);
}
else if (Input.GetKey("s"))
{
transform.Translate(- * moveSpeed, , );
}
else if (Input.GetKey("w"))
{
transform.Translate( * moveSpeed, , );
}
}
//鼠标左右移动控制前进方向
void moveMouse()
{
transform.Rotate( , Input.GetAxis("Mouse X") * rotateSpeed, );
}
void OnGUI()
{
Screen.lockCursor = true;
//绘制准心
//Rect rect = new Rect(Input.mousePosition.x - (aimImage.width >> 1),
//Screen.height - Input.mousePosition.y - (aimImage.height >> 1),
//aimImage.width, aimImage.height);
//如果要加y轴,可以加
Rect aimRect = new Rect(Input.mousePosition.x - , -Input.mousePosition.y + , , );
GUI.DrawTexture(aimRect, aimImage); }
void FixedUpdate()
{
moveBigKeyboard();
moveMouse();
} }

然后是技能脚本:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class skill : MonoBehaviour
{ //【地爆天星】z键触发,六个小球出现,小球依次消失
public GameObject ChibukaTensei;
void skillChibukaTensei()
{
if (Input.GetKey("z"))
{
GameObject CT1, CT2, CT3, CT4, CT5, CT6;
CT1 = Instantiate(ChibukaTensei, transform.TransformPoint(, , ), ChibukaTensei.transform.rotation);
CT2 = Instantiate(ChibukaTensei, transform.TransformPoint(, , -), ChibukaTensei.transform.rotation);
CT6 = Instantiate(ChibukaTensei, transform.TransformPoint(, , ), ChibukaTensei.transform.rotation);
CT3 = Instantiate(ChibukaTensei, transform.TransformPoint(, , -), ChibukaTensei.transform.rotation);
CT5 = Instantiate(ChibukaTensei, transform.TransformPoint(, , ), ChibukaTensei.transform.rotation);
CT4 = Instantiate(ChibukaTensei, transform.TransformPoint(, , ), ChibukaTensei.transform.rotation);
Destroy(CT1, );
Destroy(CT2, );
Destroy(CT3, );
Destroy(CT4, );
Destroy(CT5, );
Destroy(CT6, );
}
} //【Fireball】双锤普攻,鼠标左键施法准备火球,满足【锤头=红色+火球集气到最大】的要求后,松开左键释放火球;右键集气
public GameObject Fireball;//实例化的对象
int cd = ;//【Fireball】集气计数器。满50,才可能火球施放成功
int scale = ;//【Fireball】释放计数器。释放次数满50,火球才能施放成功
public Camera aim;//瞄准摄像头
void skillFireball()
{ GameObject FB;
//松开左键时
if (Input.GetMouseButtonUp())
{
//锤头为红色,且火球最大时,发射火球
if (Color.red == GameObject.Find("top1").GetComponent<Renderer>().material.color & scale == )
{
//发射成功后锤头变白
GameObject.Find("top1").GetComponent<Renderer>().material.color = Color.white;
GameObject.Find("top2").GetComponent<Renderer>().material.color = Color.white;
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
//先把火球缩小,然后随着scale值逐渐变大
FB.transform.localScale = new Vector3(0.0275f * scale, 0.025f * scale, 0.0175f * scale);
//这是在给火球确认射击方向。如果这个放FixedUP下面,就会导致火球飞出去后,前进方向会跟着镜头变
FB.transform.LookAt(aim.transform.forward * );
//为了营造【螺旋丸】的效果,预制体rigidbody里的FreezeRotation都要解锁;但在成功发射火球时要锁上,不然就会乱飞。
FB.GetComponent<Rigidbody>().freezeRotation = true;
Debug.Log("发射火球成功");
} //其它情况,火球大小变为0
else
{
scale = ;
} }
//左键施法
else if (Input.GetMouseButton())
{ //点击右键时左键一直在按==左右键一直按
if (Input.GetMouseButton())
{
//实例化一个小火球
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
FB.transform.localScale = new Vector3(0.275f, 0.25f, 0.175f);
//火球变成脚本附着物的子物体
FB.transform.parent = this.transform;
//我tmd也不知道为什么球会自己在那疯狂转....但是效果很像螺旋丸- -,所以就将错就错吧...我怀疑是因为【物体有体积,同一个地方出现会顶前面出现的乱飞】导致的
Destroy(FB, 0.01f);
}
else if (cd == )
{
//实例化火球
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
//火球变成脚本附着物的子物体
FB.transform.parent = this.transform;
FB.transform.localScale = new Vector3(0.0275f * scale, 0.025f * scale, 0.0175f * scale);
Destroy(FB, 0.1f);
}
else if (cd < )
{
Debug.Log("cd<0");
}
else if (cd > )
{
cd -= ;
scale += ;
GameObject.Find("Hammer1").transform.Rotate(, , -0.5f);
//实例化火球
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
//火球变成脚本附着物的子物体
FB.transform.parent = this.transform;
//先把火球缩小,然后随着scale值逐渐变大
FB.transform.localScale = new Vector3(0.0275f * scale, 0.025f * scale, 0.0175f * scale);
//我tmd也不知道为什么球会自己在那疯狂转....但是效果很像螺旋丸- -,所以就将错就错吧...我怀疑是因为物体有体积同一个地方出现会顶前面出现的乱飞
Destroy(FB, 0.1f);
}
else if (cd == )
{
//什么都不发生
} }
//右键集气
else if (Input.GetMouseButton())
{
//右键一直在按时点击左键
if (Input.GetMouseButton())
{
//实例化一个小火球
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
FB.transform.localScale = new Vector3(0.275f, 0.25f, 0.175f);
//火球变成脚本附着物的子物体
FB.transform.parent = this.transform;
//我tmd也不知道为什么球会自己在那疯狂转....但是效果很像螺旋丸- -,所以就将错就错吧...我怀疑是因为【物体有体积,同一个地方出现会顶前面出现的乱飞】导致的
Destroy(FB, 0.01f);
}
//cd不能大于50
else if (cd > )
{
cd = ;
}
//集气满时,锤头变红,scale=0
else if (cd == )
{
scale = ;
GameObject.Find("top1").GetComponent<Renderer>().material.color = Color.red;
GameObject.Find("top2").GetComponent<Renderer>().material.color = Color.red;
}
else if(cd >= )
{
cd += ;
GameObject.Find("Hammer1").transform.Rotate(, , 0.5f);
}
else if (cd < )
{
Debug.Log("cd<0");
} }
//左右键一起按 else if (Input.GetMouseButton() & Input.GetMouseButton())
{
//实例化一个小火球
FB = Instantiate(Fireball, transform.TransformPoint(2.578875f, , 0.01999918f), Fireball.transform.rotation);
FB.transform.localScale = new Vector3(1f , 1f , 1f );
//火球变成脚本附着物的子物体
FB.transform.parent = this.transform;
//我tmd也不知道为什么球会自己在那疯狂转....但是效果很像螺旋丸- -,所以就将错就错吧...我怀疑是因为【物体有体积,同一个地方出现会顶前面出现的乱飞】导致的
Destroy(FB, 0.01f);
Debug.Log("左右键一起按");
} //松开左键时右键仍在按
else if (Input.GetMouseButtonUp())
{
scale = ;
}
} void Update()
{
skillChibukaTensei();
//【Fireball】如果不放这,鼠标松开这个事件有时候会检测不到,造成技能释放失败
skillFireball();
//只有火球发射成功了,下面的代码才能执行一次。注意,是一次!火球没成功的帧,下面是无法执行的,因为没成功就不会有长时间存在的Fireball(Clone)对象(临时的那种,是0.01秒消失,基本就是一帧不到就没了)
GameObject.Find("Fireball(Clone)").transform.Rotate(,,);
GameObject.Find("Fireball(Clone)").transform.Translate(, , 0.2f);
Destroy(GameObject.Find("Fireball(Clone)"),);
}
void FixedUpdate()
{ }
}

注意这个技能脚本会有报错,但这是正常的

我还是第一次写出一个【报错】但是正常的程序。

之所以报错,是因为void Update()函数里的Fireball(Clone)是只有【火球释放成功】才会出现的物体,所以代码里你是找不到这个物体的,就报错了

但恰恰就是这样才能实现这个【火球成功释放往前射击】的效果。

我自己目前没有能力让程序不报错也能实现这一点....所以先这样吧

【fireball】这个技能的脚本花掉了我一天的时间

主要问题是逻辑上,一开始我是按玩家可能出现的操作进行分类写多个if来判断

后来越写越乱....我冷静了一下,发现这个角度去写不对,肯定有一个角度更便捷也更准确

后来我想到了,从我提供给玩家的按键出发即可:

要么是左键,要么是右键。剩下的可能结果,都是出自这两个中,把if丢进这两个大类里就好了!

虽然改进了角度,但还是需要实际测试,才慢慢完善了后面的多个else if内容。

肯定还有疏漏之处,毕竟这个技能是整个demo的核心,我还要继续完善这个技能脚本的。

Unity笔记(4)自学第四、五天的更多相关文章

  1. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  2. 孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务

    孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第五天.今天的感觉是,mongoDB数 ...

  3. 孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库

    孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第四天.今天的感觉是,mongoDB数据 ...

  4. 孤荷凌寒自学python第五十五天初识MongoDb数据库

    孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...

  5. 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录

     孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  6. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  7. 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase

    孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...

  8. 孤荷凌寒自学python第五天初识python的列表

    孤荷凌寒自学python第五天 列表 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 粗俗地区分列表,可以这样理解,定义或print列表后显示时,列表中的各元素都是用一个方括号[]括起来的. ...

  9. HMM 自学教程(五)前向算法

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  10. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

随机推荐

  1. ASO--简单了解

    ASO是“应用商店优化”的简称.ASO(App Search Optimization)就是提升你APP在各类APP应用商店/市场排行榜和搜索结果排名的过程. 类似普通网站针对搜索引擎的优化,即SEO ...

  2. MySql InnoDb还原工具

    通过任意文件下载找到了mysql的备份,表类型是独享式innodb,由一个frm文件和一个ibd文件组成. 本以为直接复制到本地的mysql数据目录中即可恢复数据,但在查询时却发现并不如所愿: mys ...

  3. POST 请求静态文件 响应405

    使用post方式请求js.html这样的静态文件一般的web服务器都会返回405 Method Not Allowed. 我测试用的web服务器用的是IIS(windows10+IIS10),理论上来 ...

  4. 常见网络摄像机默认使用的端口,RTSP地址

    品牌 默认IP地址 WEB RTSP HTTPS 数据 ONVIF   海康威视 192.168.1.64/DHCP用户名admin 密码自己设 80 554 443 8000 80   大华 192 ...

  5. 【iOS系列】- iOS吸附效果的实现 之 UICollectionView的使用全解

    [iOS系列]- iOS吸附效果的实现 之 UICollectionView的使用全解 UICollectionView可以做很多的布局,在iOS开发中较为重要,所以这里就以实例来讲解UICollec ...

  6. PyTorch 60 分钟入门教程

    PyTorch 60 分钟入门教程:PyTorch 深度学习官方入门中文教程 http://pytorchchina.com/2018/06/25/what-is-pytorch/ PyTorch 6 ...

  7. Django模板语言(二)

    1,装饰器:在不改变原函数的调用方式情况下为原函数增加一些功能(遵循开放封闭的原则) def outter(fn): def inner(*args, **kwargs): # 可以在执行函数前执行一 ...

  8. YTU 2922: Shape系列-8

    2922: Shape系列-8 时间限制: 1 Sec  内存限制: 128 MB 提交: 172  解决: 99 题目描述 小聪又想借用小强的Shape类了,但是不巧的是小强去考英语四级去了,但是小 ...

  9. action 与 action 之间的跳转

    这个要看你的两个action是不是在通一个package下了 <!-- 相同package下调用其它action --><action name="loginUser&qu ...

  10. 使用VirtualBox虚拟机搭建局域网

    参考资料: http://www.awaimai.com/995.html https://my.oschina.net/cofecafe1/blog/206535 最近公司局域网网络改造,在改造前已 ...