Неподвижные объекты

258
03 декабря 2017, 10:29

Есть 2 объекта левый без Rigidbody а правый с Rigidbody(is Kinematic= false) через левый можно проходить насквозь а правый можно отодвигать.Как сделать так чтобы объект не отодвигался но и не проходить сквозь него?

без Rigidbody с Rigidbody Персонаж

Код персонажа

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;
        }
    }
  }
}
Answer 1

Во-первых, в скрипте заменить **transform.position** на **rigidbody.movePosition**(перестанет проходить через левый).

Во-вторых, можно на правом кубике, rigidbody установить плотность(setDensity) высокое(не будет толкать правый).

READ ALSO
.Net Core приложение с embedded базой данных

.Net Core приложение с embedded базой данных

Как-то вот не разобрался, можно ли добавить в проект, допустим - консольного приложения, базу данных и задеплоить это всё хозяйство одним dll? Если...

237
Как выставить уровень UAC на максимум?

Как выставить уровень UAC на максимум?

Подскажите, есть ли возможность по кнопке или чекбоксу (в приложении C#) установить уровень UAC на максимум?

234
Как можно сохранить ссылку на созданный обьект, чтобы изменить его после добавления в коллекцию?

Как можно сохранить ссылку на созданный обьект, чтобы изменить его после добавления в коллекцию?

Надо сломать HashSet, для чего тредуется добавить в него объект, после этого изменить его (извне коллекции)Есть следующий класс:

262
Webclient + proxy

Webclient + proxy

Таким образом точно будет работать через прокси, а не мой IP ?

206