C# “如何拥有球员”;幻灯片“;在管道和轨道上?
我需要创建一个滑动或滑动效果。我想在sunset overdrive中创建滑动或滑动效果: 当主角在电缆和轨道上滑倒时。如何创建相同的结果?在C#中。看这个视频:(从1.20分钟到1.25分钟)。我已创建此代码:-OnTrigger-(适用于电缆) 使用UnityEngine;使用系统集合;公共课 OnTriggerInterscroll:单行为{C# “如何拥有球员”;幻灯片“;在管道和轨道上?,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我需要创建一个滑动或滑动效果。我想在sunset overdrive中创建滑动或滑动效果: 当主角在电缆和轨道上滑倒时。如何创建相同的结果?在C#中。看这个视频:(从1.20分钟到1.25分钟)。我已创建此代码:-OnTrigger-(适用于电缆) 使用UnityEngine;使用系统集合;公共课 OnTriggerInterscroll:单行为{ /*ISTRUZIONI : Inserire questo Script all'interno dell'Elemento che entr
/*ISTRUZIONI : Inserire questo Script all'interno dell'Elemento che entra in contatto con il Trigger */
public Transform target; // Player
AutoMove AutoMoveScript; // richiamo variabili Script AutoMove
// Use this for initialization
void Start () {
AutoMoveScript = target.GetComponent<AutoMove>(); // Richiano componente AutoMove
}
// Update is called once per frame
void Update () {
Vector3 targetDir = target.position - transform.position;
Debug.Log(targetDir);
}
void OnTriggerEnter(Collider other) { // Quando il player entra nel Trigger
if(other.collider.name == "MainCharacter"){
AutoMoveScript.MoveSpeed = 8; // Cambio variabile di Velocita'
AutoMoveScript.activeAutoMoveW = true; // Cambio variabile di scorrimento
AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento
}
}
void OnTriggerStay(Collider other) { // Quando il player e' nel Trigger
if(other.collider.name == "MainCharacter"){
if(Input.GetKey(KeyCode.W)){
AutoMoveScript.activeAutoMoveW = true; // Cambio variabile di scorrimento
AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento
}
if(Input.GetKey(KeyCode.S)){
AutoMoveScript.activeAutoMoveS = true; // Cambio variabile di scorrimento
AutoMoveScript.activeAutoMoveW = false; // Cambio variabile di scorrimento
}
}
}
void OnTriggerExit(Collider other) { // Quando il player esce nel Trigger
if(other.collider.name == "MainCharacter"){
AutoMoveScript.MoveSpeed = 8; // Cambio variabile di Velocita'
AutoMoveScript.activeAutoMoveS = false; // Cambio variabile di scorrimento
AutoMoveScript.activeAutoMoveW = false; // Cambio variabile di scorrimento
}
}
}
/*ISTRUZIONI : Inserire questo Script all'interno del Player */
public bool activeAutoMoveW = false; //variabile controllo Forward
public bool activeAutoMoveS = false; //variabile controllo Back
public int MoveSpeed = 8; //variabile velocità di scorrimento
public bool activeSelect = false; //variabile controllo Select
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(activeAutoMoveW == true)
{
transform.Translate(Vector3.forward * MoveSpeed * Time.fixedDeltaTime, Space.World); // Scorrimento in avari
}
if(activeAutoMoveS == true)
{
transform.Translate(Vector3.back * MoveSpeed * Time.fixedDeltaTime, Space.World); // Scorrimento in dietro
}
if(Input.GetKeyDown(KeyCode.Q) && activeSelect == false)
{
MoveSpeed = 1; // Cambio variabile di scorrimento
activeSelect = true; // Cambio variabile Slect
}else if(Input.GetKeyDown(KeyCode.Q) && activeSelect == true)
{
MoveSpeed = 8; // Cambio variabile di scorrimento
activeSelect = false; // Cambio variabile Slect
}
} }
系统创建了滑动效果,但不了解角色的方向。如果我理解正确,问题是当你想要滑动时,你不知道前进是什么。在世界空间中使用Vector3.forward的问题与你在示例中所做的一样,就是无论ob如何移动,它始终是同一个方向对象是面向对象的。在对象空间中使用Vector3.forward的问题是,它对整个对象都是一样的,所以如果你有一个像图片中那样的弯曲对象,它也不会工作 你需要一些方法来了解物体是如何弯曲的,一个简单的例子是沿着轨道的一侧手动放置一个矢量3点阵列,然后你可以通过点[i+1]-点[i]来计算方向假设你不总是从铁路的起点出发,你还需要一些方法来找出你在哪两点之间,这可能并不容易 像这样的
public class AutoMove : MonoBehaviour
{
public Vector3[] points;
private int currentIndex = -1;
...
void Update()
{
if(activeAutoMoveW == true)
{
Vector3 direction = points[i+1]-points[i];
transform.position += direction * MoveSpeed * Time.fixedDeltaTime;
if((transform.position - points[i+1]).sqrMagnitude < 0.1f) //check if we are at the next point
currentIndex++;
}
if(activeAutoMoveS == true)
{
Vector3 direction = points[i+1]-points[i];
transform.position -= direction * MoveSpeed * Time.fixedDeltaTime;
if((transform.position - points[i]).sqrMagnitude < 0.1f) //check if we are at the next point
currentIndex--;
}
if(currentIndex < 0 || currentIndex > points.Length) //check if we are at either edge of the line and then end the slip
{
activeAutoMoveW = false;
activeAutoMoveS = false;
{
...
}
public void BeginSlip(Vector3[] points) //called from the object when you want to begin the slip
{
this.points = points; //get the slip points from the object you slip on
//find the closest point
float minDist = float.MaxValue;
for(int i=0; i<points.Length; i++)
{
float currentDist = (transform.position - points[i]).sqrMagnitude;
if(currentDist < minDist)
{
minDist = currentDist;
currentIndex = i;
}
}
}
}
公共类自动移动:单行为
{
公共矢量3[]点;
private int currentIndex=-1;
...
无效更新()
{
if(activeAutoMoveW==true)
{
矢量3方向=点[i+1]-点[i];
transform.position+=方向*移动速度*时间.固定时间;
if((transform.position-points[i+1]).sqrMagnitude<0.1f)//检查我们是否在下一个点
currentIndex++;
}
如果(activeAutoMoveS==true)
{
矢量3方向=点[i+1]-点[i];
transform.position-=方向*移动速度*时间.固定时间;
if((transform.position-points[i]).sqrMagnitude<0.1f)//检查我们是否在下一个点
当前索引--;
}
if(currentIndex<0 | | currentIndex>points.Length)//检查我们是否在线条的任意边缘,然后结束滑动
{
activeAutoMoveW=false;
activeAutoMoveS=false;
{
...
}
public void BeginSlip(Vector3[]points)//在开始滑动时从对象调用
{
this.points=points;//从滑动的对象获取滑动点
//找到最近的点
float minDist=float.MaxValue;
对于(int i=0;看,我理解代码,但如何创建点曲线?如何找到我是哪些点?对于曲线,我认为是“for method”[对于(int i=0;i