13466人加入学习
(76人评价)
Unity最全最完整的零基础入门教程-Luna's Fantasy(露娜的大冒险)

制作完成于2023年8月1日,基于Unity2023.1.1

价格 免费

Vector2{"矢量"是一个可以改变对象位移的类型,拥有可以改变2个值的能力,因为我们是2D游戏,只有2个可以位移的量,即XY轴所以用Vector2}

position"位置"这里指的是Unity上面的这个这个position{位置}就是Transform下的第一个这个{位置}

Vector2 position = transform.position中

Vector2 poition调用了vector2类型指定了Unity中的position的x y值{再次强调2D游戏没有z轴所以只有xy两个变量}

后面的 = transform.position指的是将这指定的xy两个值赋予在transform.positiopn上面

position.x = position.x + 0.1f;个人推断是指设置这个position.x的值{这个是x轴位移的值}不断加0.1f

最后面的tansform.position = poition;是将position.x这个不断加1的变化名称赋值给transform.position 这里联系第一行的内容我们能知道Vector2 position是transform.position赋值的

所以老师靠着位置x不断+1的循环实现了Luna在x轴上的位移.

[展开全文]

关键:在副对象上面重新建立了一个新的xy坐标系,在此基础上进行相关对象的位移计算

[展开全文]

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f; // 移动速度

    private Rigidbody2D rb;

    void Start()
    {
        // 获取 Rigidbody2D 组件
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        // 获取水平和垂直输入(使用键盘的 WASD 或方向键)
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        // 计算移动速度
        Vector2 moveVelocity = new Vector2(horizontalInput, verticalInput) * moveSpeed;

        // 应用移动速度到 Rigidbody2D
        rb.velocity = moveVelocity;
    }
}
 

[展开全文]

动画组件 -> Animator

动画控制器 ->Animator Controller

新建动画控制器 -> project -> 新建Animators 文件夹 -> 新增Animator Controller

绑定动画控制器 -> 选定对象 -> 选择添加的动画组件(Animator) -> 将Animator Controller 拖拽到Animator 下的Controller上

动画制作窗口 Animation: Window -> Animation -> Animation

动画状态机窗口 Animation: Window -> Animation -> Animation

[展开全文]

可以在2D游戏物体中的SpriteRender和地形TilemapRender组件中的Order in layer属性中设置层级的大小。值越大,越后渲染,值越小,越先渲染。值大的游戏物体会覆盖值小的游戏物体。

[展开全文]

控制currentHealth这个值可以访问到被Potion但是不能被修改 -> 使用属性来封装一下

[展开全文]

if 语句和else语句

布尔类型

bool

private bool isLuna = true;

表是非

 

关系运算符 > < =

jinxingqiantaoxunhuan

[展开全文]

销毁游戏物体方法 : Destory(Obj obj)  

gameObject 当前对象

[展开全文]

触发器: 前置 双方都有Box Collider 2D组件 被出发的对象中的Box Collider 2D组件勾上isTrigger; 

触发器方法: OnTriggerEnter2D(Collider2D collider2D)

Collider2D : 触发对象

相关方法 : 

OnTriggerEnter2D(Collider2D collider2D) 触发

OnTriggerStay2D(Collider2D collider2D) 持续

OnTriggerExit2D(Collider2D collider2D)  退出

[展开全文]

被触发挂在脚本游戏物体销毁

 

Destroy(gameObject)

 

反向操作,销毁触发游戏物体

 

Destroy(collision.gameObject);

 

报空问题的原因:

不论哪个游戏对象碰到被触发器都会进行触发检测,但是获取组件的语句是特定的:

LunaController lunaController = collision.GetComponent<LunaController>( );

该游戏对象身上没用这个组件时,所以会报错,所以要写一步判空的语句

[展开全文]

如何从触发器游戏物体脚本访问到被触发物体身上挂在的脚本

原因:HP是luna的属性,在LunaController脚本上定义,但是血瓶会帮助luna恢复这个值,从而在吃到血瓶时形成了两个脚本的联动

 

方法:

被触发的物体在触发器物体中定义为collision

通过collision访问就可以,赋值给新变量,该变量类型就是触发物体的标签名即可

LunaController lunaController = collsion.GetComponent<LunaController>( );

 

GetComponet只能获取自己身上的组件

由触发器访问到的collision

 

[展开全文]

触发检测

双方碰撞器 + 运动方刚体

 

事件/机关 -> 另外一个事件/功能

三个触发器方法

private void

OnTriggerEnter2D(Collider2D collision)

OnTriggerStay2D(Collider2D collision)

OnTriggerExit2D(Collider2D collision)

黄色为unity内置方法

[展开全文]

关于赋值的顺序 -> 后知后觉

全局类里 -> 最先调用,会被覆盖掉

面板里 -> second

start方法里 -> 最后一个调用

 

定一原则

 

[展开全文]