问题描述
我正在尝试在Unity中实现边缘爬升,但是Raycasts遇到了问题,它没有记录点击数。
代码:
using System.Linq;
using UnityEngine;
public class Playeredgeclimb : MonoBehavIoUr
{
[Serializefield]
Vector3Variable lookDirection;
[Serializefield]
float heightThreshold = 0.25f;
[Serializefield]
float raydistance = 0.05f;
Vector3 hitclimbableStartPosition;
Vector3 playerBottomPosition;
Vector3 playerThresholdHeightPosition;
Vector3 lookDirectionOffset;
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
}
void Update() {
lookDirectionOffset = lookDirection.Value * (transform.localScale.x / 2f);
playerBottomPosition = transform.position + Vector3.down * transform.localScale.y / 2f;
playerThresholdHeightPosition = Vector3.up * (transform.localScale.y * heightThreshold);
var fudge = Vector3.up * 0.1f;
hitclimbableStartPosition = playerBottomPosition + playerThresholdHeightPosition + lookDirectionOffset + fudge;
}
void FixedUpdate() {
if (lookDirection.Value.x != 0) {
if (CheckHitclimbable() && CheckCanclimbUnobstructed()) {
transform.position += playerThresholdHeightPosition;
}
}
}
bool CheckHitclimbable() {
float rayCount = 5f;
float increment = transform.localScale.y * heightThreshold / rayCount;
Vector3 rayPosition = hitclimbableStartPosition;
foreach (var index in Enumerable.Range(0,(int)rayCount - 1))
{
Ray ray = new Ray(rayPosition,lookDirection.Value);
RaycastHit hit;
if (Physics.Raycast(ray,out hit,raydistance)) {
Debug.DrawLine(rayPosition,rayPosition + lookDirection.Value * raydistance,Color.red);
return true;
} else {
Debug.DrawLine(rayPosition,Color.black);
rayPosition += Vector3.down * increment;
}
}
return false;
}
bool CheckCanclimbUnobstructed() {
float rayCount = 20f;
float increment = transform.localScale.y / rayCount;
Vector3 rayPosition = hitclimbableStartPosition;
foreach (var index in Enumerable.Range(0,transform.localScale.x)) {
Debug.DrawLine(rayPosition,rayPosition + lookDirection.Value * transform.localScale.x,Color.red);
return false;
} else {
Debug.DrawLine(rayPosition,Color.green);
rayPosition += Vector3.up * increment;
}
}
return true;
}
void OnDrawGizmos() {
Gizmos.color = Color.green;
Gizmos.DrawCube(hitclimbableStartPosition,new Vector3(0.1f,0.1f,0.1f));
}
}
行为视频:https://twitter.com/testingrequired/status/1294433037996953600
编辑
因此,将射线距离(增加到0.33)和使用的射线数量(增加到11)大大地帮助了
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)