Refactored Raycasting, Added Layers for Raycasting to C#, Fixed Collision Tag Panel #331
|
@ -34,7 +34,11 @@
|
|||
Position Offset: {x: 0, y: 0, z: 0}
|
||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||
IsActive: true
|
||||
Scripts: ~
|
||||
Scripts:
|
||||
- Type: PhysicsTestObj
|
||||
Enabled: true
|
||||
forceAmount: 50
|
||||
torqueAmount: 500
|
||||
- EID: 1
|
||||
Name: Default
|
||||
IsActive: true
|
||||
|
|
|
@ -159,7 +159,7 @@ public partial class LeafSearch : BehaviourTreeNode
|
|||
//Since transform position is often the raccoon's base and the ray needs to hit somewhere higher to be more reliable
|
||||
Vector3 rayDestination = plrT.GlobalPosition + plrT.GlobalScale * playerCollider.PositionOffset;
|
||||
Ray sightRay = new Ray(eyePosition, rayDestination - eyePosition);
|
||||
RaycastHit sightRayHit = Physics.Raycast(sightRay);
|
||||
RaycastHit sightRayHit = Physics.Raycast(sightRay, false)[0];
|
||||
//As of November 2022, RaycastHit contains only the FIRST object hit by
|
||||
//the ray in the Other GameObject data member
|
||||
//Diren may likely add ALL objects hit by the ray over December
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using SHADE;
|
||||
using SHADE_Scripting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static PlayerController;
|
||||
using static Item;
|
||||
|
||||
|
@ -199,14 +200,25 @@ public class PickAndThrow : Script
|
|||
{
|
||||
if (pc != null)
|
||||
{
|
||||
Vector3 dirNor = pc.tranform.Forward;
|
||||
Vector3 playerRayPos = pc.tranform.GlobalPosition;
|
||||
playerRayPos.y += 0.05f;
|
||||
dirNor.Normalise();
|
||||
RaycastHit ray1 = Physics.Raycast(new Ray(playerRayPos, Vector3.RotateY(dirNor, SHADE.Math.DegreesToRadians(22.5f))), rayDistance);
|
||||
RaycastHit ray2 = Physics.Raycast(new Ray(playerRayPos, Vector3.RotateY(dirNor, SHADE.Math.DegreesToRadians(-22.5f))), rayDistance);
|
||||
RaycastHit ray3 = Physics.Raycast(new Ray(playerRayPos, dirNor), rayDistance * 0.75f);
|
||||
inRange = CheckForItem(ray1) || CheckForItem(ray2) || CheckForItem(ray3);
|
||||
Vector3 dirNor = pc.tranform.Forward;
|
||||
Vector3 playerRayPos = pc.tranform.GlobalPosition;
|
||||
playerRayPos.y += 0.05f;
|
||||
dirNor.Normalise();
|
||||
List<RaycastHit> rayList1 = Physics.Raycast(new Ray(playerRayPos, Vector3.RotateY(dirNor, SHADE.Math.DegreesToRadians(22.5f))), rayDistance, false);
|
||||
List<RaycastHit> rayList2 = Physics.Raycast(new Ray(playerRayPos, Vector3.RotateY(dirNor, SHADE.Math.DegreesToRadians(-22.5f))), rayDistance, false);
|
||||
List<RaycastHit> rayList3 = Physics.Raycast(new Ray(playerRayPos, dirNor), rayDistance * 0.75f, false);
|
||||
|
||||
if (rayList1.Count > 0 && rayList2.Count > 0 && rayList3.Count > 0)
|
||||
{
|
||||
RaycastHit ray1 = rayList1[0];
|
||||
RaycastHit ray2 = rayList2[0];
|
||||
RaycastHit ray3 = rayList3[0];
|
||||
inRange = CheckForItem(ray1) || CheckForItem(ray2) || CheckForItem(ray3);
|
||||
}
|
||||
else
|
||||
{
|
||||
inRange = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
using SHADE;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static Item;
|
||||
|
||||
|
||||
public class PhysicsTestObj : Script
|
||||
{
|
||||
public RigidBody body { get; set; }
|
||||
public Collider collider { get; set; }
|
||||
|
||||
// Movement input booleans
|
||||
public enum Direction
|
||||
{
|
||||
UP,
|
||||
DOWN,
|
||||
FORWARD,
|
||||
BACK,
|
||||
LEFT,
|
||||
RIGHT
|
||||
};
|
||||
|
||||
internal bool[] move = new bool[6];
|
||||
internal bool[] rotate = new bool[6];
|
||||
|
||||
internal Vector3[] moveVec = new Vector3[6]
|
||||
{
|
||||
Vector3.Up,
|
||||
Vector3.Down,
|
||||
Vector3.Back,
|
||||
Vector3.Forward,
|
||||
Vector3.Left,
|
||||
Vector3.Right
|
||||
};
|
||||
|
||||
internal Vector3[] rotateVec = new Vector3[6]
|
||||
{
|
||||
Vector3.Right,
|
||||
Vector3.Left,
|
||||
Vector3.Forward,
|
||||
Vector3.Down,
|
||||
Vector3.Up,
|
||||
Vector3.Down
|
||||
};
|
||||
|
||||
internal Input.KeyCode[] moveInputKeys = new Input.KeyCode[6]
|
||||
{
|
||||
Input.KeyCode.Space,
|
||||
Input.KeyCode.LeftControl,
|
||||
Input.KeyCode.W,
|
||||
Input.KeyCode.S,
|
||||
Input.KeyCode.A,
|
||||
Input.KeyCode.D
|
||||
};
|
||||
|
||||
internal Input.KeyCode[] rotateInputKeys = new Input.KeyCode[6]
|
||||
{
|
||||
Input.KeyCode.I,
|
||||
Input.KeyCode.K,
|
||||
Input.KeyCode.U,
|
||||
Input.KeyCode.O,
|
||||
Input.KeyCode.J,
|
||||
Input.KeyCode.L
|
||||
};
|
||||
|
||||
public float forceAmount = 50.0f;
|
||||
public float torqueAmount = 500.0f;
|
||||
|
||||
protected override void awake()
|
||||
{
|
||||
body = GetComponent<RigidBody>();
|
||||
collider = GetComponent<Collider>();
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
move[i] = false;
|
||||
rotate[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void update()
|
||||
{
|
||||
Ray colliderRay = new Ray();
|
||||
colliderRay.Direction = Vector3.Right;
|
||||
Physics.ColliderRaycast(collider.Owner, colliderRay, false);
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
if (Input.GetKeyDown(moveInputKeys[i]))
|
||||
move[i] = true;
|
||||
|
||||
if (Input.GetKeyDown(rotateInputKeys[i]))
|
||||
rotate[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void fixedUpdate()
|
||||
{
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
bool shouldMove = move[i];
|
||||
bool shouldRotate = rotate[i];
|
||||
|
||||
if (shouldMove)
|
||||
{
|
||||
//Vector3 offset = new Vector3(0.25f, 0.0f, 0.0f);
|
||||
//rb.AddForceAtLocalPos(moveVec[i] * forceAmount, offset);
|
||||
body.AddForce(moveVec[i] * forceAmount);
|
||||
move[i] = false;
|
||||
}
|
||||
|
||||
if (shouldRotate)
|
||||
{
|
||||
body.AddTorque(rotateVec[i] * torqueAmount);
|
||||
rotate[i] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
Name: PhysicsTestObj
|
||||
ID: 163401492
|
||||
Type: 9
|
|
@ -213,6 +213,7 @@ namespace SHADE
|
|||
objectManager.FlushDefinitions();
|
||||
|
||||
collisionListener.BindToWorld(worldState.world);
|
||||
raycaster.BindToWorld(worldState.world);
|
||||
|
||||
return onSceneInitEvent.get()->handle;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue