C# Unity 3D弹簧关节纹理
你好,我正在做一个简单的3d游戏,我想做一个像抓钩这样的东西,而且一切都很完美,但我找不到一个解决方案,如何让它有纹理。这是我的密码:C# Unity 3D弹簧关节纹理,c#,unity3d,C#,Unity3d,你好,我正在做一个简单的3d游戏,我想做一个像抓钩这样的东西,而且一切都很完美,但我找不到一个解决方案,如何让它有纹理。这是我的密码: SpringJoint joint; public GameObject playerCam; Vector3 grapplepoint; private void StartGrapplinghook() { print("grapple"); RaycastHit[] hits = Physics.Raycas
SpringJoint joint;
public GameObject playerCam;
Vector3 grapplepoint;
private void StartGrapplinghook()
{
print("grapple");
RaycastHit[] hits = Physics.RaycastAll(playerCam.transform.position, playerCam.transform.forward, 30f);
if (hits.Length < 1) return;
grapplepoint = hits[0].point;
joint = gameObject.AddComponent<SpringJoint>();
joint.autoConfigureConnectedAnchor = false;
joint.connectedAnchor = grapplepoint;
joint.spring = 2.5f;
joint.damper = 0.25f;
}
SpringJoint;
公共游戏对象播放器;
矢量3抓取点;
私有void StartGrapplinghook()
{
打印(“抓斗”);
RaycastHit[]hits=Physics.RaycastAll(playerCam.transform.position,playerCam.transform.forward,30f);
如果(hits.Length<1)返回;
抓取点=命中[0]。点;
joint=gameObject.AddComponent();
joint.autoConfigureConnectedAnchor=false;
joint.connectedAnchor=抓取点;
接头弹簧=2.5f;
接头阻尼=0.25f;
}
希望你们能帮我。我会使用一个
线条渲染器
来实现这一点,如果启用了它,会在每一帧更新它的位置
在脚本所在的同一游戏对象上制作并配置LineRenderer
组件。注释中的代码解释
[RequireComponent(typeof(LineRenderer))]
public class MyClassName : MonoBehaviour
{
[SerializeField]
LineRenderer grappleRenderer;
SpringJoint joint;
public GameObject playerCam;
Vector3 grapplepoint;
void Awake()
{
// Whatever is already here...
// If you don't need a fresh grapple copy every time,
// create them once here or in the editor and re-use them
joint = gameObject.AddComponent<SpringJoint>();
joint.autoConfigureConnectedAnchor = false;
joint.spring = 2.5f;
joint.damper = 0.25f;
grappleRenderer = GetComponent<LineRenderer>();
grappleRenderer.positionCount = 2; // this could just be set in the inspector
// Don't use the grapple by default
joint.enabled = false;
grappleRenderer.enabled = false;
}
private void StartGrapplinghook()
{
print("grapple");
RaycastHit[] hits = Physics.RaycastAll(playerCam.transform.position,
playerCam.transform.forward, 30f);
if (hits.Length < 1) return;
grapplepoint = hits[0].point;
joint.enabled = true;
joint.connectedAnchor = grapplepoint;
grappleRenderer.enabled = true;
}
void StopGrapplingHook()
{
// turn off joint and renderer
joint.enabled = false;
grappleRenderer.enabled = false;
}
// grapple rendering can happen after all other updates finish
// determining if it should be rendered or not that frame
void LateUpdate()
{
if (grappleRenderer.enabled)
{
Vector3 grappleStart = transform.position; // or something that makes sense
grappleRenderer.SetPoints(new Vector3[]{grapplepoint, grappleStart});
}
}
}
[RequireComponent(typeof(LineRenderer))]
公共类MyClassName:MonoBehavior
{
[序列化字段]
线渲染器抓图渲染器;
弹簧接头;
公共游戏对象播放器;
矢量3抓取点;
无效唤醒()
{
//不管这里已经有什么。。。
//如果你不需要每次都有新的抓斗副本,
//在此处或编辑器中创建一次并重新使用它们
joint=gameObject.AddComponent();
joint.autoConfigureConnectedAnchor=false;
接头弹簧=2.5f;
接头阻尼=0.25f;
grappleRenderer=GetComponent();
grappleRenderer.positionCount=2;//这可以在inspector中设置
//默认情况下不要使用抓斗
joint.enabled=false;
grappleRenderer.enabled=false;
}
私有void StartGrapplinghook()
{
打印(“抓斗”);
RaycastHit[]hits=Physics.RaycastAll(playerCam.transform.position,
playerCam.transform.forward,30f);
如果(hits.Length<1)返回;
抓取点=命中[0]。点;
joint.enabled=true;
joint.connectedAnchor=抓取点;
grappleRenderer.enabled=true;
}
无效停止抓斗书()
{
//关闭关节和渲染器
joint.enabled=false;
grappleRenderer.enabled=false;
}
//抓斗渲染可以在所有其他更新完成后进行
//确定是否应渲染该帧
void LateUpdate()
{
if(grappleRenderer.enabled)
{
Vector3 grappleStart=transform.position;//或有意义的东西
设置点(新矢量3[]{grapplepoint,grappleStart});
}
}
}
我会为此使用一个线条渲染器
,如果启用,则会在每一帧更新其位置
在脚本所在的同一游戏对象上制作并配置LineRenderer
组件。注释中的代码解释
[RequireComponent(typeof(LineRenderer))]
public class MyClassName : MonoBehaviour
{
[SerializeField]
LineRenderer grappleRenderer;
SpringJoint joint;
public GameObject playerCam;
Vector3 grapplepoint;
void Awake()
{
// Whatever is already here...
// If you don't need a fresh grapple copy every time,
// create them once here or in the editor and re-use them
joint = gameObject.AddComponent<SpringJoint>();
joint.autoConfigureConnectedAnchor = false;
joint.spring = 2.5f;
joint.damper = 0.25f;
grappleRenderer = GetComponent<LineRenderer>();
grappleRenderer.positionCount = 2; // this could just be set in the inspector
// Don't use the grapple by default
joint.enabled = false;
grappleRenderer.enabled = false;
}
private void StartGrapplinghook()
{
print("grapple");
RaycastHit[] hits = Physics.RaycastAll(playerCam.transform.position,
playerCam.transform.forward, 30f);
if (hits.Length < 1) return;
grapplepoint = hits[0].point;
joint.enabled = true;
joint.connectedAnchor = grapplepoint;
grappleRenderer.enabled = true;
}
void StopGrapplingHook()
{
// turn off joint and renderer
joint.enabled = false;
grappleRenderer.enabled = false;
}
// grapple rendering can happen after all other updates finish
// determining if it should be rendered or not that frame
void LateUpdate()
{
if (grappleRenderer.enabled)
{
Vector3 grappleStart = transform.position; // or something that makes sense
grappleRenderer.SetPoints(new Vector3[]{grapplepoint, grappleStart});
}
}
}
[RequireComponent(typeof(LineRenderer))]
公共类MyClassName:MonoBehavior
{
[序列化字段]
线渲染器抓图渲染器;
弹簧接头;
公共游戏对象播放器;
矢量3抓取点;
无效唤醒()
{
//不管这里已经有什么。。。
//如果你不需要每次都有新的抓斗副本,
//在此处或编辑器中创建一次并重新使用它们
joint=gameObject.AddComponent();
joint.autoConfigureConnectedAnchor=false;
接头弹簧=2.5f;
接头阻尼=0.25f;
grappleRenderer=GetComponent();
grappleRenderer.positionCount=2;//这可以在inspector中设置
//默认情况下不要使用抓斗
joint.enabled=false;
grappleRenderer.enabled=false;
}
私有void StartGrapplinghook()
{
打印(“抓斗”);
RaycastHit[]hits=Physics.RaycastAll(playerCam.transform.position,
playerCam.transform.forward,30f);
如果(hits.Length<1)返回;
抓取点=命中[0]。点;
joint.enabled=true;
joint.connectedAnchor=抓取点;
grappleRenderer.enabled=true;
}
无效停止抓斗书()
{
//关闭关节和渲染器
joint.enabled=false;
grappleRenderer.enabled=false;
}
//抓斗渲染可以在所有其他更新完成后进行
//确定是否应渲染该帧
void LateUpdate()
{
if(grappleRenderer.enabled)
{
Vector3 grappleStart=transform.position;//或有意义的东西
设置点(新矢量3[]{grapplepoint,grappleStart});
}
}
}