4月25日
之前的demo也告一段落了,这次尝试做一个俯视类型的几何画风游戏,毕竟对于美术功底差的我这种是最适合的了
让玩家朝向始终为鼠标朝向位置
void changeTran()
{
Vector2 MouseAfter = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
Vector2 pos = new Vector2(transform.position.x, transform.position.y);
Vector3 v = MouseAfter - pos;
//首先获得目标方向
float angle = Vector3.SignedAngle(Vector3.up, v, Vector3.forward);
//得到围绕z轴旋转的角度
Quaternion rotation = Quaternion.Euler(0, 0, angle);
//利用角度得到rotation
transform.rotation = rotation;
}
给玩家添加一个子物体挡板,作为武器,可以反弹攻击,给他添加一个Hit脚本
添加敌人,给敌人添加脚本,会自动追踪玩家进行移动
void move()
{
Vector2 playerPos = player.gameObject.transform.position;
rb.MovePosition(Vector2.Lerp(transform.position, playerPos, smoothing * Time.deltaTime));
}
当接触到挡板后反弹,被策反,变色,接触到墙面以后再反弹,转换成攻击模式,追踪玩家、
这时候我发现,因为我的挡板是作为player的子物体存在的,所以挡板的tag总是会是玩家的tag,而不会是自己设置的tag
于是我换了个思路,给玩家添加碰撞检测,还是用circ和box来分别判断,给检测函数添加单例模式,便于引用
。。。旋转的时候检测区域不会随之旋转,那么还得找别的方法,这里的关键就是区分玩家主体和防御区域
解决方案是,挡板用 OnTriggerEnter2D来判断,player用 OnCollisionEnter2D来判断,player的is trigger为false,这样就解决了
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.transform.tag == "dangban")
{
isAttack = false;
Vector2 pPos = (Vector2)collision.transform.position;
Vector2 speedPos = (Vector2)transform.position - pPos;
rb.velocity = speedPos * speed;
}
}
新的问题是,当靠近时,敌人会减速,这是为啥
更新了追踪函数,添加了敌人方向旋转,解决
Vector2 playerPos = player.gameObject.transform.position;
transform.position = Vector3.MoveTowards(transform.position, playerPos, smoothing * Time.deltaTime);
Vector2 direction = player.transform.position - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
加了个代码,优化追踪程序
rb.AddForce(direction.normalized * blackSpeed);