Unity2D官方入门教程 Ruby' Adventure 完整版~

作者: 长夜同学_那个谁分类: 野生技能协会 发布时间: 2019-05-28 11:45:06 浏览:561920 次

Unity2D官方入门教程 Ruby' Adventure 完整版~

喵子vs小哼:
“首先打开vs2019(或你用的那版)->工具->获取工具和功能->单个组件(到游戏那一栏)->Visual Studio Tools for Unity(勾选上)->单击“修改”; 然后打开unity->Edic->Preferences->External Tools->External Script Editor -> 找到vs编辑器的exe选中“确定”; 再次打开时cs脚本时会让重载,选中重载就好了。” 以上是我搜到的大佬的回答,亲测可用,解决了环境配置的问题,不要卡在这里了。

【回复】啊这,我刚下unity闲的时候打开vs看见只能创建c++项目,以前写的winFrom项目运行不了,我就百度怎么删除用不到的组件和下载组件,顺手我就把unity勾上了,没想到帮自己避了个坑哈哈
shang花白夏:
1,《如何使用unity开发坦克大战》:av29751762 2,《如何使用unity制作塔防游戏》:av29784743 3,《如何使用unity开发古迹探险》:av29790162 4,《如何使用FairyGUI》:av29751288 5,《如何使用unity开发甜品消消乐》:av29791086 6,《如何使用unity开发愤怒的小鸟》:av35565116 7,《如何使用unity开发吃豆人》:av36103586 8,《如何使用unity开发捕鱼达人》:av36334499 9,《如何使用unity开发换装系统》:av38063048 10,《如何使用EasyTouch5插件》:av36956262

十一捉一:
up你做的真的很棒(๑•̀ㅂ•́)و✧!我真是太喜欢这种模仿着学习再自己进行一些改进的学习方式了。等我全部看完了把我自己做的录个视频发上来,up你要来看哦~(虽然可能还需要很久,毕竟我现在很摸鱼。而且我差不多看你的视频一两分钟就要自己捣鼓半个小时再继续看。)

【回复】加油,现在学习的进度虽然慢,但是只要坚持下去,会越来越熟练。发了视频一定去看。
【回复】回复 @太古白话诺十一 :好哒!
赶画中的十三:
玩家脚步声可以直接添加音频组件,通过判断是否移动来开关音频播放 AudioSource ads; void update(){ float moveX = Input.GetAxisRaw("Horizontal");//水平方向 A:-1 ,D: 1. 无输入返回0. float moveY = Input.GetAxisRaw("Vertical");//垂直方向 W:1,S:-1.无输入返回0. Vector2 moveVector = new Vector2(moveX, moveY); if (moveVector.x != 0 || moveVector.y != 0) { lookDircetion = moveVector; } animplayer.SetFloat("Look X", lookDircetion.x); animplayer.SetFloat("Look Y", lookDircetion.y); animplayer.SetFloat("Speed", moveVector.magnitude);//magnitude:移动量 Vector2 position = rbody.position;//获取玩家当前自身位置。 position += moveVector * Speed * Time.deltaTime; if (moveX != 0 || moveY != 0 )//判断是否在移动 { ads.enabled = true;//在动,播音乐 } else { ads.enabled = false;//没动,关掉 } }

【回复】回复 @洋葱头盖1 :空指针是因为没有用getcomponent获取audiosource组件
【回复】报错,空指针 NullReferenceException: Object reference not set to an instance of an object UnityEditor.Graphs.Edge.WakeUp () (at <1bfd5359178446f5b1ac53f68c0a5db0>:0) UnityEditor.Graphs.Graph.DoWakeUpEdges (System.Collections.Generic.List`1【T】 inEdges, System.Collections.Generic.List`1【T】 ok, System.Collections.Generic.List`1【T】 error, System.Boolean inEdgesUsedToBeValid) (at <1bfd5359178446f5b1ac53f68c0a5db0>:0) UnityEditor.Graphs.Graph.WakeUpEdges (System.Boolean clearSlotEdges) (at <1bfd5359178446f5b1ac53f68c0a5db0>:0) UnityEditor.Graphs.Graph.WakeUp (System.Boolean force) (at <1bfd5359178446f5b1ac53f68c0a5db0>:0) UnityEditor.Graphs.Graph.WakeUp () (at <1bfd5359178446f5b1ac53f68c0a5db0>:0) UnityEditor.Graphs.Graph.OnEnable () (at <1bfd5359178446f5b1ac53f68c0a5db0>:0)
我是猪中007:
第八讲,设置陷阱,我觉得up主用无敌时间不恰当,因为无敌时间一般是玩家重生获得一次性的,而up呈现的是玩家走进陷阱,两秒掉一滴血,我觉得可以用步进计时的概念来理解,即两秒计时,掉一滴血 将invincibleTime 理解为步长/buchang 将invincibleTimer理解为钟表,即计时倒计时/zhongbiao 将Isinvincible理解为中标开关,即是否开始计时/kaiguan update(){ //===============检测开关是开还是关,如果是开则按照步进计时,一个步进结束关闭开关=================== if (kaiguan == true) { zhongbiao -= Time.deltaTime; if (zhongbiao < 0) { kaiguan = false; } } } public void ChangeHealth(int amount) { //==========检测走进了陷阱,先检测开关是否打开,如果打开,减少血量,计时,直到下一次开关打开 if (amount<0) { if (kaiguan ==true) { return; } kaiguan = true; zhognbiao = buchang; } CurrentHealth = Mathf.Clamp(CurrentHealth + amount, 0, MaxHealth); } 刚理解的时候我发现update和changehealth之间貌似没什么关系, 但别忘记在第一次执行changehealth之后开关会再次打开,并赋予步长,这就是两者之间的关系。

【回复】我觉得up主的讲法挺好的。一般受伤之后不就是会有硬直吗,那段时间不就是无敌的吗?invincibleTime是需要你自己设置的无敌时间,invincibleTimer是一个计时器,isInvincible代表是否无敌的状态。我觉得挺好理解的,不用特意改成其他的名称。反倒你这个,“走进了陷阱,检测开关是否打开”。???我觉得不太符合逻辑。说句不好听一点的话,难道受伤是可以自己控制的吗?“我开启了我的受伤开关,我可以受到伤害了。然后我受到伤害了,好疼,我要把我的受伤开关关掉2秒钟,2秒之后再好好感受疼痛吧~”这个样子?
【回复】用计时器我觉得不好,因为连续性的伤害,用这个无敌肯定不合适,我多加了伤害类型的判断,就很容易了。
【回复】回复 @十一捉一 :看个人理解吧,我把三个参数换成定时理解也可以啊,实现的效果也是每隔几秒掉一滴血,没毛病。😁
smile_god:
UP我跟着写为什么控制台没有输出log void OnTrigerEnter2D(Collider2D other) { PlayerController pc = other.GetComponent<PlayerController>(); if (pc != null) { Debug.Log("123"); } } }

【回复】不是因为trigger打错成triger了嘛[思考]
【回复】UnityEngine.Debug.Log(“123”);本人不懂代码,我也和你出了一样的问题,我把代码改成这样,就可以了。具体什么原因,由于代码小白完全不懂。
【回复】你的脚本没绑定到角色上
StupidSeaside:
我写完这个课设了,有需要的同学可以看我的博客[打call] https://blog.csdn.net/weixin_43673589/article/details/106577768

【回复】另外,请问大佬有没有写这个案例的发射子弹、显示血条的具体代码和教学内容?如果有的话,给一个链接吧,谢谢了。
【回复】回复 @深南大道10000号 :感谢大佬!
此间唯笑:
唔,登录界面怎么做?直接进入游戏有点突然啊

【回复】我想知道怎么退出游戏[笑哭]
毅力帝帝蒂:
角色动画操作这一块从官方教程复制过来的: (仅供参考) 单击Moving 和Idle 之间的向下箭头,然后查看Inspector 以查看该Transition 的设置: 大多数设置(如图表上的条形图)对于可以混合动画的3D 非常有用。在2D中,只有一对对我们有用。 请注意,取消选中“ 退出时间” 。这意味着移动动画不会等到状态机进入空闲动画之前完成,它会立即改变。 最重要的部分是底部的条件部分。一个转型将发生两个情况: 如果没有条件,则转换将在动画结束时发生。在这里,它无法工作,因为我们的动画是循环的,但是如果你看一下从Hit 到Idle 的转换,那就是正在发生的事情:勾选退出时间,并且没有设置条件,这意味着命中动画将播放一次然后转换回空闲状态。 或者,我们可以根据您的参数设置条件。这里,如果机器人的速度小于0.1,那么状态机将从移动到空闲。 您可以单击其他过渡以查看它们并查看它们的工作方式。 您可能想知道为什么Hit 参数在Parameters 列表中看起来不同。那是因为它不是浮动的。被击中不是像运动或速度那样的“数量”,而是一次性事件。 这种类型的参数称为“触发器” 。如果您使用该参数作为Transition 的条件,则如果从代码激活Trigger ,则会发生Transition (在我们的情况下,当角色被击中时)。

只收狂徒:
为什么在create中没有tile选项,而且package manager的tilemap editor也已经安装了@诺十一2021

【回复】兄弟,直接接着做就行,后面发现不需要这一步
转身的一瞬萧条的一生:
https://learn.unity.com/tutorial/main-character-and-first-script?language=en&projectId=5c6166dbedbc2a0021b1bc7c#5cda8a84edbc2a05c8687534 原官方教程在这,这个视频教程的p2跟着做一下,然后看官方教程学习更好。

【回复】up主的内容少了一个创建ruby的scripts。所以建议官方教程和这个对照着看。
【回复】安装的话 安装 unity Hub 编辑器选择vs code 因为vs太卡了。 然后将unity默认编辑器换成 vs code
【回复】回复 @转身的一瞬萧条的一生 :[OK]
Jack_Boyd:
可不可以公布一下脚本的源代码[doge][doge][doge]@太古白话诺十一

辽宁第一狠人:
我在PlayerController脚本中设置完rBody.MovePosition(position)后,角色的移动速度比之前设置的transform慢了很多,我的speed是5没改过,咋回事呀

【回复】用这个: moveX = Input.GetAxisRaw ("Horizontal"); moveY = Input.GetAxisRaw("Vertical"); transform.Translate(moveX * Time.deltaTime* ruby_Speed, moveY * Time.deltaTime * ruby_Speed, 0); 上面的写法是最常用的,position
【回复】因为刚体移动是有摩擦的,所以最好写在FixedUpdate里,会好很多,虽然会掉帧
【回复】回复 @lion73 :https://www.jianshu.com/p/004c3e00aeec
梅花六七:
自带的计时器实现无敌比较好管理 public abstract class Character : Mover { // 基础属性 private int maxHealth = 100; private int currentHealth; private int attackValue = 20; private int defenseValue = 5; // 无敌标记 private bool isInvincible = false; // 无敌时间 private float invincibleTime = 2f; // 攻击 public virtual void Attack(Character npc) { // 无敌检测 if (!npc.IsInvincible) { npc.Attacked(this); } } // 被攻击 protected virtual void Attacked(Character npc) { int hurt_value = Mathf.Max(npc.attackValue - defenseValue, 1); currentHealth = Mathf.Clamp(currentHealth - hurt_value, 0, maxHealth); // 开启无敌 isInvincible = true; // 接触无敌计时 Invoke("UnInvincible", invincibleTime); } // 解除无敌 protected void UnInvincible() { isInvincible = false; } }

【回复】Attacked 和 Attack两个方法 Attacked 保护起来 防止外部调用 比如两个继承自Character的类A和B A攻击B时只需要A.Attack(B) 如果要设置反伤之类的想法可以在Attacked内操作
安都奕雨:
我原原本本地跟着up的步骤做可是相机边界是以照相机中心不能越过polygon边界而不是相机边缘不能越过该边界,即还是会超出设定的边界。我观察了我并没有confine screen edge选项,请问Up是修改了cinemachine confiner的脚本吗?

【回复】回复 @送豆腐的店员 :调整了,但还是不行
【回复】你解决了嘛我有那个选项还是没有效果
【回复】请问你改好了吗我也是咋找找不到
夏佑beta:
P8第一次写脚本的时候有个PlayerController在VS2017里面没有啊啊啊啊 怎么办 求大神指教[tv_流泪]

【回复】那个playercontroller是自己创建的。具体方法在角色移动那一P里。
【回复】回复 @送豆腐的店员 : 感谢!我被那一步卡蒙了,看了你的解释立马改好了!谢谢[脱单doge]
【回复】重新学习,已经解决,谢谢各位
神户柳一:
不理解了 using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public float speed = 5f;//移动速度 // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { float moveX = Input.GetAxiRaw("Horizontal"); float moveY = Input.GetAxiRaw("Vertical"); Vector2 position = transform.position; position.x += moveX * speed * Time.deltaTime; position.x += moveY * speed * Time.deltaTime; transform.position = position; } } 17行29出现字符文本中的字符太多 18行29出现字符文本中的字符太多 这怎么解决我的C# 没有标红 怎么unity怎么就报错了

【回复】float moveX = Input.GetAxisRaw("Horizontal"); float moveY = Input.GetAxisRaw("Vertical"); GetAxiRaw应该加个s

unity2D 教学视频 野生技术协会 经验分享 入门教程 独立游戏

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!