1.贴图处理:
Texture Type选择sprite (Mode表示单张和重复)->sprite Editor->弹出窗口->silce type先选择automatic裁剪合适的大小然后换成grid by cell size换成合适的尺寸
2、生成动画
将一组图片全部拖进Hierachy面板
会在Project中生成两个文件,分别存进动画和动画控制文件夹
3、键盘控制移动
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * speed * Time.deltaTime,Space.World); //right表示右方向
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * speed * Time.deltaTime,Space.World);
4、控制转向
public SpriteRenderer sr;
public Sprite[] tankSprite;
//通常在awake()里获取引用
void Awake()
{
sr = GetComponent<SpriteRenderer>();
}
if (h < 0)
{
sr.sprite = tankSprite[3];
}
else if(h > 0)//这里必须加判断条件,不能直接用else,否则不按键的时候会自动默认为朝上
{
sr.sprite = tankSprite[1];
}
if (h != 0) //同时按下两个键不会斜着只会按照一个方向
{
return;
}
5、设置碰撞条件
- 条件1:碰撞双方都有触发器
- 条件2:碰撞一方有刚体组件,最好是运动的你那个
防止撞墙翻转:
防止撞墙抖动:放进 FixedUpdate ()方法,时间间隔是Time.fixedDeltaTime,让渲染的受力均匀
6、角色死亡和无敌状态设置
死亡方法
void Die()
{
//如果是无敌状态直接返回
if(isProtected == true)
{
return;
}
Instantiate(exposion, transform.position, transform.rotation);
Destroy(gameObject);
}
无敌状态设置
吧护盾放在玩家下面,脚本获取引用的时候一定要拖这里不能拖预制体的,然后点击apply。
//在update()方法里
if (isProtected)
{
//如果处于无敌状态,设置动画,保护时间减少
shiled.SetActive(true);
protectTime -= Time.deltaTime;
//保护时间消失,动画消失,无敌状态消失
if (protectTime <= 0)
{
isProtected = false;
shiled.SetActive(false);
}
}
7、设置子弹cd
//初始时间设为0.4,调用attack后清零,完成时间累加后才能再次调用
if (deltaTime >= 0.4f)
{
Attack();
}
else
{
deltaTime += Time.deltaTime ;
}
8、敌人脚本的转向用一个定时器来控制,方法类似于冷却cd
tips:
- 选中要格式化的代码按ctrl+k然后再按ctrl+f
- ctrl+N 新建场景
9、碰撞器和触发器的区别
碰撞器:OncollisonEnter2d(Collision2D collision)
触发器:OnTriggerEnter2D(Collider2D collision)
有一方是触发器,就要用触发检测,collision参数返回的是脚本挂载的物体碰到的物体。
对于碰撞时是否会发出碰撞函数(或触发信息),可以见下表。碰撞信息是指OnCollisionEnter() OnCollisionStay()和 OnCollisionExit()这三个函数,而触发信息指的是OnTriggerEnter() OnTriggerStay和OnTriggerExit()三个函数。