unity人物旋转移动代码_Unity3d中简单的实现人物移动射线控制人物旋转抬头

本文介绍如何在Unity3d中实现角色通过键盘输入进行移动,并使用鼠标右键点击来控制角色朝向。通过`Input.GetAxis`获取用户输入,`Raycast`创建射线来判断鼠标点击位置,进而调整人物旋转。使用`transform.Translate`进行平滑移动,配合`Coroutine`实现目标点的平滑接近。同时,角色状态管理确保了移动和静止的正确切换。
摘要由CSDN通过智能技术生成

// Use this for initialization

void Start () {

Rigid = GetComponent();

}

// Update is called once per frame

void Update () {

// if (Input.GetKeyDown(KeyCode.Space))

// {

// Rigid.AddForce(Vector3.up*10000f);

// Rigid.velocity = new Vector3(0,5,0);

// }

// Rigid.AddForce(Vector3.zero);

// Rigid.velocity = Vector3.zero;

if (PlayerAnimator.Instance.State != PlayerState.Dead)

{

// 获取用户按键

float h = Input.GetAxis("Horizontal");

float v = Input.GetAxis("Vertical");

if (h != 0 || v != 0)

{

PlayerAnimator.Instance.ChangeStateMove();

}else if((h == 0 || v == 0) && Cor == null)

{

PlayerAnimator.Instance.ChangeStateIdle();

}

// 移动

transform.Translate(new Vector3(h, 0, v) * Speed * Time.deltaTime, Space.Self);

// transform.Translate(new Vector3(h, 0, v) * Speed * Time.deltaTime,Space.World);

// 刚体移动

// Vector3 postion = Rigid.position + new Vector3(h, 0, v) * Speed * Time.deltaTime;

// Rigid.MovePosition(postion);

// 制作一条射线

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hitInfo;

// 鼠标移动

if (Input.GetMouseButton(1) && Physics.Raycast(ray, out hitInfo, 100f, CanRay))

{

if (Cor != null)

{

StopCoroutine(Cor);

}

Cor = StartCoroutine("Move", hitInfo);

}

// 人物旋转

if (Physics.Raycast(ray, out hitInfo, 100f, CanRay))

{

// print(hitInfo.collider.name);

// 防止射线碰在地面上,导致主角低头

Vector3 point = hitInfo.point;

point.y = transform.position.y;

transform.LookAt(point);

// Quaternion.LookRotation(hit.point-transform.position);

}

}

}

// 移动的携程

IEnumerator Move(RaycastHit hitInfo)

{

PlayerAnimator.Instance.ChangeStateMove();

while (transform.position != hitInfo.point)

{

transform.position = Vector3.MoveTowards(transform.position, hitInfo.point, 0.05f);

yield return 0;

}

Cor = null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值