个人做单机游戏的总结笔记
——类似元气骑士的2.5d游戏
移动
玩家人物移动方式:
//键盘输入控制上下左右(后期用摇杆可以不用这种方式)
horizontal = Input.GetAxisRaw("Horizontal");
vertical = Input.GetAxisRaw("Vertical");
if (Mathf.Abs(horizontal) > 0.01 || Mathf.Abs(vertical) > 0.01)
{
//记录方向
idleH=horizontal;
idleV=vertical;
//改变人物位置,moveSpeed为人物移动速度
transform.Translate(new Vector3(horizontal * moveSpeed* Time.deltaTime, vertical * moveSpeed* Time.deltaTime, 0),Space.World);
}
同样方式,做敌人自动移动方式(可以加上一些检测能使得敌人更加“精明”):
//用随机数来控制上下左右
if(IsPlayer == false)
{
horizontal = Random.Range(-1, 2);
vertical = Random.Range(-1, 2);
}
//改变敌人的位置
enemyPos.transform.Translate(new Vector3(horizontal * moveSpeed * Time.deltaTime, vertical * moveSpeed* Time.deltaTime, 0), Space.World);
人物攻击
近身攻击
可以在武器加触发器(武器大小要比较统一)或者在人物身前加触发器(要用代码控制使跟人物一起移动选择)
- 个人用第二种方式(素材在网上找比较乱,所以选择这种方式,但是感觉第一种判断比较精准,敌人与玩家类似。):
——玩家人物近攻攻击
Close_Attack.cs(挂载在武器子物体下的空物体)
void Update()
{
//攻击的时候才显示
if(!Player ._instance.isAttack )
{
this.gameObject.SetActive(false);
}
}
void OnTriggerEnter2D(Collider2D collider)
{
if(collider.transform.tag=="Enemy")
{
Enemy enemy;
enemy = collider.GetComponentInChildren<Enemy>();
enemy.LoseHP(damge);//damge为伤害值,LoseHP为敌人脚本里面的掉血函数
}
}
Player.cs
//攻击范围方向
h=idleH;
v=idleV;
if (v == 1)
{
//相当于沿Y轴翻转
Range_Attack.localScale = new Vector3(- Mathf.Abs(Range_Attack.localScale.x), Range_Attack.localScale.y, Range_Attack.localScale.z);
//翻转后X方向会与原来不一样
h *= -1;
}
else
Range_Attack.localScale = new Vector3( Mathf.Abs(Range_Attack.localScale.x, Range_Attack.localScale.y, Range_Attack.localScale.z);
//选择攻击范围,使保持在人的正前方
float angle = Vector2.Angle(-Vector2.right, new Vector2(h, v));
Range_Attack.rotation = Quaternion.Euler(0, 0, angle);
- 第一种方法(自己想了一下,挺简单的,可能有