赞
踩
每日一句:慢慢改变,慢慢成长,慢慢适应,慢慢优秀
目录
/*旋转刚体,位移的动画驱动移动*/
- using System.Collections;
-
- using System.Collections.Generic;
-
- using UnityEngine;
-
-
-
- public class PlayerMoement : MonoBehaviour
-
- {
-
-
-
- public float turnSmooting = 15f;
-
- public float speedDampTime = 0.1f;
-
- private Animator animator;
-
-
-
- void Start()
-
- {
-
- animator = GetComponent<Animator>();
-
-
-
- }
-
-
-
- //不受帧率影响,有物理计算的时候使用,不会因为帧率影响卡帧
-
- private void FixedUpdate()
-
- {
-
- float h = Input.GetAxis("Horizontal");
-
- float v = Input.GetAxis("Vertical");
-
- MovementManagement(h, v);
-
- }
-
- //旋转方法,参考绝对坐标系
-
- void Ratating(float h, float v)//(横轴的值,纵轴的值)
-
- {
-
- //按下横轴和纵轴的键,前左、前右,后左、后右,向量,player朝向的目标向量
-
- Vector3 targetDir = new Vector3(h, 0, v);
-
- Quaternion targetRotation = Quaternion.LookRotation(targetDir);//绝对的旋转量,旋转刚体,位移的动画驱动移动
-
- Rigidbody rb = GetComponent<Rigidbody>();
-
- Quaternion newRotation = Quaternion.Lerp(rb.rotation, targetRotation, turnSmooting * Time.deltaTime);
-
- 4(newRotation);
-
-
-
- }
-
- void MovementManagement(float h, float v)
-
- {
-
- if (h != 0 || v != 0)//如果按先后左右键了
-
- {
-
- Ratating(h, v);
-
- animator.SetBool("Walk", true);//插值
-
- }
-
- else
-
- {
-
- animator.SetBool("Walk", false);
-
- }
-
- }
-
- }
- using System.Collections;
-
- using System.Collections.Generic;
-
- using UnityEngine;
-
- public class CameraMovement : MonoBehaviour
-
- {
-
- //用插值方法移动
-
- float smooth = 1.5f;
-
- Transform player;
-
- Vector3 playerToCamera;
-
- float playerToCameraMag;
-
- Vector3 newPos; //计算的结果
-
- // Start is called before the first frame update
-
- void Start()
-
- {
-
- player = GameObject.FindWithTag(Tags.Player).transform;
-
- playerToCamera = transform.position - player.position;//a-b等到b指向a的向量
-
- playerToCameraMag = playerToCamera.magnitude;//计算它的模
-
- }
-
- //射线检测,看击中的是不是player
-
- bool ViewingPositionCheck(Vector3 checkPos)
-
- {
-
- RaycastHit hit;
-
- if (Physics.Raycast(checkPos, player.position - checkPos, out hit, playerToCameraMag))//检测点到plyer的方向
-
- {
-
- if(hit.transform!=player)
-
- {
-
- return false;
-
- }
-
- }
-
- newPos = checkPos;
-
- return true;
-
- }
-
- void SmoothLookAt()
-
- {
-
- Vector3 camDirction = player.position - transform.position;//摄像机指向player的向量
-
- Quaternion lookAtRotation = Quaternion.LookRotation(camDirction);
-
- //将方向转化为旋转角度:
-
- //传入一个方向将返回一个旋转角,当某个物体被施加这个旋转角后,这个物体的forward方向将指向传入的方向。
-
- transform.rotation = Quaternion.Lerp(transform.rotation, lookAtRotation, smooth * Time.deltaTime);
-
- }
-
- private void FixedUpdate()
-
- {
-
- Vector3 standardPos = player.position + playerToCamera;
-
- Vector3 abovePos = player.position + Vector3.up * playerToCameraMag;//0,1,0上方高度
-
- Vector3[] checkPoints = new Vector3[5];
-
- checkPoints[0] = standardPos;
-
- checkPoints[1] = Vector3.Lerp(standardPos, abovePos, 0.25f);
-
- checkPoints[2]= Vector3.Lerp(standardPos, abovePos, 0.5f);
-
- checkPoints[3]= Vector3.Lerp(standardPos, abovePos, 0.75f);
-
- checkPoints[4] = abovePos;
-
- for(int i=0;i<checkPoints.Length;i++)
-
- {
-
- if(ViewingPositionCheck(checkPoints[i]))
-
- {
-
- break;//每次传过来0到4 的点,之后进行射线检测,break 出来,找到了一个合适的点,newPos里
-
- }
-
- }
-
- transform.position = Vector3.Lerp(transform.position, newPos, smooth * Time.deltaTime);
-
- SmoothLookAt();
-
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。