2017-12-02 62 views
0

我剩下2个物体没有刚体,右边是刚性体(是Kinematic = false)。我可以通过左边的和右边的我可以移动。如何使角色不通过并移动对象?如何制作固定物体

没有刚体

enter image description here

随着刚体

enter image description here

enter image description here

enter image description here

enter image description here

using System.Collections; 
using UnityEngine; 

public class Person_controller : MonoBehaviour { 
public float rotationPeriod = 0.3f;  
public float sideLength = 1f;   

bool isRotate = false;     
float directionX = 0;     
float directionZ = 0;    

Vector3 startPos;      
float rotationTime = 0;     
float radius;       
Quaternion fromRotation;    
Quaternion toRotation;     

void Start() { 

radius = sideLength * Mathf.Sqrt (2f)/2f; 

} 

void Update() { 

float x = 0; 
float y = 0; 


x = Input.GetAxisRaw ("Horizontal"); 
if (x == 0) { 
    y = Input.GetAxisRaw ("Vertical"); 
} 


if ((x != 0 || y != 0) && !isRotate) { 
    directionX = y;               
    directionZ = x;                
    startPos = transform.position;            
    fromRotation = transform.rotation;           
    transform.Rotate (directionZ * 90, 0, directionX * 90,   Space.World);   
    toRotation = transform.rotation;            
    transform.rotation = fromRotation;           
    rotationTime = 0;  

    isRotate = true;                
    } 
} 

void FixedUpdate() { 

if (isRotate) { 

    rotationTime += Time.fixedDeltaTime;          
    float ratio = Mathf.Lerp(0, 1, rotationTime/rotationPeriod);   


    float thetaRad = Mathf.Lerp(0, Mathf.PI/2f, ratio);     
    float distanceX = (-directionX * radius * (Mathf.Cos (45f * Mathf.Deg2Rad) - Mathf.Cos (45f * Mathf.Deg2Rad + thetaRad)))*sideLength; 
    float distanceY = radius * (Mathf.Sin(45f * Mathf.Deg2Rad + thetaRad) - Mathf.Sin (45f * Mathf.Deg2Rad));      
    float distanceZ = directionZ * radius * (Mathf.Cos (45f * Mathf.Deg2Rad) - Mathf.Cos (45f * Mathf.Deg2Rad + thetaRad));   
    transform.position = new Vector3(startPos.x + distanceX, startPos.y + distanceY, startPos.z + distanceZ);      


    transform.rotation = Quaternion.Lerp(fromRotation, toRotation, ratio);  


    if (ratio == 1) { 
     isRotate = false; 
     directionX = 0; 
     directionZ = 0; 
     rotationTime = 0; 
    } 
    } 
} 
} 
+0

你为什么要添加一个“monogame”标签?这似乎纯粹是关于Unity – UnholySheep

+0

您是否还尝试过仅向运动物体添加运动刚体(Kinematic设置为true)? – UnholySheep

+0

是的,只是穿过物体 –

回答