摇杆
public class RockerTool : MonoBehaviour
{
public Image rocker, rockerParent; //摇杆点点物体 父物体我们通过.parent取得
private Vector3 beginPos;//鼠标点下后的起始位置
public PlayerMove playerMove;
void Update()
{
Rocker();
}
public void Rocker()
{
if (Input.GetMouseButtonDown(0))
{
//隐藏着的摇杆盘显示出来
rockerParent.gameObject.SetActive(true);
beginPos = Input.mousePosition;
//让摇杆盘位置等于鼠标点击的位置
rockerParent.transform.position = beginPos;
}
else if (Input.GetMouseButton(0))
{
//通过运算并normalized后求出两点之间的方向
Vector3 vector = Input.mousePosition - beginPos;
vector = vector.normalized;
//这里先是求出两点之间的距离 并且同mathf.Clamp进行一个范围的限制,然后在把这个距离与vector 两点之间的方向相乘 得出点点所在的位置
rocker.transform.localPosition = Mathf.Clamp(Vector3.Distance(beginPos, Input.mousePosition), 0, 120f) * vector;
rocker.transform.localPosition = Mathf.Clamp(Vector3.Distance(beginPos, Input.mousePosition), 0, 120f) * vector;
playerMove.Move(new Vector3(Mathf.Cos(-45) * vector.x + Mathf.Sin(-45) * vector.y, 0, Mathf.Sin(45) * vector.x + Mathf.Cos(45) * vector.y));
}
else if (Input.GetMouseButtonUp(0))
{
//鼠标抬起后 点点回到中间 关闭摇杆盘 初始化beginPos
beginPos = Vector3.zero;
rocker.transform.localPosition = Vector3.zero;
rockerParent.gameObject.SetActive(false);
}
}
}
人物移动
(CharacterController 组件)
this.transform.LookAt(V3);
controlier.SimpleMove(transform.forward * speed);
相机跟随
public class FollowPlayer : MonoBehaviour
{
private Transform player;
private Vector3 offsetPos;
// Start is called before the first frame update
void Start()
{
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
this.transform.LookAt(player.position);
offsetPos = transform.position - player.position;
}
// Update is called once per frame
void Update()
{
this.transform.position = player.position + offsetPos;
}
}
组件
CharacterController
unity 自带角色移动组件
Rigidbody 刚体
BoxCollider 碰撞核
isTrigger 触发器
特定Layer碰撞修改
找到菜单栏 Edit -> Project Setting -> Physics 并打开。