2月28日
学了两个礼拜的unity,到今天才想起来得整个东西记录一下学习和问题啥的,失策了。
亡羊补牢从今天开始也不算晚。
就记录一下还记得的一些问题吧。
下面是关于脚本script的一些内容
GameObject:十分重要,场景内的组件都可用这个来定义
Vector2<x,y>:2d坐标
随机取得位置函数:
private Vector2 RandomPosition()
{
//随机取得位置
int PositionIndex = Random.Range(0, positionList.Count);
Vector2 pos = positionList[PositionIndex];
positionList.RemoveAt(PositionIndex);
return pos;
}
将创建出来的场景物体都归到一个文件夹中:
GameObject go = GameObject.Instantiate(WallPrefab, pos, Quaternion.identity);
go.transform.SetParent(MapHolder);
主角的碰撞检测:
//碰撞检测
collider.enabled = false;//去掉自身所处位置的碰撞
RaycastHit2D hit = Physics2D.Linecast(TargetPos,TargetPos+new Vector2(h,v));//(开始位置,结束位置)
collider.enabled = true;//检测后再将原本位置的碰撞加上
if (hit.transform == null)
{
//无碰撞
}
else
{
//有碰撞
}
控制移动:主要是按下按键的检测:
rigidbody.MovePosition(Vector2.Lerp(transform.position, TargetPos, smoothing * Time.deltaTime));
RestTimer += Time.deltaTime;
if (RestTimer < RestTime)
return;
//检测按键的按下
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
if (h > 0)
{
v = 0;
}
if (h != 0 || v != 0)
{
TargetPos += new Vector2(h, v);
}
受到攻击判定:
private int HP=2;
public Sprite DamageSprite;//收到攻击的图片/动画
//自身受到攻击
public void TakeDamage()
{
HP -= 1;
GetComponent<SpriteRenderer>().sprite = DamageSprite;//将图片设为收到攻击时的图片
if (HP <= 0)
{
Destroy(this.gameObject);
}
}
判断方位
Vector2 offset = player.position - transform.position;
下面是unity内组件的一些运用
Animator:动画组件
Box Collider:碰撞组件
Rigidbody :刚体组件
其中body type中kinematic为不受重力影响