Unity笔记(4)自学第四、五天
主要是移动脚本和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)自学第四、五天的更多相关文章
- 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档
孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...
- 孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务
孤荷凌寒自学python第五十九天尝试使用python来读访问远端MongoDb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第五天.今天的感觉是,mongoDB数 ...
- 孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第四天.今天的感觉是,mongoDB数据 ...
- 孤荷凌寒自学python第五十五天初识MongoDb数据库
孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...
- 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录
孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...
- 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录
孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...
- 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase
孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...
- 孤荷凌寒自学python第五天初识python的列表
孤荷凌寒自学python第五天 列表 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 粗俗地区分列表,可以这样理解,定义或print列表后显示时,列表中的各元素都是用一个方括号[]括起来的. ...
- HMM 自学教程(五)前向算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库
孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...
随机推荐
- pat(A)1041. Be Unique(哈希)
1.链接:点击打开链接 2.代码: #include<cstdio> #include<iostream> #include<cstring> using name ...
- cocos2d-x中锚点设置及定位方式
问题 在cocos2d演示样例代码HelloCpp中,为什么要将CCMenu设置位置到CCPointZero,即使CCMenu的锚点是在(0.5, 0.5)? 回答 这是由于CCMenu没有使用锚点进 ...
- HDFS集中式缓存管理(Centralized Cache Management)
Hadoop从2.3.0版本号開始支持HDFS缓存机制,HDFS同意用户将一部分文件夹或文件缓存在HDFS其中.NameNode会通知拥有相应块的DataNodes将其缓存在DataNode的内存其中 ...
- XMU 1607 nc与点对距离 【线段树】
1607: nc与点对距离 Time Limit: 5000 MS Memory Limit: 512 MBSubmit: 60 Solved: 8[Submit][Status][Web Boa ...
- Lightoj 1003 - Drunk(拓扑排序)
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...
- nginx 静态网站配置
/************************************************************************************** * nginx 静态网站 ...
- I.MX6 查看baudrate确定是否被其他程序占用
/*********************************************************************** * I.MX6 查看baudrate确定是否被其他程序 ...
- bzoj4811 [Ynoi2017]由乃的OJ 树链剖分+位运算
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4811 因为位运算的结果有可合并性,所以可以树链剖分,线段树维护: 细节很多,特别要注意从左往 ...
- OC:基础总结
OC面向对象的编程语言思想 类与对象.继承与实例化.属性点语法.内存管理.字符串.可见度. 类是一组具有相同特征和行为的事物的抽象 OC的与C相比所具有的新的特点: 定义新的类.类的实例和方法.方法的 ...
- Java多线程系列九——Atomic类
参考资料:https://fangjian0423.github.io/2016/03/16/java-AtomicInteger-analysis/http://www.cnblogs.com/54 ...