나는 주로 종족 : 승천 (Ascend)에 의해 영감을 받아 종족과 유사한 게임의 작은 프로토 타입을 만들려고 노력하고있다. 문제는 운동을하기 어렵다는 것입니다. 속도를 유지하기 위해 마찰없이 미끄러지는 스키가 문제가되지 않습니다. 반면에 공기/스키 컨트롤입니다. 내가하려고하는 것은 플레이어가 어떤 방향으로 속도를 높이 지 않고 고속으로 이동할 때 방향을 바꾸거나 속도를 늦추도록하는 것입니다. 속도를 높이 지 않고 플레이어의 방향을 바꾼다.
이
이에 사용하는 스크립트 메신저입니다 :using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public Transform cameraObj;
public Transform cameraRefObj;
public Transform velObj;
public Camera cameraCam;
public Rigidbody rigbod;
public CapsuleCollider cap;
public float maxVel;
public float walkForce;
public float defDynFric;
public float defStatFric;
void Start() {
rigbod = this.GetComponent<Rigidbody>();
cap = this.GetComponent<CapsuleCollider>();
cameraObj = this.GetComponentInChildren<Camera>().transform;
cameraCam = this.GetComponentInChildren<Camera>();
}
void Update() {
Vector3 vel = rigbod.velocity;
Debug.DrawRay(this.transform.position, vel);
Vector3 velCalc = new Vector3(vel.x, 0, vel.z);
float speedCapMult =Mathf.Clamp01(vel.magnitude/maxVel);
velObj.rotation = Quaternion.LookRotation(velCalc);
cameraRefObj.transform.rotation = Quaternion.EulerAngles(0, Quaternion.ToEulerAngles(cameraObj.rotation).y, 0);
if (Input.GetButton("Skii"))
{
cap.material.dynamicFriction = 0;
cap.material.staticFriction = 0;
} else
{
cap.material.dynamicFriction = defDynFric;
cap.material.staticFriction = defStatFric;
}
if (Input.GetAxis("Vertical") !=0 || Input.GetAxis("Horizontal") != 0)
{
Vector3 InputVec = Quaternion.EulerAngles(0, Quaternion.ToEulerAngles(cameraObj.rotation).y, 0) * Vector3.ClampMagnitude(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")),1);
float moveMulti =(1 -speedCapMult) +(speedCapMult*Mathf.Clamp01(1-Mathf.Cos(Vector3.Angle(velCalc, InputVec)/2)));
InputVec = Vector3.ClampMagnitude(InputVec, moveMulti);
Vector3 resVec = InputVec * (moveMulti * walkForce);
Debug.DrawRay(this.transform.position, resVec, Color.red);
// Debug.Log("SPD*: "+speedCapMult + " moveMulti: " + moveMulti + " VecAng: "+ Mathf.Clamp01(Mathf.Cos((Vector3.Angle(velCalc, InputVec)/2)-1)));
rigbod.AddForce(resVec);
}
}
}
오전 데 문제는이 라인을 중심으로 이해하는 것과 같습니다
float moveMulti =(1 -speedCapMult) +(speedCapMult*Mathf.Clamp01(1-Mathf.Cos(Vector3.Angle(velCalc, InputVec)/2)));
그것이 무엇을하는 저속 사이 trainsition입니다 고속 동작으로의 이동. 저속은 의도 한대로 작동하지 않는 고속 동작입니다. 방향을 돌릴 때 작은 비트 만 돌리면 멈추고 플레이어가 카메라를 돌리지 않으면 플레이어가 그 방향으로 계속 여행합니다 (소스 게임에서 서핑하는 것처럼 보입니다).
T : A에서와 같이 작동하고 싶습니다. 나는 정말로 좋은 영상 비디오를 발견 할 수 없다. 그러나 그것의 요지는 당신이 옆으로 갈 수 있고, 속도를 늦추지 만 속도를 올릴 수 없다는 것이다.
이드는이를 수정하는 방법을 알고있는 사람에게 도움을 정말 감사합니다. 미리 감사드립니다! : D
선형 속도가 아닌 각속도 만 변경하려면 대신 'rigbod.AddTorque'를 사용할 수 있습니다. 자세한 내용은 [Documentation page] (https://docs.unity3d.com/ScriptReference/Rigidbody.AddTorque.html)를 참조하십시오. – meowgoesthedog