float类型的变量?
即小数变量,0.1是不能使用的,要加f代表float{浮点型}
而整形不用加f\
住:f是float的缩写
float类型的变量?
即小数变量,0.1是不能使用的,要加f代表float{浮点型}
而整形不用加f\
住:f是float的缩写
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坐标系,在此基础上进行相关对象的位移计算
T
qtgu:开箱密码
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;
}
}
预制体
ctrl+z回滚
动画组件 -> 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) 退出
边界值数学方法 : Mathf.Clamp(now,min,max)
被触发挂在脚本游戏物体销毁
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内置方法