मैं एकता में 2 डी प्लेटफार्म लिख रहा हूं और मैं खिलाड़ी को एक चलती प्लेटफॉर्म पर रहने की कोशिश कर रहा हूं। मैंने एक या दो दिन के लिए खोज और टिंकरिंग की है, और मुझे कोई भाग्य नहीं है।मूविंग प्लेटफॉर्म पर बने रहें
असल में, मुझे चरित्र को छूने पर मंच के साथ आगे बढ़ने की कोशिश करने के लिए कहा गया है। सबसे पहले, अगर मैं OnTriggerEnter() से संबंधित कुछ भी उपयोग करता हूं, तो खिलाड़ी मंच के माध्यम से सही हो जाता है। अगर मैं ऑनकॉलिजनइंटर() (प्लेयर पर एक कैरेक्टर कंट्रोलर और प्लेटफॉर्म पर बॉक्सकॉलिडर के साथ) करता हूं, तो कुछ भी नहीं होता है। ये दो चीजें हैं जिन्हें मैंने सबसे अधिक सुझाव दिया है। दूसरा मंच के साथ खिलाड़ी को parenting है, लेकिन यह स्पष्ट रूप से "समस्याओं" का कारण बनता है (अक्सर कहा, कभी समझाया नहीं)।
तो, मैं चलने वाले प्लेटफ़ॉर्म पर रहने के लिए खिलाड़ी को कैसे प्राप्त कर सकता हूं?
public class MovingPlatform : MonoBehaviour
{
private float useSpeed;
public float directionSpeed = 9.0f;
float origY;
public float distance = 10.0f;
// Use this for initialization
void Start()
{
origY = transform.position.y;
useSpeed = -directionSpeed;
}
// Update is called once per frame
void Update()
{
if(origY - transform.position.y > distance)
{
useSpeed = directionSpeed; //flip direction
}
else if(origY - transform.position.y < -distance)
{
useSpeed = -directionSpeed; //flip direction
}
transform.Translate(0,useSpeed*Time.deltaTime,0);
}
यहाँ और (अद्यतन में) प्लेयर के आंदोलन के लिए कोड है:: यहाँ चलती मंच के लिए कोड है
CharacterController controller = GetComponent<CharacterController>();
float rotation = Input.GetAxis("Horizontal");
if(controller.isGrounded)
{
moveDirection.Set(rotation, 0, 0); //moveDirection = new Vector3(rotation, 0, 0);
moveDirection = transform.TransformDirection(moveDirection);
//running code
if(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) //check if shift is held
{ running = true; }
else
{ running = false; }
moveDirection *= running ? runningSpeed : walkingSpeed; //set speed
//jump code
if(Input.GetButtonDown("Jump"))
{
//moveDirection.y = jumpHeight;
jump();
}
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
संपादित करें: मुझे लगता है यह करने के लिए हो सकता है मैं कैसे 'के साथ मैं खिलाड़ी और मंच को परिभाषित करता हूं, लेकिन मैंने विभिन्न संयोजनों की कोशिश की है। यदि मंच एक ट्रिगर (इसके कोलाइडर पर) है, तो खिलाड़ी लगातार इसके माध्यम से चला जाता है। यदि नहीं, तो मैं ऑनट्रिगर कार्यों का उपयोग नहीं कर सकता। मेरे पास खिलाड़ी और मंच दोनों से जुड़ा एक कठोर है, लेकिन ऐसा कुछ भी प्रभावित नहीं होता है। जब खिलाड़ी कुछ सेटअप में मंच पर जाता है, तो वह झटके और अक्सर गिरने से समाप्त होता है।
मैं Unity3D उपयोग नहीं किया है, लेकिन ऐसा लगता है 'moveDirection + = theplatform कुछ करने के लिए संभव है।जब प्लेटफॉर्म पर चरित्र होता है तो moveDirection'? – mbeckish
मैंने कोशिश की है, लेकिन मुझे ऑनट्रिगर और ऑनकॉलिजन फ़ंक्शंस के साथ समस्याओं में भागना प्रतीत होता है, जो उस समय "जब खिलाड़ी मंच पर है" के लिए ज़िम्मेदार होगा। मुझे लगता है कि मुझे अपनी वस्तुओं को परिभाषित करने के तरीके के साथ क्या करना है, लेकिन मुझे यकीन नहीं है कि उन्हें परिभाषित करने का उचित तरीका यह है कि यह काम कर सकता है। – muttley91
इसके अलावा, आपको यह सुनिश्चित करने की आवश्यकता होगी कि चरित्र की चाल Direction.y आपके प्लेटफ़ॉर्म की चाल से कम कभी नहीं है। या, अन्यथा आप तब तक गिरेंगे (जब तक यूनिटी 3 डी फ्रेमवर्क आपके लिए स्वचालित रूप से संभालता है?) – mbeckish