【发布时间】:2020-10-29 19:58:12
【问题描述】:
我是初学者,所以如果这个问题没有意义,具体等,请耐心等待。谢谢! 编程对我来说仍然是一个抽象的东西。
我尝试制作一个包含 CharacterController 组件(用于 isGrounded 和 Move())的角色控制脚本,用于跳跃目的。
我还需要一种在轨道上移动角色的方法,所以我尝试了在 Lerping x 值末尾使用变换组件移动它的解决方案。
我的问题是这是一个很好的解决方案。会不会给引擎带来一些问题?
\\\
void Start()
{
myTransform = GetComponent<Transform>();
characterController = GetComponent<CharacterController>();
input = GetComponent<SimpleInput>();
moveStep = myTransform.position;
}
// Update is called once per frame
void Update()
{
if (characterController.isGrounded)
{
yVelocity = -1f;
if (Input.GetKeyDown(KeyCode.Space))
{
Jump();
}
SelectTrack();
xVelocity = Mathf.Lerp(transform.position.x, currentTrack * TrackWidth, 0.5f);
}
else
{
yVelocity += -gravity * Time.deltaTime;
yVelocity = Mathf.Clamp(yVelocity, -gravity, JumpForce);
}
moveStep.y = yVelocity;
characterController.Move(moveStep * Time.deltaTime);
transform.position = new Vector3(xVelocity, transform.position.y, transform.position.z);
//myTransform.position = moveStep;
}
void SelectTrack()
{
if (Input.GetKeyDown(KeyCode.A))
{
currentTrack -=1;
}
if (Input.GetKeyDown(KeyCode.D))
{
currentTrack += 1;
}
currentTrack = Mathf.Clamp(currentTrack, -1, 1);
}
void Jump()
{
yVelocity = JumpForce;
}
}
\\\
【问题讨论】:
-
既然团结可以为你做,为什么要实施你自己的重力
-
嗨,BugFinder。你的意思是我可以使用刚体?我想我这样做是为了学习。另外,我希望事情尽可能紧凑、精确。
标签: unity3d controller transform infinite runner