赞
踩
今天开始学习Unity
使用的Unity版本
学习视频是BiliBili的Unity2D官方入门教程Ruby Adventure 完整版
首先是配置环境,需要关联Unity和VSCode
参考文章
安装了如下俩插件
快捷键Q–Hand(手形)工具 可以平移整个Scene视图
快捷键W–Translate(移动)工具 移动所选择的游戏对象
Ctrl+N–New Scene 新建场景
代码块上一行/// 注释
Ctrl+6 打开动画面板
其他可以参考[快捷键文档]
(https://blog.csdn.net/qq_35867189/article/details/126302974)
以这张图片为例, 初始并未切割为瓦片
操作如下
人物精灵需添加刚体
需要把重力改为0,不然会下坠
需要冻结z轴旋转,不然碰撞后会旋转
之后再添加一个Box Collider 2D组件,可以编辑碰撞盒大小和位置
在Tilemap节点下添加碰撞组件
不需要碰撞的瓦片,直接在瓦片资源配置
但是如图,池塘里的每一块瓦片都有一个碰撞盒,很消耗性能,可以在Tilemap再添加一个Composite Collider 2D组件,并在碰撞盒组件下选择合并选项,合并在一起的碰撞盒
需要注意,添加合并碰撞组件后会自动添加刚体组件,需要将刚体设置为静态的,不然一碰就地震了hhh
A: 修改层级排序设置(Edit-Project Settings-Graphics)
修改为以y轴进行排序
想修改树的锚点为树根,死活找不到
A: 需要直接在图片资源上修改锚点 +_+
改完之后还需要重新设置一下排序轴,不知道为啥
是因为刚体进行物理运动,碰撞时与精灵本身移动会产生误差,因此精灵和刚体不停进行位置矫正,导致抖动
A:使用刚体位置来控制移动
// Vector2 position = transform.position;
Vector2 position = rbody.position;
position.x += moveX * speed * Time.deltaTime;
position.y += moveY * speed * Time.deltaTime;
// transform.position = position;
rbody.MovePosition(position);
改完时候性能很不好,待解决…
先要下一个Cinemachine包(Window-Package Manager-Cinemachine), 可以自动控制相机
人物走到边界时就会看到边界外边,希望相机到边界就不要移动了
A: 在跟随相机中添加相机边界组件(Cinemachine Virtual Camera-Add Extension-Cinemachine Confiner)
再添加一个空节点,添加自定义形状的碰撞盒组件Polygon Collider 2D,将盒子覆盖整个地图上(如图)
将这个节点拖动到相机边界组件Bounding Shape 2D属性上
就Ok了
写了一个代码模板
{ "Initial Code": { "prefix": "ucs", "body": [ "///<summary>", "///Author: Qiu", "///Describe: $1", "///</summary>", "", "using System.Collections;", "using System.Collections.Generic;", "using UnityEngine;", "", "public class $TM_FILENAME_BASE : MonoBehaviour", "{", "\tvoid Start()", "\t{", "\t\t$2", "\t}", "\tvoid Update()", "\t{", "", "\t}", "}", ], "description": "cocos creator common template" } }
吃草莓
/// <summary>
/// 碰撞检测,开始碰撞时回调
/// </summary>
/// <param name="other">碰撞物体</param>
void OnTriggerEnter2D(Collider2D other)
{
PlayerController pc = other.GetComponent<PlayerController>(); // 检测是否有PlayerController脚本
if (pc != null)
{ //是和任务碰撞的
Debug.Log("把它吃掉!");
}
}
进入陷阱
当人物进入陷阱中不走动时,此时不会进行碰撞中回调,需要在任务刚体组件中Sleeping Mode选择Never Sleep
/// <summary>
/// 碰撞中回调 每一帧调用一次
/// </summary>
/// <param name="other">碰撞物体</param>
void OnTriggerStay2D(Collider2D other)
{
PlayerController pc = other.GetComponent<PlayerController>();
if (pc != null)
{
pc.changeHp(-1);
Debug.Log("啊!当前血量:" + pc.myCurHp);
}
}
想要将陷阱的范围变大,直接拉回变形
A: 需要先在陷阱图片中改变属性
再改变陷阱节点的渲染模式
最后用Rect Tool就可以拉大范围了
想编辑动画,但按钮都置灰了
A: 需要选中所编辑的节点
A: 动画面板x按钮下方的三个点,选择Show Sample Rate
这块没太懂。。
添加节点-Effect-Praticle System
各种属性可以调节 比较多。。。慢慢了解吧
A: 可能开启时间太长了?重启下VSCode就好了
添加背景音乐
添加音效
private AudioSource audioS; //音效组件
void Start()
{
audioS = GetComponent<AudioSource>();
}
/// <summary>
/// 播放音效
/// </summary>
public void AudioPlay(AudioClip clip)
{
audioS.PlayOneShot(clip);
}
引擎666
给机器人添加了脚步声的音效,正常播放的话就会很吵
在音效组件下设置声音传播范围
但此时听不到声音,因为Audio Listener目前是挂载在主相机下的,而主相机在z轴-10的位置
所以解决办法是:在关闭主相机Audio Listener组件,在主相机下新建一个空节点,挂载上Audio Listener组件
OK~~
弹幕里说挂载在主角下更好??
在File-Build Setting打开窗口
设置完成后点击Build按钮,选中新建build文件夹,就等编译完成啦
但还是会有一些问题。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。