碰撞检测,射线检测,动态位移

This commit is contained in:
lishuo 2022-03-11 18:11:56 +08:00
parent 16e416332d
commit b3b882c51e
6 changed files with 228 additions and 54 deletions

View File

@ -259,7 +259,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -2594306684932571358, guid: 8d6e0aea970462e4bb4b16046eb5c382,
m_Motion: {fileID: -4775950824883181381, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:
@ -485,7 +485,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 3214223272393166172, guid: 8d6e0aea970462e4bb4b16046eb5c382,
m_Motion: {fileID: -9103549811889136567, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:
@ -571,7 +571,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -2328498710462472863, guid: 8d6e0aea970462e4bb4b16046eb5c382,
m_Motion: {fileID: 1628252986623654205, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:
@ -624,7 +624,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1827226128182048838, guid: 400110dd8ee017b43bacbba75163ad29,
m_Motion: {fileID: -4049585584969071195, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:
@ -653,7 +653,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 8337528576563664321, guid: 8d6e0aea970462e4bb4b16046eb5c382,
m_Motion: {fileID: 9001851194710065257, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:
@ -704,7 +704,7 @@ AnimatorState:
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -5405653242291790180, guid: 8d6e0aea970462e4bb4b16046eb5c382,
m_Motion: {fileID: 1391355703288224117, guid: 114606f2cc62f834ca290cba3ca38cc6,
type: 3}
m_Tag:
m_SpeedParameter:

View File

@ -1,23 +1,14 @@
380:5
661:0
909:-5
1231:0
1390:-5
1597:0
1756:-5
1906:0
2232:-5
2471:0
2961:-5
3233:0
3458:-5
4258:0
5367:5
5484:0
5799:5
5965:0
6379:5
6644:0
6980:5
7705:0
347:-5
693:0
1040:-5
1200:0
1434:-5
1483:0
1679:5
1816:0
2097:5
2322:0
2544:-5
2734:0
3340:5
3376:0

View File

@ -151,10 +151,10 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
_mediaSource: 1
_mediaReference: {fileID: 0}
_mediaReference: {fileID: 11400000, guid: 6270438318e8c9f4da5ff28f426d52ed, type: 2}
_mediaPath:
_pathType: 2
_path: AVProVideoSamples/Chongqing Fengjie Zilian stage 7.mp4
_path: AVProVideoSamples/12067924_720p.mp4
_fallbackMediaHints:
transparency: 0
alphaPacking: 0
@ -452,13 +452,13 @@ Light:
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 1
m_Type: 2
m_Resolution: 2
m_CustomResolution: -1
m_Strength: 1
m_Strength: 0.8
m_Bias: 0
m_NormalBias: 0.422
m_NearPlane: 0.56
m_NormalBias: 0
m_NearPlane: 0.1
m_CullingMatrixOverride:
e00: 1
e01: 0
@ -639,6 +639,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
ticks: 0
distance: 0
--- !u!54 &564530027
Rigidbody:
m_ObjectHideFlags: 0
@ -683,7 +684,7 @@ MeshCollider:
m_GameObject: {fileID: 583583715}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
m_Enabled: 0
serializedVersion: 4
m_Convex: 0
m_CookingOptions: 30
@ -743,8 +744,8 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 583583715}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: -10, z: 22}
m_LocalScale: {x: 22, y: 1, z: 22}
m_LocalPosition: {x: 0, y: -25, z: 22}
m_LocalScale: {x: 200, y: 1, z: 200}
m_Children: []
m_Father: {fileID: 1870313947}
m_RootOrder: 3
@ -868,6 +869,99 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 755272044}
m_CullTransparentMesh: 0
--- !u!1 &816517650
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 816517651}
- component: {fileID: 816517654}
- component: {fileID: 816517653}
- component: {fileID: 816517652}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &816517651
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 816517650}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 273, y: 0, z: 760}
m_LocalScale: {x: 22, y: 100, z: 22}
m_Children: []
m_Father: {fileID: 1870313947}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &816517652
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 816517650}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &816517653
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 816517650}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: bc3a712fff1411b49b32b0fd3d4d25f0, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &816517654
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 816517650}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &860992837
GameObject:
m_ObjectHideFlags: 0
@ -1022,7 +1116,7 @@ RectTransform:
- {fileID: 1297089527}
- {fileID: 2017384698}
m_Father: {fileID: 1870313947}
m_RootOrder: 4
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
@ -1567,7 +1661,7 @@ PrefabInstance:
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_RootOrder
value: 5
value: 6
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
@ -1642,7 +1736,7 @@ PrefabInstance:
- target: {fileID: 919132149155446097, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_IsActive
value: 1
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0f2ea8e54c2f1bf4f871020d54be0bda, type: 3}
@ -1671,6 +1765,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
ticks: 0
distance: 0
--- !u!95 &1270643059
Animator:
serializedVersion: 3
@ -1837,7 +1932,7 @@ MeshCollider:
m_GameObject: {fileID: 1299667690}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
m_Enabled: 0
serializedVersion: 4
m_Convex: 0
m_CookingOptions: 30
@ -1897,7 +1992,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1299667690}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 900}
m_LocalPosition: {x: 0, y: 0, z: 935}
m_LocalScale: {x: 1920, y: 1080, z: 1}
m_Children: []
m_Father: {fileID: 1870313947}
@ -2137,17 +2232,17 @@ PrefabInstance:
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_LocalScale.x
value: 3
value: 20
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_LocalScale.y
value: 3
value: 20
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_LocalScale.z
value: 3
value: 20
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
@ -2157,12 +2252,12 @@ PrefabInstance:
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_LocalPosition.y
value: -10
value: -25
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
propertyPath: m_LocalPosition.z
value: 22
value: 60
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 0f2ea8e54c2f1bf4f871020d54be0bda,
type: 3}
@ -2448,6 +2543,7 @@ Transform:
- {fileID: 1358457488}
- {fileID: 1299667694}
- {fileID: 583583719}
- {fileID: 816517651}
- {fileID: 874107240}
- {fileID: 1270643056}
m_Father: {fileID: 0}

View File

@ -22,7 +22,7 @@ namespace Assets.Scripts.Scenes.VideoRide
protected double currentSlope;
protected double nextSlope;
protected double nextSlopeDistance;
protected double distance;
public double distance;
protected double currentSlopeDistance;
protected double lastEndDistance;
protected double totalClimb;
@ -33,7 +33,8 @@ namespace Assets.Scripts.Scenes.VideoRide
float timer = 1f;
protected bool start = true;
protected VideoGameManager manager { get; set; }
Camera camera;
float currenPlayerHeight;
protected virtual void Start()
{
animator = GetComponent<Animator>();
@ -41,9 +42,19 @@ namespace Assets.Scripts.Scenes.VideoRide
mapData = manager.GetMapData();
ComputeNextSlope();//初始化坡度等
animator.Play("idle");
camera = Camera.main;
//注解1
//得到模型原始高度
float size_y = GetComponent<Collider>().bounds.size.y;
//得到模型缩放比例
float scal_y = transform.localScale.y;
//它们的乘积就是高度
currenPlayerHeight = (size_y * scal_y);
}
void Update()
protected virtual void Update()
{
timer -= Time.deltaTime;
ComputeAnimator();//控制动画
@ -58,6 +69,7 @@ namespace Assets.Scripts.Scenes.VideoRide
ComputePlayer();//计算人物属性
ComputeRecord();
ComputeVideo();
ComputeRandom();
}
timer += 1f;
}
@ -67,8 +79,33 @@ namespace Assets.Scripts.Scenes.VideoRide
speed = 0;
Debug.Log(e.Message);
}
//获取player的position信息
Vector3 pos = transform.position;
pos.y += 3f;
//射线碰撞物信息接收
RaycastHit hit;
//第二种写法
//我们可以先创建出一条射线
Ray ray = new Ray(pos, new Vector3(0, -5, 22));
//然后用这条射线去做射线检测
//射线,输出碰撞体信息,射线长度,射线在那一层检测,射线不忽略开启触发器(istrigger)的碰撞体
bool isHit = Physics.Raycast(ray, out hit, 15f, 1 << 0, QueryTriggerInteraction.Collide);
//在unity窗口画出射线
Debug.DrawLine(pos, new Vector3(pos.x, pos.y, pos.z + 5), Color.red);
if (isHit)//如果射线检测到物体
{
//打印出被检测物体的名字
print(hit.transform.name);
transform.DOLocalMoveX(-2, 1);
transform.DOLocalMoveZ(27, 1).onComplete+=()=>{
transform.DOLocalMoveX(2, 1);
};
}
}
}
//人物碰撞
void OnCollisionEnter(Collision collision)
{
@ -82,6 +119,17 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
}
void ComputeRandom()
{
var offset = 30;
if (ticks % 9 == 0)
transform.DOMoveZ(transform.position.z - offset, 1f);
if (ticks % 5 == 0)
transform.DOMoveZ(transform.position.z + offset, 2f);
//人物的rotation y
transform.DOLocalRotate(new Vector3(0f, bearing, 0f), 1f);
}
//动画状态机
void ComputeAnimator()
{
@ -90,13 +138,26 @@ namespace Assets.Scripts.Scenes.VideoRide
animator.SetFloat("preSpeed", (float)preSpeed);
animator.SetFloat("speed", (float)speed);
animator.SetFloat("grade", (float)currentSlope);
var currentFrame = manager.GetCurrentFrame() ?? 0;
var currentFrame = manager.GetCurrentFrame();
if (manager.mockDirection.ContainsKey(currentFrame))
{
bearing = manager.mockDirection[currentFrame];
}
animator.SetFloat("bearing", bearing);
}
}
//人相对视频不距离不变。 其他人相对视频做前后位移
//人与人之前前后距离按照射线检测 扇形射线
//人与人左右距离按照碰撞检测
//每个人都实时计算前后距离
//其他玩家相对当前主人公做正向或者反向位移,左右
protected virtual void ChangeToFirst()
{
transform.DOLocalMoveZ(-1, 1);
}
protected virtual void ChangeToThird()
{
transform.DOLocalMoveZ(55, 1);
}
//计算人物当前属性
protected abstract void ComputePlayer();

View File

@ -13,6 +13,8 @@ using System.Linq;
using System.Threading.Tasks;
using TurfCS;
using UnityEngine;
using DG.Tweening;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoGameManager : DeviceServiceMonoBase
@ -34,6 +36,7 @@ namespace Assets.Scripts.Scenes.VideoRide
private double endDistance { get; set; }
public Dictionary<int, bool> slots = new Dictionary<int, bool>();
Transform cube;
private async void Awake()
{
base.Awake();
@ -49,9 +52,11 @@ namespace Assets.Scripts.Scenes.VideoRide
MapUDPService.Init();//初始化TCP
MockDirection();
InitSlots();
}
void Start()
{
cube = transform.Find("Cube");
//获取媒体播放器
mediaPlayer = FindObjectOfType<MediaPlayer>();
var mapApi = ConfigHelper.mapApi;
@ -88,6 +93,15 @@ namespace Assets.Scripts.Scenes.VideoRide
cyclingController?.Run(null);
var onlineRiders = cyclingController.riders;
timer += 1f;
}
var p = FindObjectOfType<VideoPlayer>();
if (p.distance > 0)
{
preFrame = currentFrame;
currentFrame = GetCurrentFrame();
var dd = (currentFrame - preFrame) / 200f * cube.position.z;
cube.DOMoveZ((float)(cube.position.z - dd), 0f);
}
}
private void InitSlots()
@ -195,10 +209,12 @@ namespace Assets.Scripts.Scenes.VideoRide
{
mediaPlayer?.Stop();
}
int preFrame = 0;
int currentFrame = 0;
public int? GetCurrentFrame()
public int GetCurrentFrame()
{
return mediaPlayer?.Control.GetCurrentTimeFrames();
return mediaPlayer.Control.GetCurrentTimeFrames();
}
public void SetCurrentFrame(int seq)
@ -286,6 +302,10 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return mapData;
}
public float GetPlayRatio()
{
return mediaPlayer.Control.GetPlaybackRate();
}
public List<VideoMapModel> getVideoPointList()
{
return videoPointList;

View File

@ -12,6 +12,11 @@ namespace Assets.Scripts.Scenes.VideoRide
base.Start();
animator.Play("idle");
}
protected override void Update()
{
base.Update();
}
public void SetPower(double power)
{
this.power = power;
@ -47,6 +52,7 @@ namespace Assets.Scripts.Scenes.VideoRide
speed = 0;
distance = 0;
}
}
//控制视频播放速度
protected override void ComputeVideo()