«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
عبور دشمن از موانع :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

قدیمیا دلم براتون تنگ شده... فقط معرفی کنید توی پیامک یا تماس یاد بیارید.
اگه جواب ندادم شاید موقعیت نداشته باشم.
بگید توی پیام از بچه های پرومیکرز هستید.

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

عبور دشمن از موانع

چهارشنبه, ۱۹ اسفند ۱۳۹۴، ۰۳:۳۵ ب.ظ

gameover.blog.ir

ابتدا به دشمن یک کاراکتر کنترلر بدید(با زدن دکمه add component) یا Component/Physics/Character Controller.

این دو خط رو سعی کنید بالای اسکریپت باشه(اگه تکراری بود باید حذف کنید):

using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour { public float speed = 4f; public float jetPackSpeed = 0.3f; public float jumpSpeed = 8f; public float gravity = 10; private Transform _Player; private CharacterController character; private Transform tr; private float vSpeed = 0f; private bool jump = false; void Start () { _Player = GameObject.FindGameObjectWithTag("Player").transform; character = GetComponent&lt;CharacterController&gt;(); tr = transform; } void Update () { // find the vector enemy -> player Vector3 chaseDir = _Player.position - tr.position; chaseDir.y = 0; // let only the horizontal direction float distance = chaseDir.magnitude; // get the distance if (distance <= 2) Debug.Log("Attacking Player"); else { // find the player direction Quaternion rot = Quaternion.LookRotation(chaseDir); // rotate to his direction tr.rotation = Quaternion.Slerp(tr.rotation, rot, Time.deltaTime * 4); if (character.isGrounded){ // if is grounded... vSpeed = 0; // vertical speed is zero if (jump){ // if should jump... vSpeed = jumpSpeed; // aplly jump speed jump = false; // only jump once! } } else // but if lost ground, check if it's an abyss if (!Physics.Raycast(tr.position, -tr.up, 20f)){ // if no ground below vSpeed = jetPackSpeed; // use jetpack } vSpeed -= gravity * Time.deltaTime; // apply gravity // calculate horizontal velocity vector chaseDir = chaseDir.normalized * speed; chaseDir.y += vSpeed; // include vertical speed // and move the enemy character.Move(chaseDir * Time.deltaTime); } } // if collided with some wall or block, jump void OnControllerColliderHit(ControllerColliderHit hit){ // only check lateral collisions if (Mathf.Abs(hit.normal.y) < 0.5){ jump = true; // jump if collided laterally } } }

موافقین ۰ مخالفین ۰ ۹۴/۱۲/۱۹
مدیرکل

نظرات (۱)

سلام استاد
من همیشه پیگیر وبلاگ خوبتون هستم
ممنونم از ارسال این مطلب پر محتواتون
اگر امکان داره در مورد کدها بیشتر توضیح بدید
یه سوالی هم داشتم استاد،من وقتی به کاراکتر اصلی بازیم کاراکتر کنترلر میدم،از اجسام عبور میکنه اما وقتی ریجیدبادی میدم این مشکل حل میشه،به نظرتون مشکلم از کجاست؟ اگر امکان داره برام ایمیل کنید... مرسی مرسی
پاسخ:
سلام عزیز.
اسکریپت های enemy path finding یا A star یا الگوریتم های مسیر یابی رو بکار بگیرید. الان وقت ندارم بیاد تو گروه تلگرام که بالای وبلاگ گذاشتم لینک رو.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی